diff --git a/.env.example b/.env.example index 4c97779..f72ffe0 100644 --- a/.env.example +++ b/.env.example @@ -1,20 +1,2 @@ -ARBISCAN_API_KEY='' -BSCSCAN_API_KEY='' -ETHERSCAN_API_KEY='' -OPTIMISM_API_KEY='' -POLYGONSCAN_API_KEY='' -BASESCAN_API_KEY='' - -ARBITRUM_RPC='' -ARB_GOERLI_RPC='' -ARB_SEPOLIA_RPC='' -OPTIMISM_RPC='' -OPTIMISM_GOERLI_RPC='' -OPTIMISM_SEPOLIA_RPC='' -POLYGON_RPC='' -POLYGON_MUMBAI_RPC='' -BSC_RPC='' -BSC_TESTNET_RPC='' -ETHEREUM_RPC='' -GOERLI_RPC='' -SEPOLIA_RPC='' \ No newline at end of file +NETWORK=sepolia +SIGNER_KEY=00000 diff --git a/contracts/AaveStrategy.sol b/contracts/AaveStrategy.sol new file mode 100644 index 0000000..836d0bd --- /dev/null +++ b/contracts/AaveStrategy.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity 0.8.20; + +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "./interfaces/IXERC20Lockbox.sol"; +import "./interfaces/IStrategy.sol"; +import "./interfaces/IAAVEPool.sol"; + +contract AaveStrategy is Initializable { + using SafeERC20 for IERC20; + + address public aavePool; + IERC20 public token; + address public vault; + + error NotAllow(); + + modifier onlyVault() { + if (msg.sender != vault) revert NotAllow(); + _; + } + + function initialize(address _aavePool, address _vault) public initializer { + aavePool = _aavePool; + token = IXERC20Lockbox(_vault).ERC20(); + vault = _vault; + token.safeIncreaseAllowance(aavePool, type(uint256).max); + } + + function withdraw( + uint256 amount_ + ) external onlyVault returns (uint256 loss_) { + return IAAVEPool(aavePool).withdraw(address(token), amount_, vault); + } + + function withdrawAll() external onlyVault { + uint256 totalAsset = totalYieldAsset(); + IAAVEPool(aavePool).withdraw(address(token), totalAsset, vault); + } + + function totalYieldAsset() public view returns (uint256 totalAssets_) { + address aToken = IAAVEPool(aavePool) + .getReserveData(address(token)) + .aTokenAddress; + return IERC20(aToken).balanceOf(address(this)); + } + + function invest(uint256 amount_) external onlyVault { + IAAVEPool(aavePool).supply(address(token), amount_, address(this), 0); + } +} diff --git a/contracts/ETHAaveStrategy.sol b/contracts/ETHAaveStrategy.sol new file mode 100644 index 0000000..a25065c --- /dev/null +++ b/contracts/ETHAaveStrategy.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity 0.8.20; + +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "./interfaces/IStrategy.sol"; +import "./interfaces/IAAVEPool.sol"; +import "./interfaces/IWETH.sol"; +import "./interfaces/IwstETH.sol"; +import "./interfaces/ILido.sol"; +import "./interfaces/IXERC20Lockbox.sol"; + +contract ETHAaveStrategy is Initializable { + using SafeERC20 for IERC20; + + address public immutable lido; + address public immutable wstETH; + address public immutable aavePool; + address public immutable vault; + + error NotAllow(); + error ErrorStrategy(); + + modifier onlyVault() { + if (msg.sender != vault) revert NotAllow(); + _; + } + + constructor(address _wstETH, address _aavePool, address _vault) { + bool isGasToken = IXERC20Lockbox(_vault).IS_GAS_TOKEN(); + if (!isGasToken) revert ErrorStrategy(); + aavePool = _aavePool; + vault = _vault; + wstETH = _wstETH; + lido = IwstETH(wstETH).stETH(); + } + + function initialize() public initializer { + IERC20(wstETH).safeIncreaseAllowance(aavePool, type(uint256).max); + } + + function withdraw( + uint256 amount_ + ) public onlyVault returns (uint256 loss_) { + uint256 wstETHAmount = IwstETH(wstETH).getWstETHByStETH(amount_); + //1. AAVE -> wstETH + IAAVEPool(aavePool).withdraw(wstETH, wstETHAmount, address(this)); + //2. wstETH -> stETH + IwstETH(wstETH).unwrap(wstETHAmount); + //3. transfer stETH to vault, since we can't withdraw stETH to ETH instantly + ILido(lido).transfer(vault, amount_); + return amount_; + } + + function withdrawAll() external { + uint256 totalAsset = totalYieldAsset(); + withdraw(totalAsset); + } + + function totalYieldAsset() public view returns (uint256 totalAssets_) { + address aToken = IAAVEPool(aavePool) + .getReserveData(wstETH) + .aTokenAddress; + uint256 totalBalance = IERC20(aToken).balanceOf(address(this)); + return IwstETH(wstETH).getStETHByWstETH(totalBalance); + } + + function invest(uint256 amount_) external payable onlyVault { + //1. ETH -> stETH + ILido(lido).submit{value: amount_}(address(0)); + //2. stETH -> wstETH + uint256 wstETHAmount = IwstETH(wstETH).wrap(amount_); + //3. wstETH -> AAVE + IAAVEPool(aavePool).supply(wstETH, wstETHAmount, address(this), 0); + } + + receive() external payable {} +} diff --git a/contracts/XERC20.sol b/contracts/XERC20.sol new file mode 100644 index 0000000..f48b522 --- /dev/null +++ b/contracts/XERC20.sol @@ -0,0 +1,329 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.4 <0.9.0; + +import {IXERC20} from "./interfaces/IXERC20.sol"; +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + +contract XERC20 is ERC20, Ownable, IXERC20, ERC20Permit { + /** + * @notice The duration it takes for the limits to fully replenish + */ + uint256 private constant _DURATION = 1 days; + + /** + * @notice The address of the factory which deployed this contract + */ + address public immutable FACTORY; + + /** + * @notice The address of the lockbox contract + */ + address public lockbox; + + /** + * @notice Maps bridge address to bridge configurations + */ + mapping(address => Bridge) public bridges; + + /** + * @notice Constructs the initial config of the XERC20 + * + * @param _name The name of the token + * @param _symbol The symbol of the token + * @param _factory The factory which deployed this contract + */ + + constructor( + string memory _name, + string memory _symbol, + address _factory + ) ERC20(_name, _symbol) ERC20Permit(_name) { + _transferOwnership(_factory); + FACTORY = _factory; + } + + /** + * @notice Mints tokens for a user + * @dev Can only be called by a bridge + * @param _user The address of the user who needs tokens minted + * @param _amount The amount of tokens being minted + */ + + function mint(address _user, uint256 _amount) public { + _mintWithCaller(msg.sender, _user, _amount); + } + + /** + * @notice Burns tokens for a user + * @dev Can only be called by a bridge + * @param _user The address of the user who needs tokens burned + * @param _amount The amount of tokens being burned + */ + + function burn(address _user, uint256 _amount) public { + if (msg.sender != _user) { + _spendAllowance(_user, msg.sender, _amount); + } + + _burnWithCaller(msg.sender, _user, _amount); + } + + /** + * @notice Sets the lockbox address + * + * @param _lockbox The address of the lockbox + */ + + function setLockbox(address _lockbox) public { + if (msg.sender != FACTORY) revert IXERC20_NotFactory(); + lockbox = _lockbox; + + emit LockboxSet(_lockbox); + } + + /** + * @notice Updates the limits of any bridge + * @dev Can only be called by the owner + * @param _mintingLimit The updated minting limit we are setting to the bridge + * @param _burningLimit The updated burning limit we are setting to the bridge + * @param _bridge The address of the bridge we are setting the limits too + */ + function setLimits( + address _bridge, + uint256 _mintingLimit, + uint256 _burningLimit + ) external onlyOwner { + _changeMinterLimit(_bridge, _mintingLimit); + _changeBurnerLimit(_bridge, _burningLimit); + emit BridgeLimitsSet(_mintingLimit, _burningLimit, _bridge); + } + + /** + * @notice Returns the max limit of a bridge + * + * @param _bridge the bridge we are viewing the limits of + * @return _limit The limit the bridge has + */ + + function mintingMaxLimitOf( + address _bridge + ) public view returns (uint256 _limit) { + _limit = bridges[_bridge].minterParams.maxLimit; + } + + /** + * @notice Returns the max limit of a bridge + * + * @param _bridge the bridge we are viewing the limits of + * @return _limit The limit the bridge has + */ + + function burningMaxLimitOf( + address _bridge + ) public view returns (uint256 _limit) { + _limit = bridges[_bridge].burnerParams.maxLimit; + } + + /** + * @notice Returns the current limit of a bridge + * + * @param _bridge the bridge we are viewing the limits of + * @return _limit The limit the bridge has + */ + + function mintingCurrentLimitOf( + address _bridge + ) public view returns (uint256 _limit) { + _limit = _getCurrentLimit( + bridges[_bridge].minterParams.currentLimit, + bridges[_bridge].minterParams.maxLimit, + bridges[_bridge].minterParams.timestamp, + bridges[_bridge].minterParams.ratePerSecond + ); + } + + /** + * @notice Returns the current limit of a bridge + * + * @param _bridge the bridge we are viewing the limits of + * @return _limit The limit the bridge has + */ + + function burningCurrentLimitOf( + address _bridge + ) public view returns (uint256 _limit) { + _limit = _getCurrentLimit( + bridges[_bridge].burnerParams.currentLimit, + bridges[_bridge].burnerParams.maxLimit, + bridges[_bridge].burnerParams.timestamp, + bridges[_bridge].burnerParams.ratePerSecond + ); + } + + /** + * @notice Uses the limit of any bridge + * @param _bridge The address of the bridge who is being changed + * @param _change The change in the limit + */ + + function _useMinterLimits(address _bridge, uint256 _change) internal { + uint256 _currentLimit = mintingCurrentLimitOf(_bridge); + bridges[_bridge].minterParams.timestamp = block.timestamp; + bridges[_bridge].minterParams.currentLimit = _currentLimit - _change; + } + + /** + * @notice Uses the limit of any bridge + * @param _bridge The address of the bridge who is being changed + * @param _change The change in the limit + */ + + function _useBurnerLimits(address _bridge, uint256 _change) internal { + uint256 _currentLimit = burningCurrentLimitOf(_bridge); + bridges[_bridge].burnerParams.timestamp = block.timestamp; + bridges[_bridge].burnerParams.currentLimit = _currentLimit - _change; + } + + /** + * @notice Updates the limit of any bridge + * @dev Can only be called by the owner + * @param _bridge The address of the bridge we are setting the limit too + * @param _limit The updated limit we are setting to the bridge + */ + + function _changeMinterLimit(address _bridge, uint256 _limit) internal { + uint256 _oldLimit = bridges[_bridge].minterParams.maxLimit; + uint256 _currentLimit = mintingCurrentLimitOf(_bridge); + bridges[_bridge].minterParams.maxLimit = _limit; + + bridges[_bridge].minterParams.currentLimit = _calculateNewCurrentLimit( + _limit, + _oldLimit, + _currentLimit + ); + + bridges[_bridge].minterParams.ratePerSecond = _limit / _DURATION; + bridges[_bridge].minterParams.timestamp = block.timestamp; + } + + /** + * @notice Updates the limit of any bridge + * @dev Can only be called by the owner + * @param _bridge The address of the bridge we are setting the limit too + * @param _limit The updated limit we are setting to the bridge + */ + + function _changeBurnerLimit(address _bridge, uint256 _limit) internal { + uint256 _oldLimit = bridges[_bridge].burnerParams.maxLimit; + uint256 _currentLimit = burningCurrentLimitOf(_bridge); + bridges[_bridge].burnerParams.maxLimit = _limit; + + bridges[_bridge].burnerParams.currentLimit = _calculateNewCurrentLimit( + _limit, + _oldLimit, + _currentLimit + ); + + bridges[_bridge].burnerParams.ratePerSecond = _limit / _DURATION; + bridges[_bridge].burnerParams.timestamp = block.timestamp; + } + + /** + * @notice Updates the current limit + * + * @param _limit The new limit + * @param _oldLimit The old limit + * @param _currentLimit The current limit + */ + + function _calculateNewCurrentLimit( + uint256 _limit, + uint256 _oldLimit, + uint256 _currentLimit + ) internal pure returns (uint256 _newCurrentLimit) { + uint256 _difference; + + if (_oldLimit > _limit) { + _difference = _oldLimit - _limit; + _newCurrentLimit = _currentLimit > _difference + ? _currentLimit - _difference + : 0; + } else { + _difference = _limit - _oldLimit; + _newCurrentLimit = _currentLimit + _difference; + } + } + + /** + * @notice Gets the current limit + * + * @param _currentLimit The current limit + * @param _maxLimit The max limit + * @param _timestamp The timestamp of the last update + * @param _ratePerSecond The rate per second + */ + + function _getCurrentLimit( + uint256 _currentLimit, + uint256 _maxLimit, + uint256 _timestamp, + uint256 _ratePerSecond + ) internal view returns (uint256 _limit) { + _limit = _currentLimit; + if (_limit == _maxLimit) { + return _limit; + } else if (_timestamp + _DURATION <= block.timestamp) { + _limit = _maxLimit; + } else if (_timestamp + _DURATION > block.timestamp) { + uint256 _timePassed = block.timestamp - _timestamp; + uint256 _calculatedLimit = _limit + (_timePassed * _ratePerSecond); + _limit = _calculatedLimit > _maxLimit + ? _maxLimit + : _calculatedLimit; + } + } + + /** + * @notice Internal function for burning tokens + * + * @param _caller The caller address + * @param _user The user address + * @param _amount The amount to burn + */ + + function _burnWithCaller( + address _caller, + address _user, + uint256 _amount + ) internal { + if (_caller != lockbox) { + uint256 _currentLimit = burningCurrentLimitOf(_caller); + if (_currentLimit < _amount) revert IXERC20_NotHighEnoughLimits(); + _useBurnerLimits(_caller, _amount); + } + _burn(_user, _amount); + } + + /** + * @notice Internal function for minting tokens + * + * @param _caller The caller address + * @param _user The user address + * @param _amount The amount to mint + */ + + function _mintWithCaller( + address _caller, + address _user, + uint256 _amount + ) internal { + if (_caller != lockbox) { + uint256 _currentLimit = mintingCurrentLimitOf(_caller); + if (_currentLimit < _amount) revert IXERC20_NotHighEnoughLimits(); + _useMinterLimits(_caller, _amount); + } + _mint(_user, _amount); + } +} diff --git a/contracts/XERC20Factory.sol b/contracts/XERC20Factory.sol new file mode 100644 index 0000000..9f1d023 --- /dev/null +++ b/contracts/XERC20Factory.sol @@ -0,0 +1,181 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.4 <0.9.0; + +import {XERC20} from "./XERC20.sol"; +import {IXERC20Factory} from "./interfaces/IXERC20Factory.sol"; +import {XERC20Lockbox} from "./XERC20Lockbox.sol"; +import {CREATE3} from "./lib/CREATE3.sol"; +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; + +contract XERC20Factory is IXERC20Factory { + using EnumerableSet for EnumerableSet.AddressSet; + + /** + * @notice Address of the xerc20 maps to the address of its lockbox if it has one + */ + mapping(address => address) public lockboxRegistry; + + /** + * @notice The set of registered lockboxes + */ + EnumerableSet.AddressSet internal _lockboxRegistryArray; + + /** + * @notice The set of registered XERC20 tokens + */ + EnumerableSet.AddressSet internal _xerc20RegistryArray; + + /** + * @notice Deploys XERC20 & XERC20Lockbox contract for a token + * @dev _limits and _minters must be the same length + * @param _name The name of the token + * @param _symbol The symbol of the token + * @param _minterLimits The array of limits that you are adding (optional, can be an empty array) + * @param _burnerLimits The array of limits that you are adding (optional, can be an empty array) + * @param _bridges The array of bridges that you are adding (optional, can be an empty array) + */ + function deployToken( + address _baseToken, + bool _isGasToken, + string memory _name, + string memory _symbol, + uint256[] memory _minterLimits, + uint256[] memory _burnerLimits, + address[] memory _bridges + ) external { + address xERC20 = deployXERC20( + _name, + _symbol, + _minterLimits, + _burnerLimits, + _bridges + ); + deployLockbox(xERC20, _baseToken, _isGasToken); + } + + /** + * @notice Deploys an XERC20 contract using CREATE3 + * @dev _limits and _minters must be the same length + * @param _name The name of the token + * @param _symbol The symbol of the token + * @param _minterLimits The array of limits that you are adding (optional, can be an empty array) + * @param _burnerLimits The array of limits that you are adding (optional, can be an empty array) + * @param _bridges The array of bridges that you are adding (optional, can be an empty array) + */ + + function deployXERC20( + string memory _name, + string memory _symbol, + uint256[] memory _minterLimits, + uint256[] memory _burnerLimits, + address[] memory _bridges + ) public returns (address _xerc20) { + _xerc20 = _deployXERC20( + _name, + _symbol, + _minterLimits, + _burnerLimits, + _bridges + ); + + emit XERC20Deployed(_xerc20); + } + + /** + * @notice Deploys an XERC20Lockbox contract using CREATE3 + * + * @dev When deploying a lockbox for the gas token of the chain, then, the base token needs to be address(0) + * @param _xerc20 The address of the xerc20 that you want to deploy a lockbox for + * @param _baseToken The address of the base token that you want to lock + * @param _isGasToken Whether or not the base token is the native (gas) token of the chain. Eg: MATIC for polygon chain + */ + + function deployLockbox( + address _xerc20, + address _baseToken, + bool _isGasToken + ) public returns (address payable _lockbox) { + if ( + (_baseToken == address(0) && !_isGasToken) || + (_isGasToken && _baseToken != address(0)) + ) { + revert IXERC20Factory_BadTokenAddress(); + } + + if (XERC20(_xerc20).owner() != msg.sender) + revert IXERC20Factory_NotOwner(); + if (lockboxRegistry[_baseToken] != address(0)) + revert IXERC20Factory_LockboxAlreadyDeployed(); + + _lockbox = _deployLockbox(_xerc20, _baseToken, _isGasToken); + + emit LockboxDeployed(_lockbox); + } + + /** + * @notice Deploys an XERC20 contract using CREATE3 + * @dev _limits and _minters must be the same length + * @param _name The name of the token + * @param _symbol The symbol of the token + * @param _minterLimits The array of limits that you are adding (optional, can be an empty array) + * @param _burnerLimits The array of limits that you are adding (optional, can be an empty array) + * @param _bridges The array of burners that you are adding (optional, can be an empty array) + */ + + function _deployXERC20( + string memory _name, + string memory _symbol, + uint256[] memory _minterLimits, + uint256[] memory _burnerLimits, + address[] memory _bridges + ) internal returns (address _xerc20) { + uint256 _bridgesLength = _bridges.length; + if ( + _minterLimits.length != _bridgesLength || + _burnerLimits.length != _bridgesLength + ) { + revert IXERC20Factory_InvalidLength(); + } + bytes32 _salt = keccak256(abi.encodePacked(_name, _symbol, msg.sender)); + bytes memory _creation = type(XERC20).creationCode; + bytes memory _bytecode = abi.encodePacked( + _creation, + abi.encode(_name, _symbol, address(this)) + ); + + _xerc20 = CREATE3.deploy(_salt, _bytecode, 0); + + EnumerableSet.add(_xerc20RegistryArray, _xerc20); + + for (uint256 _i; _i < _bridgesLength; ++_i) { + XERC20(_xerc20).setLimits( + _bridges[_i], + _minterLimits[_i], + _burnerLimits[_i] + ); + } + + XERC20(_xerc20).transferOwnership(msg.sender); + } + + function _deployLockbox( + address _xerc20, + address _baseToken, + bool _isGasToken + ) internal returns (address payable _lockbox) { + bytes32 _salt = keccak256( + abi.encodePacked(_xerc20, _baseToken, msg.sender) + ); + bytes memory _creation = type(XERC20Lockbox).creationCode; + bytes memory _bytecode = abi.encodePacked( + _creation, + abi.encode(_xerc20, _baseToken, _isGasToken, msg.sender) + ); + + _lockbox = payable(CREATE3.deploy(_salt, _bytecode, 0)); + + XERC20(_xerc20).setLockbox(address(_lockbox)); + EnumerableSet.add(_lockboxRegistryArray, _lockbox); + lockboxRegistry[_baseToken] = _lockbox; + } +} diff --git a/contracts/XERC20Lockbox.sol b/contracts/XERC20Lockbox.sol new file mode 100644 index 0000000..36bcce8 --- /dev/null +++ b/contracts/XERC20Lockbox.sol @@ -0,0 +1,234 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.4 <0.9.0; + +import {IXERC20} from "./interfaces/IXERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol"; +import {IXERC20Lockbox} from "./interfaces/IXERC20Lockbox.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {IStrategy} from "./interfaces/IStrategy.sol"; + +contract XERC20Lockbox is Ownable, IXERC20Lockbox { + using SafeERC20 for IERC20; + using SafeCast for uint256; + + /** + * @notice The XERC20 token of this contract + */ + IXERC20 public immutable XERC20; + + /** + * @notice The ERC20 token of this contract + */ + IERC20 public immutable ERC20; + + /** + * @notice Whether the ERC20 token is the native gas token of this chain + */ + bool public immutable IS_GAS_TOKEN; + + /** + * @notice Exchange rate between xERC20 and ERC20 + */ + uint256 public exchangeRate; + + /** + * @notice Address of the strategy contract + */ + address public strategy; + + /** + * @notice Constructor + * + * @param _xerc20 The address of the XERC20 contract + * @param _erc20 The address of the ERC20 contract + * @param _isGasToken Whether the ERC20 token is the native gas token of this chain or not + */ + + constructor( + address _xerc20, + address _erc20, + bool _isGasToken, + address initialOwner + ) { + _transferOwnership(initialOwner); + XERC20 = IXERC20(_xerc20); + ERC20 = IERC20(_erc20); + IS_GAS_TOKEN = _isGasToken; + exchangeRate = 1e18; + } + + /** + * @notice Deposit native tokens into the lockbox + */ + + function depositGasToken() public payable { + if (!IS_GAS_TOKEN) revert IXERC20Lockbox_NotGasToken(); + + _deposit(msg.sender, msg.value); + } + + /** + * @notice Deposit ERC20 tokens into the lockbox + * + * @param _amount The amount of tokens to deposit + */ + + function deposit(uint256 _amount) external { + if (IS_GAS_TOKEN) revert IXERC20Lockbox_GasToken(); + + _deposit(msg.sender, _amount); + } + + /** + * @notice Deposit ERC20 tokens into the lockbox, and send the XERC20 to a user + * + * @param _to The user to send the XERC20 to + * @param _amount The amount of tokens to deposit + */ + + function depositTo(address _to, uint256 _amount) external { + if (IS_GAS_TOKEN) revert IXERC20Lockbox_GasToken(); + + _deposit(_to, _amount); + } + + /** + * @notice Deposit the native asset into the lockbox, and send the XERC20 to a user + * + * @param _to The user to send the XERC20 to + */ + + function depositGasTokenTo(address _to) public payable { + if (!IS_GAS_TOKEN) revert IXERC20Lockbox_NotGasToken(); + + _deposit(_to, msg.value); + } + + /** + * @notice Withdraw ERC20 tokens from the lockbox + * + * @param _amount The amount of tokens to withdraw + */ + + function withdraw(uint256 _amount) external { + _withdraw(msg.sender, _amount); + } + + /** + * @notice Withdraw tokens from the lockbox + * + * @param _to The user to withdraw to + * @param _amount The amount of tokens to withdraw + */ + + function withdrawTo(address _to, uint256 _amount) external { + _withdraw(_to, _amount); + } + + /** + * @notice Withdraw tokens from the lockbox + * + * @param _to The user to withdraw to + * @param _amount The amount of tokens to withdraw + */ + + function _withdraw(address _to, uint256 _amount) internal { + uint256 share = (_amount * 1e18) / exchangeRate; + + emit Withdraw(_to, _amount, share); + + XERC20.burn(msg.sender, share); + + if (IS_GAS_TOKEN) { + (bool _success, ) = payable(_to).call{value: _amount}(""); + if (!_success) revert IXERC20Lockbox_WithdrawFailed(); + } else { + ERC20.safeTransfer(_to, _amount); + } + } + + /** + * @notice Deposit tokens into the lockbox + * + * @param _to The address to send the XERC20 to + * @param _amount The amount of tokens to deposit + */ + + function _deposit(address _to, uint256 _amount) internal { + if (!IS_GAS_TOKEN) { + ERC20.safeTransferFrom(msg.sender, address(this), _amount); + } + + uint256 share = (_amount * 1e18) / exchangeRate; + + XERC20.mint(_to, share); + emit Deposit(_to, _amount, share); + } + + receive() external payable { + depositGasToken(); + } + + /** + * @notice Update exchange Rate, only owner can call this function + * + * @param _exchangeRate New exchange rate value + */ + function setExchangeRate(uint256 _exchangeRate) external onlyOwner { + exchangeRate = _exchangeRate; + } + + /** + * @notice Update strategy address, only owner can call this function + * + * @param strategy_ New strategy contract address + */ + function setStrategy(address strategy_) external onlyOwner { + strategy = strategy_; + } + + /** + * @notice yield interest by strategy contract, only owner can call this function + * + * @param amount yield amount + */ + function strategyYield(uint256 amount) external onlyOwner { + if (IS_GAS_TOKEN) { + (bool success, ) = strategy.call{value: amount}(new bytes(0)); + require(success, "ETH_TRANSFER_FAILED"); + } else { + ERC20.safeTransfer(strategy, amount); + } + IStrategy(strategy).invest(amount); + } + + /** + * @notice withdraw asset from yield contract, only owner can call this function + * + * @param amount withdraw amount + */ + function strategyWithdraw(uint256 amount) external onlyOwner { + if (amount == 0) { + IStrategy(strategy).withdrawAll(); + } else { + IStrategy(strategy).withdraw(amount); + } + } + + /** + * @notice Rescue erc20 from this contract address. only owner can call this function + * @param token The token address to be rescued. + * @param to The account address to receive token + * @param amount The amount to be rescued + **/ + function rescueERC20( + address token, + address to, + uint256 amount + ) external onlyOwner { + IERC20(token).safeTransfer(to, amount); + emit RescueERC20(token, to, amount); + } +} diff --git a/contracts/interfaces/IAAVEPool.sol b/contracts/interfaces/IAAVEPool.sol new file mode 100644 index 0000000..a57cb48 --- /dev/null +++ b/contracts/interfaces/IAAVEPool.sol @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: agpl-3.0 +pragma solidity ^0.8.0; + +interface IAAVEPool { + struct ReserveData { + //stores the reserve configuration + ReserveConfigurationMap configuration; + //the liquidity index. Expressed in ray + uint128 liquidityIndex; + //the current supply rate. Expressed in ray + uint128 currentLiquidityRate; + //variable borrow index. Expressed in ray + uint128 variableBorrowIndex; + //the current variable borrow rate. Expressed in ray + uint128 currentVariableBorrowRate; + //the current stable borrow rate. Expressed in ray + uint128 currentStableBorrowRate; + //timestamp of last update + uint40 lastUpdateTimestamp; + //the id of the reserve. Represents the position in the list of the active reserves + uint16 id; + //aToken address + address aTokenAddress; + //stableDebtToken address + address stableDebtTokenAddress; + //variableDebtToken address + address variableDebtTokenAddress; + //address of the interest rate strategy + address interestRateStrategyAddress; + //the current treasury balance, scaled + uint128 accruedToTreasury; + //the outstanding unbacked aTokens minted through the bridging feature + uint128 unbacked; + //the outstanding debt borrowed against this asset in isolation mode + uint128 isolationModeTotalDebt; + } + + struct ReserveConfigurationMap { + //bit 0-15: LTV + //bit 16-31: Liq. threshold + //bit 32-47: Liq. bonus + //bit 48-55: Decimals + //bit 56: reserve is active + //bit 57: reserve is frozen + //bit 58: borrowing is enabled + //bit 59: stable rate borrowing enabled + //bit 60: asset is paused + //bit 61: borrowing in isolation mode is enabled + //bit 62-63: reserved + //bit 64-79: reserve factor + //bit 80-115 borrow cap in whole tokens, borrowCap == 0 => no cap + //bit 116-151 supply cap in whole tokens, supplyCap == 0 => no cap + //bit 152-167 liquidation protocol fee + //bit 168-175 eMode category + //bit 176-211 unbacked mint cap in whole tokens, unbackedMintCap == 0 => minting disabled + //bit 212-251 debt ceiling for isolation mode with (ReserveConfiguration::DEBT_CEILING_DECIMALS) decimals + //bit 252-255 unused + + uint256 data; + } + + function getReserveData( + address asset + ) external view returns (ReserveData memory); + + function supply( + address asset, + uint256 amount, + address onBehalfOf, + uint16 referralCode + ) external; + + function withdraw( + address asset, + uint256 amount, + address to + ) external returns (uint256); +} diff --git a/contracts/interfaces/ILido.sol b/contracts/interfaces/ILido.sol new file mode 100644 index 0000000..14cb5e3 --- /dev/null +++ b/contracts/interfaces/ILido.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +interface ILido is IERC20 { + function getPooledEthByShares( + uint256 _sharesAmount + ) external view returns (uint256); + + function getSharesByPooledEth( + uint256 _pooledEth + ) external view returns (uint256); + + function submit(address _referral) external payable returns (uint256); +} diff --git a/contracts/interfaces/IStrategy.sol b/contracts/interfaces/IStrategy.sol index 0a4508c..c18d887 100644 --- a/contracts/interfaces/IStrategy.sol +++ b/contracts/interfaces/IStrategy.sol @@ -1,14 +1,12 @@ -pragma solidity 0.8.19; +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity 0.8.20; interface IStrategy { function withdraw(uint256 amount_) external returns (uint256 loss_); function withdrawAll() external; - function estimatedTotalAssets() - external - view - returns (uint256 totalAssets_); + function totalYieldAsset() external view returns (uint256 totalAssets_); - function invest() external; + function invest(uint256 amount_) external; } diff --git a/contracts/interfaces/IWETH.sol b/contracts/interfaces/IWETH.sol new file mode 100644 index 0000000..619f2af --- /dev/null +++ b/contracts/interfaces/IWETH.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: agpl-3.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +interface IWETH is IERC20 { + function deposit() external payable; + + function withdraw(uint256) external; +} diff --git a/contracts/interfaces/IXERC20.sol b/contracts/interfaces/IXERC20.sol new file mode 100644 index 0000000..2e19e4d --- /dev/null +++ b/contracts/interfaces/IXERC20.sol @@ -0,0 +1,131 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.4 <0.9.0; + +interface IXERC20 { + /** + * @notice Emits when a lockbox is set + * + * @param _lockbox The address of the lockbox + */ + + event LockboxSet(address _lockbox); + + /** + * @notice Emits when a limit is set + * + * @param _mintingLimit The updated minting limit we are setting to the bridge + * @param _burningLimit The updated burning limit we are setting to the bridge + * @param _bridge The address of the bridge we are setting the limit too + */ + event BridgeLimitsSet( + uint256 _mintingLimit, + uint256 _burningLimit, + address indexed _bridge + ); + + /** + * @notice Reverts when a user with too low of a limit tries to call mint/burn + */ + + error IXERC20_NotHighEnoughLimits(); + + /** + * @notice Reverts when caller is not the factory + */ + + error IXERC20_NotFactory(); + + struct Bridge { + BridgeParameters minterParams; + BridgeParameters burnerParams; + } + + struct BridgeParameters { + uint256 timestamp; + uint256 ratePerSecond; + uint256 maxLimit; + uint256 currentLimit; + } + + /** + * @notice Sets the lockbox address + * + * @param _lockbox The address of the lockbox + */ + + function setLockbox(address _lockbox) external; + + /** + * @notice Updates the limits of any bridge + * @dev Can only be called by the owner + * @param _mintingLimit The updated minting limit we are setting to the bridge + * @param _burningLimit The updated burning limit we are setting to the bridge + * @param _bridge The address of the bridge we are setting the limits too + */ + function setLimits( + address _bridge, + uint256 _mintingLimit, + uint256 _burningLimit + ) external; + + /** + * @notice Returns the max limit of a minter + * + * @param _minter The minter we are viewing the limits of + * @return _limit The limit the minter has + */ + function mintingMaxLimitOf( + address _minter + ) external view returns (uint256 _limit); + + /** + * @notice Returns the max limit of a bridge + * + * @param _bridge the bridge we are viewing the limits of + * @return _limit The limit the bridge has + */ + + function burningMaxLimitOf( + address _bridge + ) external view returns (uint256 _limit); + + /** + * @notice Returns the current limit of a minter + * + * @param _minter The minter we are viewing the limits of + * @return _limit The limit the minter has + */ + + function mintingCurrentLimitOf( + address _minter + ) external view returns (uint256 _limit); + + /** + * @notice Returns the current limit of a bridge + * + * @param _bridge the bridge we are viewing the limits of + * @return _limit The limit the bridge has + */ + + function burningCurrentLimitOf( + address _bridge + ) external view returns (uint256 _limit); + + /** + * @notice Mints tokens for a user + * @dev Can only be called by a minter + * @param _user The address of the user who needs tokens minted + * @param _amount The amount of tokens being minted + */ + + function mint(address _user, uint256 _amount) external; + + /** + * @notice Burns tokens for a user + * @dev Can only be called by a minter + * @param _user The address of the user who needs tokens burned + * @param _amount The amount of tokens being burned + */ + + function burn(address _user, uint256 _amount) external; +} diff --git a/contracts/interfaces/IXERC20Factory.sol b/contracts/interfaces/IXERC20Factory.sol new file mode 100644 index 0000000..361f4eb --- /dev/null +++ b/contracts/interfaces/IXERC20Factory.sol @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity >=0.8.4 <0.9.0; + +interface IXERC20Factory { + /** + * @notice Emitted when a new XERC20 is deployed + */ + + event XERC20Deployed(address _xerc20); + + /** + * @notice Emitted when a new XERC20Lockbox is deployed + */ + + event LockboxDeployed(address _lockbox); + + /** + * @notice Reverts when a non-owner attempts to call + */ + + error IXERC20Factory_NotOwner(); + + /** + * @notice Reverts when a lockbox is trying to be deployed from a malicious address + */ + + error IXERC20Factory_BadTokenAddress(); + + /** + * @notice Reverts when a lockbox is already deployed + */ + + error IXERC20Factory_LockboxAlreadyDeployed(); + + /** + * @notice Reverts when a xERC20 is already deployed + */ + + error IXERC20Factory_XERC20AlreadyDeployed(); + + /** + * @notice Reverts when a the length of arrays sent is incorrect + */ + error IXERC20Factory_InvalidLength(); + + /** + * @notice Deploys an XERC20 contract using CREATE3 + * @dev _limits and _minters must be the same length + * @param _name The name of the token + * @param _symbol The symbol of the token + * @param _burnerLimits The array of limits that you are adding (optional, can be an empty array) + * @param _bridges The array of burners that you are adding (optional, can be an empty array) + */ + + function deployXERC20( + string memory _name, + string memory _symbol, + uint256[] memory _minterLimits, + uint256[] memory _burnerLimits, + address[] memory _bridges + ) external returns (address _xerc20); + + /** + * @notice Deploys an XERC20Lockbox contract using CREATE3 + * + * @param _xerc20 The address of the xerc20 that you want to deploy a lockbox for + * @param _baseToken The address of the base token that you want to lock + * @param _isGasToken Whether or not the base token is native + */ + + function deployLockbox( + address _xerc20, + address _baseToken, + bool _isGasToken + ) external returns (address payable _lockbox); +} diff --git a/contracts/interfaces/IXERC20Lockbox.sol b/contracts/interfaces/IXERC20Lockbox.sol new file mode 100644 index 0000000..b9de6eb --- /dev/null +++ b/contracts/interfaces/IXERC20Lockbox.sol @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.8.4 <0.9.0; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IXERC20} from "./IXERC20.sol"; + +interface IXERC20Lockbox { + /** + * @notice Emitted when tokens are deposited into the lockbox + */ + event Deposit(address _sender, uint256 _amount, uint256 _share); + + /** + * @notice Emitted when tokens are withdrawn from the lockbox + */ + event Withdraw(address _sender, uint256 _amount, uint256 _share); + + /** + * @notice Emitted when exchange rate updated + */ + event ExchangeRateUpdate(uint256 oldVaule, uint256 newVaule); + + /** + * @notice Emitted during rescueERC20() + * @param token The address of the token + * @param to The address of the recipient + * @param amount The amount being rescued + **/ + event RescueERC20( + address indexed token, + address indexed to, + uint256 amount + ); + + /** + * @notice Reverts when a user tries to deposit native tokens on a non-native lockbox + */ + + error IXERC20Lockbox_NotGasToken(); + + /** + * @notice Reverts when a user tries to deposit non-native tokens on a native lockbox + */ + + error IXERC20Lockbox_GasToken(); + + /** + * @notice Reverts when a user tries to withdraw and the call fails + */ + + error IXERC20Lockbox_WithdrawFailed(); + + /** + * @notice Deposit ERC20 tokens into the lockbox + * + * @param _amount The amount of tokens to deposit + */ + + function deposit(uint256 _amount) external; + + /** + * @notice Deposit ERC20 tokens into the lockbox, and send the XERC20 to a user + * + * @param _user The user to send the XERC20 to + * @param _amount The amount of tokens to deposit + */ + + function depositTo(address _user, uint256 _amount) external; + + /** + * @notice Deposit the native asset into the lockbox, and send the XERC20 to a user + * + * @param _user The user to send the XERC20 to + */ + + function depositGasTokenTo(address _user) external payable; + + /** + * @notice Withdraw ERC20 tokens from the lockbox + * + * @param _amount The amount of tokens to withdraw + */ + + function withdraw(uint256 _amount) external; + + /** + * @notice Withdraw ERC20 tokens from the lockbox + * + * @param _user The user to withdraw to + * @param _amount The amount of tokens to withdraw + */ + + function withdrawTo(address _user, uint256 _amount) external; + + /** + * @notice Get underlying ERC20 token address + * + */ + function ERC20() external view returns (IERC20); + + /** + * @notice Get xERC20 token address + * + */ + function XERC20() external view returns (IXERC20); + + /** + * @notice Check if underlying token is gas token + * + */ + function IS_GAS_TOKEN() external view returns (bool); +} diff --git a/contracts/interfaces/IwstETH.sol b/contracts/interfaces/IwstETH.sol new file mode 100644 index 0000000..3394728 --- /dev/null +++ b/contracts/interfaces/IwstETH.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +interface IwstETH is IERC20 { + function stETH() external view returns (address); + + function stEthPerToken() external view returns (uint256); + + function wrap(uint256 _stETHAmount) external returns (uint256); + + function unwrap(uint256 _wstETHAmount) external returns (uint256); + + function getStETHByWstETH( + uint256 _wstETHAmount + ) external view returns (uint256); + + function getWstETHByStETH( + uint256 _stETHAmount + ) external view returns (uint256); +} diff --git a/contracts/lib/Bytes32AddressLib.sol b/contracts/lib/Bytes32AddressLib.sol new file mode 100644 index 0000000..bc857be --- /dev/null +++ b/contracts/lib/Bytes32AddressLib.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: AGPL-3.0-only +pragma solidity >=0.8.0; + +/// @notice Library for converting between addresses and bytes32 values. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/Bytes32AddressLib.sol) +library Bytes32AddressLib { + function fromLast20Bytes(bytes32 bytesValue) internal pure returns (address) { + return address(uint160(uint256(bytesValue))); + } + + function fillLast12Bytes(address addressValue) internal pure returns (bytes32) { + return bytes32(bytes20(addressValue)); + } +} diff --git a/contracts/lib/CREATE3.sol b/contracts/lib/CREATE3.sol new file mode 100644 index 0000000..cdbc306 --- /dev/null +++ b/contracts/lib/CREATE3.sol @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: AGPL-3.0-only +pragma solidity >=0.8.0; + +import {Bytes32AddressLib} from "./Bytes32AddressLib.sol"; + +/// @notice Deploy to deterministic addresses without an initcode factor. +/// @author Solmate (https://github.com/Rari-Capital/solmate/blob/main/src/utils/CREATE3.sol) +/// @author Modified from 0xSequence (https://github.com/0xSequence/create3/blob/master/contracts/Create3.sol) +library CREATE3 { + using Bytes32AddressLib for bytes32; + + //--------------------------------------------------------------------------------// + // Opcode | Opcode + Arguments | Description | Stack View // + //--------------------------------------------------------------------------------// + // 0x36 | 0x36 | CALLDATASIZE | size // + // 0x3d | 0x3d | RETURNDATASIZE | 0 size // + // 0x3d | 0x3d | RETURNDATASIZE | 0 0 size // + // 0x37 | 0x37 | CALLDATACOPY | // + // 0x36 | 0x36 | CALLDATASIZE | size // + // 0x3d | 0x3d | RETURNDATASIZE | 0 size // + // 0x34 | 0x34 | CALLVALUE | value 0 size // + // 0xf0 | 0xf0 | CREATE | newContract // + //--------------------------------------------------------------------------------// + // Opcode | Opcode + Arguments | Description | Stack View // + //--------------------------------------------------------------------------------// + // 0x67 | 0x67XXXXXXXXXXXXXXXX | PUSH8 bytecode | bytecode // + // 0x3d | 0x3d | RETURNDATASIZE | 0 bytecode // + // 0x52 | 0x52 | MSTORE | // + // 0x60 | 0x6008 | PUSH1 08 | 8 // + // 0x60 | 0x6018 | PUSH1 18 | 24 8 // + // 0xf3 | 0xf3 | RETURN | // + //--------------------------------------------------------------------------------// + bytes internal constant PROXY_BYTECODE = hex"67_36_3d_3d_37_36_3d_34_f0_3d_52_60_08_60_18_f3"; + + bytes32 internal constant PROXY_BYTECODE_HASH = keccak256(PROXY_BYTECODE); + + function deploy( + bytes32 salt, + bytes memory creationCode, + uint256 value + ) internal returns (address deployed) { + bytes memory proxyChildBytecode = PROXY_BYTECODE; + + address proxy; + assembly { + // Deploy a new contract with our pre-made bytecode via CREATE2. + // We start 32 bytes into the code to avoid copying the byte length. + proxy := create2(0, add(proxyChildBytecode, 32), mload(proxyChildBytecode), salt) + } + require(proxy != address(0), "DEPLOYMENT_FAILED"); + + deployed = getDeployed(salt); + (bool success, ) = proxy.call{value: value}(creationCode); + require(success && deployed.code.length != 0, "INITIALIZATION_FAILED"); + } + + function getDeployed(bytes32 salt) internal view returns (address) { + address proxy = keccak256( + abi.encodePacked( + // Prefix: + bytes1(0xFF), + // Creator: + address(this), + // Salt: + salt, + // Bytecode hash: + PROXY_BYTECODE_HASH + ) + ).fromLast20Bytes(); + + return + keccak256( + abi.encodePacked( + // 0xd6 = 0xc0 (short RLP prefix) + 0x16 (length of: 0x94 ++ proxy ++ 0x01) + // 0x94 = 0x80 + 0x14 (0x14 = the length of an address, 20 bytes, in hex) + hex"d6_94", + proxy, + hex"01" // Nonce of the proxy contract (1) + ) + ).fromLast20Bytes(); + } +} diff --git a/contracts/mock/MOCKLido.sol b/contracts/mock/MOCKLido.sol new file mode 100644 index 0000000..954c1ae --- /dev/null +++ b/contracts/mock/MOCKLido.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity 0.8.20; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "../interfaces/ILido.sol"; + +contract MockLido is ILido { + function getPooledEthByShares(uint256) external pure returns (uint256) { + return 1e18; + } + + function getSharesByPooledEth(uint256) external pure returns (uint256) { + return 1e18; + } + + function submit(address) external payable returns (uint256) { + return msg.value; + } + + function totalSupply() external pure returns (uint256) { + return 0; + } + + function balanceOf(address) external pure returns (uint256) { + return 0; + } + + function transfer(address, uint256) external pure returns (bool) { + return true; + } + + function allowance(address, address) external pure returns (uint256) { + return 0; + } + + function approve(address, uint256) external pure returns (bool) { + return true; + } + + function transferFrom( + address, + address, + uint256 + ) external pure returns (bool) { + return true; + } +} diff --git a/contracts/mock/MintableERC20.sol b/contracts/mock/MintableERC20.sol new file mode 100644 index 0000000..25d01d0 --- /dev/null +++ b/contracts/mock/MintableERC20.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +/** + * @title ERC20Mintable + * @dev ERC20 minting logic + */ +contract MintableERC20 is ERC20 { + constructor(string memory name, string memory symbol) ERC20(name, symbol) {} + + /** + * @dev Function to mint tokens + * @param value The amount of tokens to mint. + * @return A boolean that indicates if the operation was successful. + */ + function mint(uint256 value) public returns (bool) { + _mint(_msgSender(), value); + return true; + } + + /** + * @dev Function to mint tokens to address + * @param account The account to mint tokens. + * @param value The amount of tokens to mint. + * @return A boolean that indicates if the operation was successful. + */ + function mint(address account, uint256 value) public returns (bool) { + _mint(account, value); + return true; + } +} diff --git a/contracts/mock/MockAAVE.sol b/contracts/mock/MockAAVE.sol new file mode 100644 index 0000000..6247021 --- /dev/null +++ b/contracts/mock/MockAAVE.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity 0.8.20; + +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import "../interfaces/IAAVEPool.sol"; + +contract MockAAVE is IAAVEPool { + function getReserveData( + address + ) external pure returns (ReserveData memory) { + ReserveData memory tmp; + return tmp; + } + + function supply(address asset, uint256 amount, address, uint16) external { + IERC20(asset).transferFrom(msg.sender, address(this), amount); + } + + function withdraw( + address asset, + uint256 amount, + address to + ) external returns (uint256) { + IERC20(asset).transfer(to, amount); + return amount; + } +} diff --git a/contracts/mock/MockWstETH.sol b/contracts/mock/MockWstETH.sol new file mode 100644 index 0000000..8257171 --- /dev/null +++ b/contracts/mock/MockWstETH.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity 0.8.20; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "../interfaces/IwstETH.sol"; + +contract MockWstETH is IwstETH, ERC20 { + address internal stETH_; + + constructor(address _stETH) ERC20("TEST WSTETH", "TEST WSTETH") { + stETH_ = _stETH; + } + + function stETH() external view returns (address) { + return stETH_; + } + + function stEthPerToken() external pure returns (uint256) { + return 1e18; + } + + function wrap(uint256 _stETHAmount) external returns (uint256) { + IERC20(stETH_).transferFrom(_msgSender(), address(this), _stETHAmount); + _mint(_msgSender(), _stETHAmount); + return _stETHAmount; + } + + function unwrap(uint256 _wstETHAmount) external returns (uint256) { + _burn(_msgSender(), _wstETHAmount); + IERC20(stETH_).transfer(_msgSender(), _wstETHAmount); + return _wstETHAmount; + } + + function getStETHByWstETH( + uint256 _wstETHAmount + ) external pure returns (uint256) { + return _wstETHAmount; + } + + function getWstETHByStETH( + uint256 _stETHAmount + ) external pure returns (uint256) { + return _stETHAmount; + } +} diff --git a/contracts/superbridge/VaultProxy.sol b/contracts/proxy/ParallelProxy.sol similarity index 62% rename from contracts/superbridge/VaultProxy.sol rename to contracts/proxy/ParallelProxy.sol index b126fbd..26500bb 100644 --- a/contracts/superbridge/VaultProxy.sol +++ b/contracts/proxy/ParallelProxy.sol @@ -1,13 +1,14 @@ // SPDX-License-Identifier: GPL-3.0-only -pragma solidity 0.8.19; +pragma solidity 0.8.20; -import "openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -contract VaultProxy is TransparentUpgradeableProxy { +contract ParallelProxy is TransparentUpgradeableProxy { constructor( address implementation, - address admin_ - ) TransparentUpgradeableProxy(implementation, admin_, "") {} + address admin_, + bytes memory _data + ) TransparentUpgradeableProxy(implementation, admin_, _data) {} error OnlyProxyAdmin(); diff --git a/contracts/superbridge/AaveStrategy.sol b/contracts/superbridge/AaveStrategy.sol deleted file mode 100644 index 5a23219..0000000 --- a/contracts/superbridge/AaveStrategy.sol +++ /dev/null @@ -1,5 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity 0.8.19; - -// contract AaveStrategy { -// } diff --git a/contracts/superbridge/FiatTokenV2_1/IFiatTokenV2_1_Mintable.sol b/contracts/superbridge/FiatTokenV2_1/IFiatTokenV2_1_Mintable.sol deleted file mode 100644 index 7cf318d..0000000 --- a/contracts/superbridge/FiatTokenV2_1/IFiatTokenV2_1_Mintable.sol +++ /dev/null @@ -1,10 +0,0 @@ -pragma solidity 0.8.19; - -import "solmate/tokens/ERC20.sol"; - -// USDC's standard token -abstract contract IFiatTokenV2_1_Mintable is ERC20 { - function mint(address receiver_, uint256 amount_) external virtual; - - function burn(uint256 _amount) external virtual; -} diff --git a/contracts/superbridge/Gauge.sol b/contracts/superbridge/Gauge.sol deleted file mode 100644 index 3c3fee5..0000000 --- a/contracts/superbridge/Gauge.sol +++ /dev/null @@ -1,55 +0,0 @@ -pragma solidity 0.8.19; - -abstract contract Gauge { - struct LimitParams { - uint256 lastUpdateTimestamp; - uint256 ratePerSecond; - uint256 maxLimit; - uint256 lastUpdateLimit; - } - - error AmountOutsideLimit(); - - function _getCurrentLimit( - LimitParams storage _params - ) internal view returns (uint256 _limit) { - uint256 timeElapsed = block.timestamp - _params.lastUpdateTimestamp; - uint256 limitIncrease = timeElapsed * _params.ratePerSecond; - - if (limitIncrease + _params.lastUpdateLimit > _params.maxLimit) { - _limit = _params.maxLimit; - } else { - _limit = limitIncrease + _params.lastUpdateLimit; - } - } - - function _consumePartLimit( - uint256 amount_, - LimitParams storage _params - ) internal returns (uint256 consumedAmount, uint256 pendingAmount) { - uint256 currentLimit = _getCurrentLimit(_params); - _params.lastUpdateTimestamp = block.timestamp; - if (currentLimit >= amount_) { - _params.lastUpdateLimit = currentLimit - amount_; - consumedAmount = amount_; - pendingAmount = 0; - } else { - _params.lastUpdateLimit = 0; - consumedAmount = currentLimit; - pendingAmount = amount_ - currentLimit; - } - } - - function _consumeFullLimit( - uint256 amount_, - LimitParams storage _params - ) internal { - uint256 currentLimit = _getCurrentLimit(_params); - if (currentLimit >= amount_) { - _params.lastUpdateTimestamp = block.timestamp; - _params.lastUpdateLimit = currentLimit - amount_; - } else { - revert AmountOutsideLimit(); - } - } -} diff --git a/contracts/superbridge/IMintableERC20.sol b/contracts/superbridge/IMintableERC20.sol deleted file mode 100644 index 104fdc7..0000000 --- a/contracts/superbridge/IMintableERC20.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma solidity 0.8.19; - -import "solmate/tokens/ERC20.sol"; - -abstract contract IMintableERC20 is ERC20 { - function mint(address receiver_, uint256 amount_) external virtual; - - function burn(address burner_, uint256 amount_) external virtual; -} diff --git a/contracts/superbridge/ParallelVault.sol b/contracts/superbridge/ParallelVault.sol deleted file mode 100644 index fa37aeb..0000000 --- a/contracts/superbridge/ParallelVault.sol +++ /dev/null @@ -1,272 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity 0.8.19; - -import "solmate/mixins/ERC4626.sol"; -import "openzeppelin-contracts/contracts/access/Ownable2Step.sol"; -import {Gauge} from "./Gauge.sol"; -import {IStrategy} from "../interfaces/IStrategy.sol"; -import "./RescueFundsLib.sol"; -import "openzeppelin-contracts/contracts/utils/math/Math.sol"; -import "openzeppelin-contracts/contracts/security/ReentrancyGuard.sol"; - -// add rebalance external function (called from cron) -// call rebalance from withdraw and deposit too (with timestamp check, settable by admin) -// pausable vault -// redeem all from strategy and detach -// reentrancy guard - -contract ParallelVault is Gauge, Ownable2Step, ERC4626, ReentrancyGuard { - using SafeTransferLib for ERC20; - ERC20 public immutable token__; - - uint256 public totalIdle; // Amount of tokens that are in the vault - uint256 public totalDebt; // Amount of tokens that strategy have borrowed - uint256 public debtRatio; // Debt ratio for the Vault (in BPS, <= 10k) - uint128 public lastRebalanceTimestamp; // Timstamp of last rebalance - uint128 public rebalanceingDelay; // Delay between rebalances - address public strategy; // address of the strategy contract - bool public emergencyShutdown; // if true, no funds can be invested in the strategy - - uint256 public constant MAX_BPS = 10_000; - struct UpdateLimitParams { - bool isLock; - address connector; - uint256 maxLimit; - uint256 ratePerSecond; - } - - error ConnectorUnavailable(); - error ZeroAmount(); - error DebtRatioTooHigh(); - error InvestingAboveThreshold(); - error NotEnoughAssets(); - error VaultShutdown(); - - event LimitParamsUpdated(UpdateLimitParams[] updates); - event TokensDeposited(address depositor, uint256 depositAmount); - event TokensInvested(uint256 amount); - event TokensHarvested(uint256 amount); - - event TokensWithdrawn( - address depositor, - address receiver, - uint256 depositAmount - ); - - event WithdrawFromStrategy(uint256 withdrawn); - - event Rebalanced( - uint256 totalIdle, - uint256 totalDebt, - uint256 credit, - uint256 debtOutstanding - ); - - event ShutdownStateUpdated(bool shutdownState); - - modifier notShutdown() { - if (emergencyShutdown) revert VaultShutdown(); - _; - } - - constructor( - address token_, - string memory name_, - string memory symbol_ - ) ERC4626(ERC20(token_), name_, symbol_) { - token__ = ERC20(token_); - } - - function setDebtRatio(uint256 debtRatio_) external onlyOwner { - if (debtRatio_ > MAX_BPS) revert DebtRatioTooHigh(); - debtRatio = debtRatio_; - } - - function setStrategy(address strategy_) external onlyOwner { - strategy = strategy_; - } - - function setRebalanceingDelay( - uint128 rebalanceingDelay_ - ) external onlyOwner { - rebalanceingDelay = rebalanceingDelay_; - } - - function updateEmergencyShutdownState( - bool shutdownState_, - bool detachStrategy - ) external onlyOwner { - if (shutdownState_ && detachStrategy) { - // If we're exiting emergency shutdown, we need to empty strategy - _withdrawAllFromStrategy(); - strategy = address(0); - } - emergencyShutdown = shutdownState_; - emit ShutdownStateUpdated(shutdownState_); - } - - /// @notice Returns the total quantity of all assets under control of this - /// Vault, whether they're loaned out to a Strategy, or currently held in - /// the Vault. - /// @dev Explain to a developer any extra details - /// @return total quantity of all assets under control of this - /// Vault - function totalAssets() public view override returns (uint256) { - return _totalAssets(); - } - - function _totalAssets() internal view returns (uint256) { - return totalIdle + totalDebt; - } - - function deposit( - uint256 assets_, - address receiver_ - ) public override nonReentrant notShutdown returns (uint256) { - if (receiver_ == address(0)) revert ZeroAddress(); - totalIdle += assets_; - _checkDelayAndRebalance(); - return super.deposit(assets_, receiver_); - } - - function withdraw( - uint256 assets_, - address receiver_, - address owner_ - ) public override nonReentrant notShutdown returns (uint256) { - if (receiver_ == address(0)) revert ZeroAddress(); - if (assets_ > totalIdle) revert NotEnoughAssets(); - - totalIdle -= assets_; - _checkDelayAndRebalance(); - return super.withdraw(assets_, receiver_, owner_); - } - - function withdrawFromStrategy( - uint256 assets_ - ) external onlyOwner returns (uint256) { - _withdrawFromStrategy(assets_); - } - - function _withdrawFromStrategy(uint256 assets_) internal returns (uint256) { - uint256 preBalance = token__.balanceOf(address(this)); - IStrategy(strategy).withdraw(assets_); - uint256 withdrawn = token__.balanceOf(address(this)) - preBalance; - totalIdle += withdrawn; - totalDebt -= withdrawn; - emit WithdrawFromStrategy(withdrawn); - return withdrawn; - } - - function _withdrawAllFromStrategy() internal returns (uint256) { - uint256 preBalance = token__.balanceOf(address(this)); - IStrategy(strategy).withdrawAll(); - uint256 withdrawn = token__.balanceOf(address(this)) - preBalance; - totalIdle += withdrawn; - totalDebt = 0; - emit WithdrawFromStrategy(withdrawn); - return withdrawn; - } - - function maxAvailableShares() public view returns (uint256) { - return convertToShares(_totalAssets()); - } - - function rebalance() external notShutdown returns (uint256) { - _rebalance(); - } - - function _checkDelayAndRebalance() internal returns (uint256) { - uint128 timeElapsed = uint128(block.timestamp) - lastRebalanceTimestamp; - if (timeElapsed >= rebalanceingDelay) { - return _rebalance(); - } - } - - function _rebalance() internal returns (uint256) { - if (strategy == address(0)) return; - lastRebalanceTimestamp = uint128(block.timestamp); - // Compute the line of credit the Vault is able to offer the Strategy (if any) - uint256 credit = _creditAvailable(); - uint256 pendingDebt = _debtOutstanding(); - - if (credit > 0) { - // Credit surplus, give to Strategy - totalIdle -= credit; - totalDebt += credit; - token__.safeTransfer(strategy, credit); - IStrategy(strategy).invest(); - } else if (pendingDebt > 0) { - // Credit deficit, take from Strategy - _withdrawFromStrategy(pendingDebt); - } - - emit Rebalanced(totalIdle, totalDebt, credit, pendingDebt); - } - - function _creditAvailable() internal view returns (uint256) { - uint256 vaultTotalAssets = _totalAssets(); - uint256 vaultDebtLimit = (debtRatio * vaultTotalAssets) / MAX_BPS; - uint256 vaultTotalDebt = totalDebt; - - if (vaultDebtLimit <= vaultTotalDebt) return 0; - - // Start with debt limit left for the Strategy - uint256 availableCredit = vaultDebtLimit - vaultTotalDebt; - - // Can only borrow up to what the contract has in reserve - // NOTE: Running near 100% is discouraged - return Math.min(availableCredit, totalIdle); - } - - function creditAvailable() external view returns (uint256) { - // @notice - // Amount of tokens in Vault a Strategy has access to as a credit line. - - // This will check the Strategy's debt limit, as well as the tokens - // available in the Vault, and determine the maximum amount of tokens - // (if any) the Strategy may draw on. - - // In the rare case the Vault is in emergency shutdown this will return 0. - // @param strategy The Strategy to check. Defaults to caller. - // @return The quantity of tokens available for the Strategy to draw on. - - return _creditAvailable(); - } - - function _debtOutstanding() internal view returns (uint256) { - // See note on `debtOutstanding()`. - if (debtRatio == 0) { - return totalDebt; - } - - uint256 debtLimit = ((debtRatio * _totalAssets()) / MAX_BPS); - - if (totalDebt <= debtLimit) return 0; - else return totalDebt - debtLimit; - } - - function debtOutstanding() external view returns (uint256) { - // @notice - // Determines if `strategy` is past its debt limit and if any tokens - // should be withdrawn to the Vault. - // @param strategy The Strategy to check. Defaults to the caller. - // @return The quantity of tokens to withdraw. - - return _debtOutstanding(); - } - - /** - * @notice Rescues funds from the contract if they are locked by mistake. - * @param token_ The address of the token contract. - * @param rescueTo_ The address where rescued tokens need to be sent. - * @param amount_ The amount of tokens to be rescued. - */ - function rescueFunds( - address token_, - address rescueTo_, - uint256 amount_ - ) external onlyOwner { - RescueFundsLib.rescueFunds(token_, rescueTo_, amount_); - } -} diff --git a/contracts/superbridge/README.md b/contracts/superbridge/README.md deleted file mode 100644 index 1e0db68..0000000 --- a/contracts/superbridge/README.md +++ /dev/null @@ -1 +0,0 @@ -# Parallel Yield Bridge diff --git a/contracts/superbridge/RescueFundsLib.sol b/contracts/superbridge/RescueFundsLib.sol deleted file mode 100644 index a614796..0000000 --- a/contracts/superbridge/RescueFundsLib.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-only -pragma solidity ^0.8.13; - -import "solmate/utils/SafeTransferLib.sol"; - -error ZeroAddress(); - -/** - * @title RescueFundsLib - * @dev A library that provides a function to rescue funds from a contract. - */ - -library RescueFundsLib { - /** - * @dev The address used to identify ETH. - */ - address public constant ETH_ADDRESS = - address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); - - /** - * @dev thrown when the given token address don't have any code - */ - error InvalidTokenAddress(); - - /** - * @dev Rescues funds from a contract. - * @param token_ The address of the token contract. - * @param rescueTo_ The address of the user. - * @param amount_ The amount of tokens to be rescued. - */ - function rescueFunds( - address token_, - address rescueTo_, - uint256 amount_ - ) internal { - if (rescueTo_ == address(0)) revert ZeroAddress(); - - if (token_ == ETH_ADDRESS) { - SafeTransferLib.safeTransferETH(rescueTo_, amount_); - } else { - if (token_.code.length == 0) revert InvalidTokenAddress(); - SafeTransferLib.safeTransfer(ERC20(token_), rescueTo_, amount_); - } - } -} diff --git a/contracts/superbridge/arch.jpg b/contracts/superbridge/arch.jpg deleted file mode 100644 index f3ba16a..0000000 Binary files a/contracts/superbridge/arch.jpg and /dev/null differ diff --git a/hardhat-constants.ts b/hardhat-constants.ts new file mode 100644 index 0000000..186430f --- /dev/null +++ b/hardhat-constants.ts @@ -0,0 +1,85 @@ +import { config as dotenvConfig } from "dotenv"; + +export const INFURA_KEY = process.env.INFURA_KEY || ""; +export const ALCHEMY_KEY = process.env.ALCHEMY_KEY || ""; + +export const ETHERSCAN_KEY = process.env.ETHERSCAN_KEY || ""; +export const GOERLI_ETHERSCAN_KEY = + process.env.GOERLI_ETHERSCAN_KEY || ETHERSCAN_KEY; +export const ARBITRUM_ETHERSCAN_KEY = + process.env.ARBITRUM_ETHERSCAN_KEY || ETHERSCAN_KEY; +export const ARBITRUM_GOERLI_ETHERSCAN_KEY = + process.env.ARBITRUM_GOERLI_ETHERSCAN_KEY || ARBITRUM_ETHERSCAN_KEY; +export const POLYGON_ETHERSCAN_KEY = + process.env.POLYGON_ETHERSCAN_KEY || ETHERSCAN_KEY; +export const POLYGON_MUMBAI_ETHERSCAN_KEY = + process.env.POLYGON_MUMBAI_ETHERSCAN_KEY || POLYGON_ETHERSCAN_KEY; +export const POLYGON_ZKEVM_ETHERSCAN_KEY = + process.env.POLYGON_ZKEVM_ETHERSCAN_KEY || POLYGON_ETHERSCAN_KEY; +export const POLYGON_ZKEVM_GOERLI_ETHERSCAN_KEY = + process.env.POLYGON_ZKEVM_GOERLI_ETHERSCAN_KEY || POLYGON_ZKEVM_ETHERSCAN_KEY; +export const MOONBEAM_ETHERSCAN_KEY = + process.env.MOONBEAM_ETHERSCAN_KEY || ETHERSCAN_KEY; +export const MOONBASE_ETHERSCAN_KEY = + process.env.MOONBASE_ETHERSCAN_KEY || MOONBEAM_ETHERSCAN_KEY; +export const LINEA_ETHERSCAN_KEY = + process.env.LINEA_ETHERSCAN_KEY || ETHERSCAN_KEY; +export const LINEA_GOERLI_ETHERSCAN_KEY = + process.env.LINEA_GOERLI_ETHERSCAN_KEY || LINEA_ETHERSCAN_KEY; + +export const CHAIN_ID = { + hardhat: 31337, + mainnet: 1, + sepolia: 11155111, + arbitrum: 42161, + arbitrumSepolia: 421614, +}; + +export const ETHERSCAN_APIS = { + localhost: "http://localhost:4000/api", + mainnet: "https://api.etherscan.io/api", + goerli: "https://api-goerli.etherscan.io/api", + arbitrum: "https://api.arbiscan.io/api", + arbitrumGoerli: "https://api-goerli.arbiscan.io/api", + polygon: "https://api.polygonscan.com/api", + matic: "https://api.polygonscan.com/api", + polygonMumbai: "https://api-mumbai.polygonscan.com/api", + polygonZkevm: "https://api-zkevm.polygonscan.com/api", + polygonZkevmGoerli: "https://api-testnet-zkevm.polygonscan.com/api", + zksync: "https://zksync2-mainnet-explorer.zksync.io/contract_verification", + zksyncGoerli: + "https://zksync2-testnet-explorer.zksync.dev/contract_verification", + moonbeam: "https://api-moonbeam.moonscan.io/api", + moonbase: "https://api-moonbase.moonscan.io/api", + linea: "http://explorer.linea.build/api", + lineaGoerli: "https://explorer.goerli.linea.build/api", +}; +export const BROWSER_URLS = { + localhost: "http://localhost:4000", + mainnet: "https://etherscan.io", + goerli: "https://goerli.etherscan.io", + arbitrum: "https://arbiscan.io", + arbitrumGoerli: "https://goerli.arbiscan.io", + polygonZkevm: "https://zkevm.polygonscan.com", + polygonZkevmGoerli: "https://testnet-zkevm.polygonscan.com", + polygon: "https://polygonscan.com", + matic: "https://polygonscan.com", + polygonMumbai: "https://mumbai.polygonscan.com", + zksync: "https://zksync2-mainnet-explorer.zksync.io", + zksyncGoerli: "https://zksync2-testnet-explorer.zksync.dev", + moonbeam: "https://moonscan.io", + moonbase: "https://moonbase.moonscan.io", + linea: "https://explorer.linea.build", + lineaGoerli: "https://explorer.goerli.linea.build", +}; + +export const NETWORKS_RPC_URL = { + mainnet: ALCHEMY_KEY + ? `https://eth-mainnet.alchemyapi.io/v2/${ALCHEMY_KEY}` + : `https://mainnet.infura.io/v3/${INFURA_KEY}`, + sepolia: ALCHEMY_KEY + ? `https://eth-sepolia.alchemyapi.io/v2/${ALCHEMY_KEY}` + : `https://sepolia.infura.io/v3/${INFURA_KEY}`, + arbitrum: `https://arb-mainnet.g.alchemy.com/v2/${ALCHEMY_KEY}`, + arbitrumSepolia: `https://arb-sepolia.g.alchemy.com/v2/${ALCHEMY_KEY}`, +}; diff --git a/hardhat.config.ts b/hardhat.config.ts index b3908fd..a4edaf3 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,10 +1,5 @@ -import "@nomiclabs/hardhat-ethers"; -import "@nomiclabs/hardhat-etherscan"; import "@typechain/hardhat"; -import "hardhat-preprocessor"; -import "hardhat-deploy"; -import "hardhat-abi-exporter"; -import "hardhat-change-network"; +import "@nomicfoundation/hardhat-toolbox"; import { config as dotenvConfig } from "dotenv"; import type { HardhatUserConfig } from "hardhat/config"; @@ -15,26 +10,31 @@ import type { import { resolve } from "path"; import fs from "fs"; +import { eEthereumNetwork } from "./script/types"; import { - ChainSlugToId, - HardhatChainName, - hardhatChainNameToSlug, -} from "@socket.tech/dl-core"; -import { getJsonRpcUrl } from "./script/helpers/networks"; + ARBITRUM_ETHERSCAN_KEY, + ARBITRUM_GOERLI_ETHERSCAN_KEY, + BROWSER_URLS, + CHAIN_ID, + ETHERSCAN_APIS, + ETHERSCAN_KEY, + GOERLI_ETHERSCAN_KEY, + NETWORKS_RPC_URL, +} from "./hardhat-constants"; const dotenvConfigPath: string = process.env.DOTENV_CONFIG_PATH || "./.env"; dotenvConfig({ path: resolve(__dirname, dotenvConfigPath) }); // Ensure that we have all the environment variables we need. -if (!process.env.SOCKET_SIGNER_KEY) throw new Error("No private key found"); +if (!process.env.SIGNER_KEY) throw new Error("No private key found"); const privateKey: HardhatNetworkAccountUserConfig = process.env - .SOCKET_SIGNER_KEY as unknown as HardhatNetworkAccountUserConfig; + .SIGNER_KEY as unknown as HardhatNetworkAccountUserConfig; -function getChainConfig(chain: HardhatChainName): NetworkUserConfig { +function getChainConfig(network: eEthereumNetwork): NetworkUserConfig { return { accounts: [`0x${privateKey}`], - chainId: ChainSlugToId[hardhatChainNameToSlug[chain]], - url: getJsonRpcUrl(hardhatChainNameToSlug[chain]), + chainId: CHAIN_ID[network], + url: NETWORKS_RPC_URL[network], }; } @@ -46,113 +46,39 @@ function getRemappings() { .map((line) => line.trim().split("=")); } -let liveNetworks = {}; -liveNetworks = {}; - const config: HardhatUserConfig = { defaultNetwork: "hardhat", - abiExporter: { - path: "artifacts/abi", - flat: true, - }, etherscan: { apiKey: { - arbitrumOne: process.env.ARBISCAN_API_KEY || "", - arbitrumTestnet: process.env.ARBISCAN_API_KEY || "", - arbitrumSepolia: process.env.ARBISCAN_API_KEY || "", - bsc: process.env.BSCSCAN_API_KEY || "", - bscTestnet: process.env.BSCSCAN_API_KEY || "", - goerli: process.env.ETHERSCAN_API_KEY || "", - mainnet: process.env.ETHERSCAN_API_KEY || "", - sepolia: process.env.ETHERSCAN_API_KEY || "", - optimisticEthereum: process.env.OPTIMISM_API_KEY || "", - optimisticTestnet: process.env.OPTIMISM_API_KEY || "", - optimisticSepolia: process.env.OPTIMISM_API_KEY || "", - polygon: process.env.POLYGONSCAN_API_KEY || "", - polygonMumbai: process.env.POLYGONSCAN_API_KEY || "", + localhost: ETHERSCAN_KEY, + mainnet: ETHERSCAN_KEY, + goerli: GOERLI_ETHERSCAN_KEY, + arbitrum: ARBITRUM_ETHERSCAN_KEY, + arbitrumGoerli: ARBITRUM_GOERLI_ETHERSCAN_KEY, }, customChains: [ - { - network: "optimisticTestnet", - chainId: hardhatChainNameToSlug[HardhatChainName.OPTIMISM_GOERLI], - urls: { - apiURL: "https://api-goerli-optimistic.etherscan.io/api", - browserURL: "https://goerli-optimism.etherscan.io/", - }, - }, - { - network: "optimisticSepolia", - chainId: hardhatChainNameToSlug[HardhatChainName.OPTIMISM_SEPOLIA], - urls: { - apiURL: "https://api-sepolia-optimistic.etherscan.io/api", - browserURL: "https://sepolia-optimism.etherscan.io/", - }, - }, - { - network: "arbitrumTestnet", - chainId: hardhatChainNameToSlug[HardhatChainName.ARBITRUM_GOERLI], - urls: { - apiURL: "https://api-goerli.arbiscan.io/api", - browserURL: "https://goerli.arbiscan.io/", - }, - }, - { - network: "arbitrumSepolia", - chainId: hardhatChainNameToSlug[HardhatChainName.ARBITRUM_SEPOLIA], - urls: { - apiURL: "https://api-sepolia.arbiscan.io/api", - browserURL: "https://sepolia.arbiscan.io/", - }, + eEthereumNetwork.mainnet, + eEthereumNetwork.sepolia, + eEthereumNetwork.arbitrum, + eEthereumNetwork.arbitrumSepolia, + ].map((network) => ({ + network, + chainId: CHAIN_ID[network]!, + urls: { + apiURL: ETHERSCAN_APIS[network], + browserURL: BROWSER_URLS[network], }, - ], + })), }, networks: { - hardhat: { - chainId: hardhatChainNameToSlug.hardhat, + [eEthereumNetwork.hardhat]: { + chainId: CHAIN_ID[eEthereumNetwork.hardhat], }, - [HardhatChainName.ARBITRUM_GOERLI]: getChainConfig( - HardhatChainName.ARBITRUM_GOERLI - ), - [HardhatChainName.ARBITRUM_SEPOLIA]: getChainConfig( - HardhatChainName.ARBITRUM_SEPOLIA - ), - [HardhatChainName.OPTIMISM_GOERLI]: getChainConfig( - HardhatChainName.OPTIMISM_GOERLI - ), - [HardhatChainName.OPTIMISM_SEPOLIA]: getChainConfig( - HardhatChainName.OPTIMISM_SEPOLIA - ), - [HardhatChainName.POLYGON_MAINNET]: getChainConfig( - HardhatChainName.POLYGON_MAINNET - ), - [HardhatChainName.ARBITRUM]: getChainConfig(HardhatChainName.ARBITRUM), - [HardhatChainName.BSC]: getChainConfig(HardhatChainName.BSC), - [HardhatChainName.AEVO]: getChainConfig(HardhatChainName.AEVO), - [HardhatChainName.GOERLI]: getChainConfig(HardhatChainName.GOERLI), - [HardhatChainName.MAINNET]: getChainConfig(HardhatChainName.MAINNET), - [HardhatChainName.OPTIMISM]: getChainConfig(HardhatChainName.OPTIMISM), - [HardhatChainName.POLYGON_MUMBAI]: getChainConfig( - HardhatChainName.POLYGON_MUMBAI - ), - [HardhatChainName.BSC_TESTNET]: getChainConfig( - HardhatChainName.BSC_TESTNET - ), - [HardhatChainName.SEPOLIA]: getChainConfig(HardhatChainName.SEPOLIA), - [HardhatChainName.AEVO_TESTNET]: getChainConfig( - HardhatChainName.AEVO_TESTNET - ), - [HardhatChainName.LYRA_TESTNET]: getChainConfig( - HardhatChainName.LYRA_TESTNET - ), - [HardhatChainName.LYRA]: getChainConfig(HardhatChainName.LYRA), - [HardhatChainName.SX_NETWORK_TESTNET]: getChainConfig( - HardhatChainName.SX_NETWORK_TESTNET - ), - [HardhatChainName.MODE_TESTNET]: getChainConfig( - HardhatChainName.MODE_TESTNET - ), - [HardhatChainName.VICTION_TESTNET]: getChainConfig( - HardhatChainName.VICTION_TESTNET + [eEthereumNetwork.mainnet]: getChainConfig(eEthereumNetwork.mainnet), + [eEthereumNetwork.sepolia]: getChainConfig(eEthereumNetwork.sepolia), + [eEthereumNetwork.arbitrum]: getChainConfig(eEthereumNetwork.arbitrum), + [eEthereumNetwork.arbitrumSepolia]: getChainConfig( + eEthereumNetwork.arbitrumSepolia ), }, paths: { @@ -161,23 +87,8 @@ const config: HardhatUserConfig = { artifacts: "./artifacts", tests: "./test", }, - // This fully resolves paths for imports in the ./lib directory for Hardhat - preprocess: { - eachLine: (hre) => ({ - transform: (line: string) => { - if (line.match(/^\s*import /i)) { - getRemappings().forEach(([find, replace]) => { - if (line.match(find)) { - line = line.replace(find, replace); - } - }); - } - return line; - }, - }), - }, solidity: { - version: "0.8.13", + version: "0.8.20", settings: { optimizer: { enabled: true, diff --git a/package.json b/package.json index c4584fd..98f83b1 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "@socket.tech/socket-plugs", + "name": "cross-chain-token", "license": "MIT", "version": "1.0.11", - "description": "Plugs built using socket's data layer", + "description": "Parallel cross chain token implementation, base on XERC20", "main": "./dist/index.js", "types": "./dist/index.d.ts", "files": [ @@ -13,42 +13,46 @@ "publishConfig": { "access": "public" }, - "repository": "git@github.com:SocketDotTech/socketDL-examples.git", + "repository": "git@github.com:para-space/cross-chain-token.git", "devDependencies": { "@ethersproject/bytes": "^5.7.0", - "@nomiclabs/hardhat-ethers": "^2.1.1", - "@nomiclabs/hardhat-etherscan": "^3.1.0", - "@typechain/ethers-v5": "^10.0.0", - "@typechain/hardhat": "^6.0.0", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.1", + "@nomicfoundation/hardhat-ethers": "^3.0.2", + "@nomicfoundation/hardhat-network-helpers": "^1.0.8", + "@nomicfoundation/hardhat-toolbox": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^1.0.1", + "@typechain/ethers-v6": "^0.4.0", + "@typechain/hardhat": "^8.0.0", "@types/mocha": "^9.1.0", "@types/node": "^18.11.9", "@types/yargs": "^17.0.22", + "chai": "^4.2.0", "dotenv": "^16.0.3", - "ethers": "^5.6.6", - "hardhat": "^2.9.5", - "hardhat-abi-exporter": "^2.10.1", - "hardhat-change-network": "^0.0.7", - "hardhat-deploy": "^0.11.20", - "hardhat-preprocessor": "^0.1.4", + "ethers": "^6.6.0", + "hardhat": "^2.15.0", + "hardhat-gas-reporter": "^1.0.9", "pre-commit": "^1.2.2", "prettier": "^2.6.1", "prettier-plugin-solidity": "^1.0.0-beta.13", + "solidity-coverage": "^0.8.2", "ts-node": "^10.7.0", "typechain": "^8.0.0", "typescript": "^4.6.4" }, "scripts": { "lint": "prettier \"./**\" --write", - "build": "hardhat export-abi && tsc --project lib.tsconfig.json", + "build": "hardhat compile", + "deploy": "hardhat run script/deploy/deploy.ts", + "size": "hardhat size-contracts", "abi": "hardhat export-abi", - "compile": "forge build", - "test": "forge test" + "test": "hardhat test ./test/*.ts" }, "pre-commit": [ "lint", "compile" ], "dependencies": { - "@socket.tech/dl-core": "2.4.15-test.1" + "@openzeppelin/contracts": "^4.9.5", + "@openzeppelin/contracts-upgradeable": "^4.9.5" } } diff --git a/script/bridge/toAppChain.ts b/script/bridge/toAppChain.ts deleted file mode 100644 index 5fae432..0000000 --- a/script/bridge/toAppChain.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { BigNumber, Contract, utils } from "ethers"; - -import { getSignerFromChainSlug, overrides } from "../helpers/networks"; -import { getProjectAddresses, getInstance } from "../helpers/utils"; -import { token, tokenDecimals } from "../helpers/constants"; -import { ChainSlug } from "@socket.tech/dl-core"; -import { getSocket } from "./utils"; -import { - SuperBridgeContracts, - ChainAddresses, - NonAppChainAddresses, -} from "../../src"; - -const srcChain = ChainSlug.SEPOLIA; -const dstChain = ChainSlug.LYRA_TESTNET; -const gasLimit = 500_000; -let amount = utils.parseUnits("1", tokenDecimals[token]); - -export const main = async () => { - try { - const addresses = await getProjectAddresses(); - const srcAddresses: ChainAddresses | undefined = addresses[srcChain]; - const dstAddresses: ChainAddresses | undefined = addresses[dstChain]; - if (!srcAddresses || !dstAddresses) - throw new Error("chain addresses not found"); - - const addr: NonAppChainAddresses | undefined = srcAddresses[ - token - ] as NonAppChainAddresses; - if (!addr) throw new Error("Token addresses not found"); - - if (addr.isAppChain) throw new Error("src should not be app chain"); - - const vaultAddr = addr.Vault; - const tokenAddr = addr.NonMintableToken; - const connectorAddr = addr.connectors?.[dstChain]?.FAST; - - if (!vaultAddr || !tokenAddr || !connectorAddr) - throw new Error("Some contract addresses missing"); - - const socketSigner = getSignerFromChainSlug(srcChain); - - const vault: Contract = ( - await getInstance(SuperBridgeContracts.Vault, vaultAddr) - ).connect(socketSigner); - const tokenContract: Contract = ( - await getInstance("ERC20", tokenAddr) - ).connect(socketSigner); - - // approve - const balance: BigNumber = await tokenContract.balanceOf( - socketSigner.address - ); - if (balance.lt(amount)) throw new Error("Not enough balance"); - - const limit: BigNumber = await vault.getCurrentLockLimit(connectorAddr); - if (limit.lt(amount)) throw new Error("Exceeding max limit"); - - const currentApproval: BigNumber = await tokenContract.allowance( - socketSigner.address, - vault.address - ); - if (currentApproval.lt(amount)) { - const approveTx = await tokenContract.approve(vault.address, amount, { - ...overrides[srcChain], - gasLimit: 200_000, - }); - console.log("Tokens approved: ", approveTx.hash); - await approveTx.wait(); - } - - // deposit - console.log(`depositing ${amount} to app chain from ${srcChain}`); - - const socket: Contract = getSocket(srcChain, socketSigner); - const value = await socket.getMinFees( - gasLimit, - 100, - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - dstChain, - connectorAddr - ); - - const depositTx = await vault.depositToAppChain( - socketSigner.address, - amount, - gasLimit, - connectorAddr, - { ...overrides[srcChain], value } - ); - console.log("Tokens deposited: ", depositTx.hash); - console.log( - `Track message here: https://6il289myzb.execute-api.us-east-1.amazonaws.com/dev/messages-from-tx?srcChainSlug=${srcChain}&srcTxHash=${depositTx.hash}` - ); - await depositTx.wait(); - } catch (error) { - console.log("Error while sending transaction", error); - } -}; - -main() - .then(() => process.exit(0)) - .catch((error: Error) => { - console.error(error); - process.exit(1); - }); diff --git a/script/bridge/toNonAppChain.ts b/script/bridge/toNonAppChain.ts deleted file mode 100644 index de99cce..0000000 --- a/script/bridge/toNonAppChain.ts +++ /dev/null @@ -1,108 +0,0 @@ -import fs from "fs"; -import { BigNumber, Contract, utils } from "ethers"; - -import { getSignerFromChainSlug, overrides } from "../helpers/networks"; -import { getProjectAddresses, getInstance } from "../helpers/utils"; -import { tokenDecimals, token } from "../helpers/constants"; -import { ChainSlug } from "@socket.tech/dl-core"; -import { getSocket } from "./utils"; -import { - AppChainAddresses, - SuperBridgeContracts, - ChainAddresses, -} from "../../src"; - -const srcChain = ChainSlug.LYRA_TESTNET; -const dstChain = ChainSlug.SEPOLIA; -const gasLimit = 500_000; -let amount = utils.parseUnits("1", tokenDecimals[token]); - -export const main = async () => { - try { - const addresses = await getProjectAddresses(); - - const srcAddresses: ChainAddresses | undefined = addresses[srcChain]; - const dstAddresses: ChainAddresses | undefined = addresses[dstChain]; - if (!srcAddresses || !dstAddresses) - throw new Error("chain addresses not found"); - - const addr: AppChainAddresses | undefined = srcAddresses[ - token - ] as AppChainAddresses; - if (!addr) throw new Error("Token addresses not found"); - - if (!addr.isAppChain) throw new Error("src should be app chain"); - - const controllerAddr = addr.Controller; - const tokenAddr = addr.MintableToken; - const connectorAddr = addr.connectors?.[dstChain]?.FAST; - - if (!controllerAddr || !tokenAddr || !connectorAddr) - throw new Error("Some contract addresses missing"); - - const socketSigner = getSignerFromChainSlug(srcChain); - - const controller: Contract = ( - await getInstance(SuperBridgeContracts.Controller, controllerAddr) - ).connect(socketSigner); - const tokenContract: Contract = ( - await getInstance("ERC20", tokenAddr) - ).connect(socketSigner); - - // approve - const balance: BigNumber = await tokenContract.balanceOf( - socketSigner.address - ); - if (balance.lt(amount)) throw new Error("Not enough balance"); - - const limit: BigNumber = await controller.getCurrentBurnLimit( - connectorAddr - ); - if (limit.lt(amount)) throw new Error("Exceeding max limit"); - - const currentApproval: BigNumber = await tokenContract.allowance( - socketSigner.address, - controller.address - ); - if (currentApproval.lt(amount)) { - const approveTx = await tokenContract.approve(controller.address, amount); - console.log("Tokens approved: ", approveTx.hash); - await approveTx.wait(); - } - - // deposit - console.log(`withdrawing ${amount} from app chain to ${dstChain}`); - - const socket: Contract = getSocket(srcChain, socketSigner); - const value = await socket.getMinFees( - gasLimit, - 100, - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000000", - dstChain, - connectorAddr - ); - - const withdrawTx = await controller.withdrawFromAppChain( - socketSigner.address, - amount, - gasLimit, - connectorAddr, - { ...overrides[srcChain], value } - ); - console.log("Tokens burnt", withdrawTx.hash); - console.log( - `Track message here: https://6il289myzb.execute-api.us-east-1.amazonaws.com/dev/messages-from-tx?srcChainSlug=${srcChain}&srcTxHash=${withdrawTx.hash}` - ); - await withdrawTx.wait(); - } catch (error) { - console.log("Error while sending transaction", error); - } -}; - -main() - .then(() => process.exit(0)) - .catch((error: Error) => { - console.error(error); - process.exit(1); - }); diff --git a/script/bridge/utils.ts b/script/bridge/utils.ts deleted file mode 100644 index 94a271e..0000000 --- a/script/bridge/utils.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Contract, Wallet } from "ethers"; -import socketABI from "@socket.tech/dl-core/artifacts/abi/Socket.json"; -import { ChainSlug, getAddresses } from "@socket.tech/dl-core"; -import { mode } from "../helpers/constants"; - -export const getSocket = (chain: ChainSlug, signer: Wallet): Contract => { - return new Contract(getAddresses(chain, mode).Socket, socketABI, signer); -}; diff --git a/script/deploy/configure.ts b/script/deploy/configure.ts deleted file mode 100644 index c5f1c7e..0000000 --- a/script/deploy/configure.ts +++ /dev/null @@ -1,237 +0,0 @@ -import { BigNumber, Contract, Wallet } from "ethers"; - -import { - ChainSlug, - IntegrationTypes, - CORE_CONTRACTS, - getAddresses, -} from "@socket.tech/dl-core"; - -import { getSignerFromChainSlug, overrides } from "../helpers/networks"; -import { - getInstance, - getProjectAddresses, - getPoolIdHex, -} from "../helpers/utils"; -import { - projectConstants, - mode, - getLimitBN, - getRateBN, - token, -} from "../helpers/constants"; -import { getSocket } from "../bridge/utils"; -import { - AppChainAddresses, - SuperBridgeContracts, - ConnectorAddresses, - Connectors, - NonAppChainAddresses, - ProjectAddresses, - TokenAddresses, -} from "../../src"; - -type UpdateLimitParams = [ - boolean, - string, - string | number | BigNumber, - string | number | BigNumber -]; - -export const main = async () => { - try { - const addresses = await getProjectAddresses(); - - await Promise.all( - [projectConstants.appChain, ...projectConstants.nonAppChains].map( - async (chain) => { - const addr: TokenAddresses | undefined = addresses[chain]?.[token]; - const connectors: Connectors | undefined = addr?.connectors; - if (!addr || !connectors) return; - - const socketSigner = getSignerFromChainSlug(chain); - - let siblingSlugs: ChainSlug[] = Object.keys( - connectors - ) as unknown as ChainSlug[]; - console.log(`Configuring ${chain} for ${siblingSlugs}`); - - await connect(addr, addresses, chain, siblingSlugs, socketSigner); - - const updateLimitParams: UpdateLimitParams[] = []; - const connectorAddresses: string[] = []; - const connectorPoolIds: string[] = []; - - for (let sibling of siblingSlugs) { - const siblingConnectorAddresses: ConnectorAddresses | undefined = - connectors[sibling]; - if (!siblingConnectorAddresses) continue; - - const integrationTypes: IntegrationTypes[] = Object.keys( - siblingConnectorAddresses - ) as unknown as IntegrationTypes[]; - for (let it of integrationTypes) { - const itConnectorAddress: string | undefined = - siblingConnectorAddresses[it]; - if (!itConnectorAddress) continue; - - // mint/lock/deposit limits - updateLimitParams.push([ - true, - itConnectorAddress, - getLimitBN(it, true), - getRateBN(it, true), - ]); - - // burn/unlock/withdraw limits - updateLimitParams.push([ - false, - itConnectorAddress, - getLimitBN(it, false), - getRateBN(it, false), - ]); - - if (chain === projectConstants.appChain) { - connectorAddresses.push(itConnectorAddress); - connectorPoolIds.push(getPoolIdHex(sibling, it)); - } - } - } - - if (!updateLimitParams.length) return; - - let contract: Contract; - if (addr.isAppChain) { - const a = addr as AppChainAddresses; - if (!a.Controller) { - console.log("Controller not found"); - return; - } - contract = await getInstance( - SuperBridgeContracts.Controller, - a.Controller - ); - } else { - const a = addr as NonAppChainAddresses; - if (!a.Vault) { - console.log("Vault not found"); - return; - } - contract = await getInstance(SuperBridgeContracts.Vault, a.Vault); - } - - contract = contract.connect(socketSigner); - let tx = await contract.updateLimitParams(updateLimitParams, { - ...overrides[chain], - }); - console.log(chain, tx.hash); - await tx.wait(); - - console.log(`Setting vault limits for ${chain} - COMPLETED`); - - if ( - addr.isAppChain && - connectorAddresses.length && - connectorPoolIds.length - ) { - let tx = await contract.updateConnectorPoolId( - connectorAddresses, - connectorPoolIds, - { - ...overrides[chain], - } - ); - console.log(chain, tx.hash); - await tx.wait(); - - console.log(`Setting pool Ids for ${chain} - COMPLETED`); - } - } - ) - ); - } catch (error) { - console.log("Error while sending transaction", error); - } -}; - -const switchboardName = (it: IntegrationTypes) => - it === IntegrationTypes.fast - ? CORE_CONTRACTS.FastSwitchboard - : it === IntegrationTypes.optimistic - ? CORE_CONTRACTS.OptimisticSwitchboard - : CORE_CONTRACTS.NativeSwitchboard; - -const connect = async ( - addr: TokenAddresses, - addresses: ProjectAddresses, - chain: ChainSlug, - siblingSlugs: ChainSlug[], - socketSigner: Wallet -) => { - try { - console.log("connecting plugs for ", chain, siblingSlugs); - - for (let sibling of siblingSlugs) { - const localConnectorAddresses: ConnectorAddresses | undefined = - addr.connectors?.[sibling]; - const siblingConnectorAddresses: ConnectorAddresses | undefined = - addresses?.[sibling]?.[token]?.connectors?.[chain]; - if (!localConnectorAddresses || !siblingConnectorAddresses) continue; - - const integrationTypes: IntegrationTypes[] = Object.keys( - localConnectorAddresses - ) as unknown as IntegrationTypes[]; - - const socketContract: Contract = getSocket(chain, socketSigner); - for (let integration of integrationTypes) { - const siblingConnectorPlug = siblingConnectorAddresses[integration]; - const localConnectorPlug = localConnectorAddresses[integration]; - if (!localConnectorPlug || !siblingConnectorPlug) continue; - - const switchboard = getAddresses(chain, mode).integrations[sibling][ - integration - ]?.switchboard; - - if (!switchboard) { - console.log( - `switchboard not found for ${chain}, ${sibling}, ${integration}` - ); - } - - let config = await socketContract.getPlugConfig( - localConnectorPlug, - sibling - ); - - if (config[0].toLowerCase() === siblingConnectorPlug.toLowerCase()) { - console.log("already set, confirming ", { config }); - continue; - } - - const connectorContract = ( - await getInstance( - SuperBridgeContracts.ConnectorPlug, - localConnectorPlug - ) - ).connect(socketSigner); - - let tx = await connectorContract.functions["connect"]( - siblingConnectorPlug, - switchboard, - { ...overrides[chain] } - ); - console.log(chain, tx.hash); - await tx.wait(); - } - } - } catch (error) { - console.log("error while connecting plugs: ", error); - } -}; - -main() - .then(() => process.exit(0)) - .catch((error: Error) => { - console.error(error); - process.exit(1); - }); diff --git a/script/deploy/deploy.ts b/script/deploy/deploy.ts index 7db7019..ecb655f 100644 --- a/script/deploy/deploy.ts +++ b/script/deploy/deploy.ts @@ -1,240 +1,77 @@ import { config as dotenvConfig } from "dotenv"; dotenvConfig(); - -import { Contract, Wallet, utils } from "ethers"; -import { getSignerFromChainSlug } from "../helpers/networks"; -import { ChainSlug, getAddresses } from "@socket.tech/dl-core"; -import { - integrationTypes, - isAppChain, - mode, - projectConstants, - token, - tokenDecimals, - tokenName, - tokenSymbol, -} from "../helpers/constants"; -import { - DeployParams, - createObj, - getProjectAddresses, - getOrDeploy, - storeAddresses, -} from "../helpers/utils"; +import { getMarketConfig } from "../helpers/utils"; +import { Strategy } from "../../src"; +import hre, { ethers } from "hardhat"; +import { XERC20Factory, XERC20Lockbox } from "../../typechain-types"; +import { ZEROADDRESS } from "../helpers/constants"; import { - AppChainAddresses, - SuperBridgeContracts, - NonAppChainAddresses, - ProjectAddresses, - TokenAddresses, -} from "../../src"; - -export interface ReturnObj { - allDeployed: boolean; - deployedAddresses: TokenAddresses; -} + deployAAVEStrategy, + deployAAVEStrategyImpl, + deployETHAAVEStrategy, + deployFactory, + getERC20, +} from "../helpers/deployment"; /** * Deploys contracts for all networks */ export const main = async () => { - try { - let addresses: ProjectAddresses; - try { - addresses = await getProjectAddresses(); - } catch (error) { - addresses = {} as ProjectAddresses; - } - - await Promise.all( - [projectConstants.appChain, ...projectConstants.nonAppChains].map( - async (chain: ChainSlug) => { - let allDeployed = false; - const signer = getSignerFromChainSlug(chain); - - let chainAddresses: TokenAddresses = addresses[chain]?.[token] - ? (addresses[chain]?.[token] as TokenAddresses) - : ({} as TokenAddresses); - - const siblings = isAppChain(chain) - ? projectConstants.nonAppChains - : [projectConstants.appChain]; - - while (!allDeployed) { - const results: ReturnObj = await deploy( - isAppChain(chain), - signer, - chain, - siblings, - chainAddresses - ); - - allDeployed = results.allDeployed; - chainAddresses = results.deployedAddresses; - } - } - ) - ); - } catch (error) { - console.log("Error in deploying contracts", error); - } -}; - -/** - * Deploys network-independent contracts - */ -const deploy = async ( - isAppChain: boolean, - socketSigner: Wallet, - chainSlug: number, - siblings: number[], - deployedAddresses: TokenAddresses -): Promise => { - let allDeployed = false; - - let deployUtils: DeployParams = { - addresses: deployedAddresses, - signer: socketSigner, - currentChainSlug: chainSlug, - }; - - try { - deployUtils.addresses.isAppChain = isAppChain; - if (isAppChain) { - deployUtils = await deployAppChainContracts(deployUtils); - } else { - deployUtils = await deployNonAppChainContracts(deployUtils); - } - - for (let sibling of siblings) { - deployUtils = await deployConnectors(sibling, deployUtils); - } - allDeployed = true; - console.log(deployUtils.addresses); - console.log("Contracts deployed!"); - } catch (error) { - console.log( - `Error in deploying setup contracts for ${deployUtils.currentChainSlug}`, - error - ); - } - - await storeAddresses(deployUtils.addresses, deployUtils.currentChainSlug); - return { - allDeployed, - deployedAddresses: deployUtils.addresses, - }; -}; - -const deployConnectors = async ( - sibling: ChainSlug, - deployParams: DeployParams -): Promise => { - try { - if (!deployParams.addresses) throw new Error("Addresses not found!"); - - const socket: string = getAddresses( - deployParams.currentChainSlug, - mode - ).Socket; - let hub: string; - const addr: TokenAddresses = deployParams.addresses; - if (addr.isAppChain) { - const a = addr as AppChainAddresses; - if (!a.Controller) throw new Error("Controller not found!"); - hub = a.Controller; - } else { - const a = addr as NonAppChainAddresses; - if (!a.Vault) throw new Error("Vault not found!"); - hub = a.Vault; - } - - for (let intType of integrationTypes) { - console.log(hub, socket, sibling); - const connector: Contract = await getOrDeploy( - SuperBridgeContracts.ConnectorPlug, - "contracts/superbridge/ConnectorPlug.sol", - [hub, socket, sibling], - deployParams + const marketConfig = getMarketConfig(); + + const factory: XERC20Factory = await deployFactory(); + + const aaveStrategyImpl = await deployAAVEStrategyImpl(); + + //deploy xToken and vault + for (const key in marketConfig.Tokens) { + if (Object.prototype.hasOwnProperty.call(marketConfig.Tokens, key)) { + const tokenConfig = marketConfig.Tokens[key]; + + const token = await getERC20(tokenConfig.address); + const tokenSymbol = await token.symbol(); + const tokenName = await token.name(); + await factory.deployToken( + tokenConfig.address, + tokenConfig.address === ZEROADDRESS, + `x${tokenName}`, + `x${tokenSymbol}`, + [], + [], + [] ); - console.log("connectors", sibling.toString(), intType, connector.address); - - deployParams.addresses = createObj( - deployParams.addresses, - ["connectors", sibling.toString(), intType], - connector.address - ); + const lockBox = await factory.lockboxRegistry(tokenConfig.address); + + let strategy; + switch (tokenConfig.strategy) { + case Strategy.AAVE: + strategy = await deployAAVEStrategy( + aaveStrategyImpl, + tokenConfig.strategyPool, + lockBox, + marketConfig.upgradeAdmin + ); + break; + case Strategy.ETHAAVE: + strategy = await deployETHAAVEStrategy( + marketConfig.wstETH!, + tokenConfig.strategyPool, + lockBox, + marketConfig.upgradeAdmin + ); + break; + default: + throw new Error("invalid strategy"); + } + + const lockboxFactory = await ethers.getContractFactory("XERC20Lockbox"); + const lockBoxContract = lockboxFactory.attach( + lockBox + ) as unknown as XERC20Lockbox; + await lockBoxContract.setStrategy(strategy); } - - console.log(deployParams.addresses); - console.log("Connector Contracts deployed!"); - } catch (error) { - console.log("Error in deploying connector contracts", error); - } - - return deployParams; -}; - -const deployAppChainContracts = async ( - deployParams: DeployParams -): Promise => { - try { - const exchangeRate: Contract = await getOrDeploy( - SuperBridgeContracts.ExchangeRate, - "contracts/superbridge/ExchangeRate.sol", - [], - deployParams - ); - deployParams.addresses[SuperBridgeContracts.ExchangeRate] = - exchangeRate.address; - - if (!deployParams.addresses[SuperBridgeContracts.MintableToken]) - throw new Error("Token not found on app chain"); - - const controller: Contract = await getOrDeploy( - projectConstants.isFiatTokenV2_1 - ? SuperBridgeContracts.FiatTokenV2_1_Controller - : SuperBridgeContracts.Controller, - projectConstants.isFiatTokenV2_1 - ? "contracts/superbridge/FiatTokenV2_1/FiatTokenV2_1_Controller.sol" - : "contracts/superbridge/Controller.sol", - [ - deployParams.addresses[SuperBridgeContracts.MintableToken], - exchangeRate.address, - ], - deployParams - ); - deployParams.addresses[SuperBridgeContracts.Controller] = - controller.address; - console.log(deployParams.addresses); - console.log("Chain Contracts deployed!"); - } catch (error) { - console.log("Error in deploying chain contracts", error); - } - return deployParams; -}; - -const deployNonAppChainContracts = async ( - deployParams: DeployParams -): Promise => { - try { - if (!deployParams.addresses[SuperBridgeContracts.NonMintableToken]) - throw new Error("Token not found on chain"); - - const vault: Contract = await getOrDeploy( - SuperBridgeContracts.Vault, - "contracts/superbridge/Vault.sol", - [deployParams.addresses[SuperBridgeContracts.NonMintableToken]], - deployParams - ); - deployParams.addresses[SuperBridgeContracts.Vault] = vault.address; - console.log(deployParams.addresses); - console.log("Chain Contracts deployed!"); - } catch (error) { - console.log("Error in deploying chain contracts", error); } - return deployParams; }; main() diff --git a/script/helpers/constants.ts b/script/helpers/constants.ts index 15ccf08..0793fe3 100644 --- a/script/helpers/constants.ts +++ b/script/helpers/constants.ts @@ -1,372 +1,55 @@ import { config as dotenvConfig } from "dotenv"; dotenvConfig(); -import { - ChainSlug, - DeploymentMode, - IntegrationTypes, -} from "@socket.tech/dl-core"; -import { BigNumber, utils } from "ethers"; -import { Project, Tokens } from "../../src"; +import { eEthereumNetwork, IConfiguration, Strategy } from "../types"; -if (!process.env.SOCKET_OWNER_ADDRESS) - throw Error("Socket owner address not present"); -export const socketOwner = process.env.SOCKET_OWNER_ADDRESS; +export const ZEROADDRESS = "0x0000000000000000000000000000000000000000"; -if (!process.env.SOCKET_SIGNER_KEY) - throw Error("Socket signer key not present"); -export const socketSignerKey = process.env.SOCKET_SIGNER_KEY; - -if (!process.env.DEPLOYMENT_MODE) - throw new Error("DeploymentMode not mentioned"); -if ( - !Object.values(DeploymentMode).includes( - process.env.DEPLOYMENT_MODE as DeploymentMode - ) -) - throw new Error("DeploymentMode is invalid"); -export const mode: DeploymentMode = process.env - .DEPLOYMENT_MODE as DeploymentMode; - -if (!process.env.PROJECT) throw new Error("Project not mentioned"); -if (!Object.values(Project).includes(process.env.PROJECT as Project)) - throw new Error("Project is invalid"); -export const project: Project = process.env.PROJECT as Project; - -if (!process.env.TOKEN) throw new Error("Token not mentioned"); -if (!Object.values(Tokens).includes(process.env.TOKEN as Tokens)) - throw new Error("Token is invalid"); -export const token: Tokens = process.env.TOKEN as Tokens; - -console.log("========================================================"); -console.log("MODE", mode); -console.log("PROJECT", project); -console.log("TOKEN", token); -console.log( - `Make sure ${mode}_${project}_addresses.json and ${mode}_${project}_verification.json is cleared for given networks if redeploying!!` -); -console.log(`Owner address configured to ${socketOwner}`); -console.log("========================================================"); - -export type ProjectConstants = { - [key in Project]?: { - [key in DeploymentMode]?: { - [key in Tokens]?: { - appChain: ChainSlug; - nonAppChains: ChainSlug[]; - isFiatTokenV2_1?: boolean; - integrationTypes: { - [key in IntegrationTypes]?: { - depositLimit: string; - depositRate: string; - withdrawLimit: string; - withdrawRate: string; - poolCount: number; - }; - }; - }; - }; - }; -}; - -const _projectConstants: ProjectConstants = { - [Project.AEVO_TESTNET]: { - [DeploymentMode.PROD]: { - [Tokens.USDC]: { - appChain: ChainSlug.AEVO_TESTNET, - nonAppChains: [ChainSlug.ARBITRUM_SEPOLIA, ChainSlug.OPTIMISM_SEPOLIA], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "50000", - depositRate: "0.5787", - withdrawLimit: "50000", - withdrawRate: "0.5787", - poolCount: 0, - }, - }, - }, - [Tokens.WETH]: { - appChain: ChainSlug.AEVO_TESTNET, - nonAppChains: [ChainSlug.ARBITRUM_SEPOLIA, ChainSlug.OPTIMISM_SEPOLIA], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "100", - depositRate: "0.0011574", - withdrawLimit: "100", - withdrawRate: "0.0011574", - poolCount: 0, - }, - }, - }, +export const SepoliaConfig: IConfiguration = { + upgradeAdmin: "0x018281853eCC543Aa251732e8FDaa7323247eBeB", + vaultOwner: "0x018281853eCC543Aa251732e8FDaa7323247eBeB", + Tokens: { + DAI: { + address: "0xFF34B3d4Aee8ddCd6F9AFFFB6Fe49bD371b8a357", + strategy: Strategy.AAVE, + strategyPool: "0x6Ae43d3271ff6888e7Fc43Fd7321a503ff738951", }, - }, - [Project.AEVO]: { - [DeploymentMode.DEV]: { - [Tokens.USDC]: { - appChain: ChainSlug.AEVO_TESTNET, - nonAppChains: [ChainSlug.ARBITRUM_GOERLI, ChainSlug.OPTIMISM_GOERLI], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "50000", - depositRate: "0.5787", - withdrawLimit: "50000", - withdrawRate: "0.5787", - poolCount: 0, - }, - }, - }, + LINK: { + address: "0xf8Fb3713D459D7C1018BD0A49D19b4C44290EBE5", + strategy: Strategy.AAVE, + strategyPool: "0x6Ae43d3271ff6888e7Fc43Fd7321a503ff738951", }, - [DeploymentMode.PROD]: { - [Tokens.USDC]: { - appChain: ChainSlug.AEVO, - nonAppChains: [ChainSlug.ARBITRUM, ChainSlug.OPTIMISM], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "5000000", - // depositRate: "5000000", - depositRate: "57.87", - withdrawLimit: "5000000", - // withdrawRate: "5000000", - withdrawRate: "57.87", - poolCount: 0, - }, - }, - }, - [Tokens.WETH]: { - appChain: ChainSlug.AEVO, - nonAppChains: [ChainSlug.ARBITRUM, ChainSlug.OPTIMISM], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "2000", - // depositRate: "2000", - depositRate: "0.02314815", - withdrawLimit: "2000", - // withdrawRate: "2000", - withdrawRate: "0.02314815", - poolCount: 0, - }, - }, - }, + USDC: { + address: "0x94a9D9AC8a22534E3FaCa9F4e7F2E2cf85d5E4C8", + strategy: Strategy.AAVE, + strategyPool: "0x6Ae43d3271ff6888e7Fc43Fd7321a503ff738951", }, - }, - [Project.LYRA_TESTNET]: { - [DeploymentMode.DEV]: { - [Tokens.USDC]: { - appChain: ChainSlug.LYRA_TESTNET, - nonAppChains: [ChainSlug.ARBITRUM_GOERLI, ChainSlug.OPTIMISM_GOERLI], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "10000", - depositRate: "0.11574", - withdrawLimit: "10000", - withdrawRate: "0.11574", - poolCount: 0, - }, - }, - }, - }, - [DeploymentMode.PROD]: { - [Tokens.USDC]: { - appChain: ChainSlug.LYRA_TESTNET, - nonAppChains: [ChainSlug.SEPOLIA], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "100000", - depositRate: "1.1574", - withdrawLimit: "100000", - withdrawRate: "1.1574", - poolCount: 0, - }, - [IntegrationTypes.native]: { - depositLimit: "100000", - depositRate: "1.1574", - withdrawLimit: "0", - withdrawRate: "0", - poolCount: 0, - }, - }, - }, - }, - }, - [Project.LYRA]: { - [DeploymentMode.PROD]: { - [Tokens.USDC]: { - appChain: ChainSlug.LYRA, - nonAppChains: [ChainSlug.MAINNET], - isFiatTokenV2_1: true, - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "10000000", - // depositRate: "10000000", - depositRate: "115.74", - withdrawLimit: "1000000", - // withdrawRate: "1000000", - withdrawRate: "11.574", - poolCount: 0, - }, - [IntegrationTypes.native]: { - depositLimit: "10000000", - // depositRate: "10000000", - depositRate: "115.74", - withdrawLimit: "0", - withdrawRate: "0", - poolCount: 0, - }, - }, - }, + WBTC: { + address: "0x29f2D40B0605204364af54EC677bD022dA425d03", + strategy: Strategy.AAVE, + strategyPool: "0x6Ae43d3271ff6888e7Fc43Fd7321a503ff738951", }, - }, - [Project.SX_NETWORK_TESTNET]: { - [DeploymentMode.PROD]: { - [Tokens.USDC]: { - appChain: ChainSlug.SX_NETWORK_TESTNET, - nonAppChains: [ChainSlug.POLYGON_MUMBAI, ChainSlug.SEPOLIA], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "10000", - depositRate: "0.11574", - withdrawLimit: "10000", - withdrawRate: "0.11574", - poolCount: 0, - }, - }, - }, - }, - }, - [Project.SOCKET_DEV]: { - [DeploymentMode.DEV]: { - [Tokens.USDC]: { - appChain: ChainSlug.OPTIMISM_SEPOLIA, - nonAppChains: [ChainSlug.ARBITRUM_SEPOLIA], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "10000", - depositRate: "0.11574", - withdrawLimit: "10000", - withdrawRate: "0.11574", - poolCount: 0, - }, - }, - }, - [Tokens.WETH]: { - appChain: ChainSlug.OPTIMISM_SEPOLIA, - nonAppChains: [ChainSlug.ARBITRUM_SEPOLIA], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "100", - depositRate: "0.0011574", - withdrawLimit: "100", - withdrawRate: "0.0011574", - poolCount: 0, - }, - }, - }, + WETH: { + address: "0xC558DBdd856501FCd9aaF1E62eae57A9F0629a3c", + strategy: Strategy.ETHAAVE, + strategyPool: "0x6Ae43d3271ff6888e7Fc43Fd7321a503ff738951", }, - }, - [Project.MODE_TESTNET]: { - [DeploymentMode.PROD]: { - [Tokens.USDC]: { - appChain: ChainSlug.MODE_TESTNET, - nonAppChains: [ChainSlug.ARBITRUM_SEPOLIA, ChainSlug.OPTIMISM_SEPOLIA], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "10000", - depositRate: "0.11574", - withdrawLimit: "10000", - withdrawRate: "0.11574", - poolCount: 0, - }, - }, - }, + USDT: { + address: "0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0", + strategy: Strategy.AAVE, + strategyPool: "0x6Ae43d3271ff6888e7Fc43Fd7321a503ff738951", }, - }, - [Project.VICTION_TESTNET]: { - [DeploymentMode.PROD]: { - [Tokens.USDC]: { - appChain: ChainSlug.VICTION_TESTNET, - nonAppChains: [ChainSlug.SEPOLIA], - integrationTypes: { - [IntegrationTypes.fast]: { - depositLimit: "10000", - depositRate: "0.11574", - withdrawLimit: "10000", - withdrawRate: "0.11574", - poolCount: 0, - }, - }, - }, + AAVE: { + address: "0x88541670E55cC00bEEFD87eB59EDd1b7C511AC9a", + strategy: Strategy.AAVE, + strategyPool: "0x6Ae43d3271ff6888e7Fc43Fd7321a503ff738951", }, }, }; -export const isAppChain = (chain: ChainSlug) => - projectConstants.appChain === chain; - -export const tokenName: { [key in Tokens]: string } = { - [Tokens.Moon]: "Moon", - [Tokens.USDC]: "USD coin", - [Tokens.WETH]: "Wrapped Ether", -}; - -export const tokenSymbol: { [key in Tokens]: string } = { - [Tokens.Moon]: "MOON", - [Tokens.USDC]: "USDC", - [Tokens.WETH]: "WETH", -}; - -export const tokenDecimals: { [key in Tokens]: number } = { - [Tokens.Moon]: 18, - [Tokens.USDC]: 6, - [Tokens.WETH]: 18, +export const EAConfigs: Partial> = { + //[eEthereumNetwork.hardhat]: HardhatConfig, + //[eEthereumNetwork.mainnet]: MainnetConfig, + [eEthereumNetwork.sepolia]: SepoliaConfig, + //[eEthereumNetwork.arbitrum]: ArbitrumConfig, }; - -export const projectConstants = (() => { - const pc = _projectConstants?.[project]?.[mode]?.[token]; - if (!pc) - throw new Error(`config not found for ${project}, ${mode}, ${token}`); - return pc; -})(); - -export const getIntegrationTypeConsts = (it: IntegrationTypes) => { - const pci = projectConstants.integrationTypes[it]; - if (!pci) throw new Error("invalid integration for mode and project"); - return pci; -}; - -export const getLimitBN = ( - it: IntegrationTypes, - isDeposit: boolean -): BigNumber => { - if (isDeposit) { - return utils.parseUnits( - getIntegrationTypeConsts(it).depositLimit, - tokenDecimals[token] - ); - } else { - return utils.parseUnits( - getIntegrationTypeConsts(it).withdrawLimit, - tokenDecimals[token] - ); - } -}; - -export const getRateBN = ( - it: IntegrationTypes, - isDeposit: boolean -): BigNumber => { - if (isDeposit) { - return utils.parseUnits( - getIntegrationTypeConsts(it).depositRate, - tokenDecimals[token] - ); - } else { - return utils.parseUnits( - getIntegrationTypeConsts(it).withdrawRate, - tokenDecimals[token] - ); - } -}; - -export const integrationTypes: IntegrationTypes = Object.keys( - projectConstants.integrationTypes -) as unknown as IntegrationTypes; diff --git a/script/helpers/deployment.ts b/script/helpers/deployment.ts new file mode 100644 index 0000000..e47639a --- /dev/null +++ b/script/helpers/deployment.ts @@ -0,0 +1,180 @@ +import { tEthereumAddress } from "../../src"; +import hre, { ethers } from "hardhat"; +import { + AaveStrategy, + ERC20, + ETHAaveStrategy, + MintableERC20, + MockAAVE, + MockLido, + MockWstETH, + XERC20, + XERC20Factory, +} from "../../typechain-types"; +import { overrides } from "./networks"; + +export const getERC20 = async (address: tEthereumAddress) => { + const ERC20Factory = await ethers.getContractFactory("ERC20"); + return ERC20Factory.attach(address) as unknown as ERC20; +}; + +export const deployFactory = async () => { + const XERC20FactoryFactory = await ethers.getContractFactory("XERC20Factory"); + const XERC20Factory = await XERC20FactoryFactory.deploy({ + ...overrides[hre.network.name], + }); + console.log( + "XERC20Factory.deployTransaction.hash:", + XERC20Factory.deploymentTransaction().hash + ); + await XERC20Factory.deploymentTransaction().wait(1); + + console.log("XERC20Factory deployed to:", await XERC20Factory.getAddress()); + + return XERC20FactoryFactory.attach( + await XERC20Factory.getAddress() + ) as unknown as XERC20Factory; +}; + +export const deployAAVEStrategyImpl = async () => { + const AaveStrategyFactory = await ethers.getContractFactory("AaveStrategy"); + const AaveStrategyImpl = await AaveStrategyFactory.deploy({ + ...overrides[hre.network.name], + }); + await AaveStrategyImpl.deploymentTransaction().wait(1); + const implAddress = await AaveStrategyImpl.getAddress(); + + console.log("AaveStrategyImpl deployed to:", implAddress); + + return implAddress; +}; + +export const deployAAVEStrategy = async ( + impl: tEthereumAddress, + aave: tEthereumAddress, + vault: tEthereumAddress, + proxyAdmin: tEthereumAddress +) => { + console.log("impl:", impl); + console.log("aave:", aave); + console.log("vault:", vault); + console.log("proxyAdmin:", proxyAdmin); + const AaveStrategyFactory = await ethers.getContractFactory("AaveStrategy"); + const initData = AaveStrategyFactory.interface.encodeFunctionData( + "initialize", + [aave, vault] + ); + + const ParallelProxyFactory = await ethers.getContractFactory("ParallelProxy"); + const ParallelProxy = await ParallelProxyFactory.deploy( + impl, + proxyAdmin, + initData, + { + ...overrides[hre.network.name], + } + ); + await ParallelProxy.deploymentTransaction().wait(1); + + console.log( + "AAVEStrategy Proxy deployed to:", + await ParallelProxy.getAddress() + ); + console.log("impl:", impl); + console.log("proxyAdmin:", proxyAdmin); + console.log("initData:", initData); + + return AaveStrategyFactory.attach( + await ParallelProxy.getAddress() + ) as unknown as AaveStrategy; +}; + +export const deployETHAAVEStrategy = async ( + wstETH: tEthereumAddress, + aave: tEthereumAddress, + vault: tEthereumAddress, + proxyAdmin: tEthereumAddress +) => { + const ETHAaveStrategyFactory = await ethers.getContractFactory( + "ETHAaveStrategy" + ); + const IMPL = await ETHAaveStrategyFactory.deploy(wstETH, aave, vault, { + ...overrides[hre.network.name], + }); + await IMPL.deploymentTransaction().wait(1); + console.log("ETHAAVEStrategy IMPL deployed to:", await IMPL.getAddress()); + console.log("wstETH:", wstETH); + console.log("aave:", aave); + console.log("vault:", vault); + + const initData = ETHAaveStrategyFactory.interface.encodeFunctionData( + "initialize", + [] + ); + const ParallelProxyFactory = await ethers.getContractFactory("ParallelProxy"); + const ParallelProxy = await ParallelProxyFactory.deploy( + await IMPL.getAddress(), + proxyAdmin, + initData, + { + ...overrides[hre.network.name], + } + ); + await ParallelProxy.deploymentTransaction().wait(1); + const proxyAddr = await ParallelProxy.getAddress(); + + console.log("ETHAAVEStrategy Proxy deployed to:", proxyAddr); + console.log("impl:", await IMPL.getAddress()); + console.log("proxyAdmin:", proxyAdmin); + console.log("initData:", initData); + + return ETHAaveStrategyFactory.attach(proxyAddr) as unknown as ETHAaveStrategy; +}; + +export const deployMOCKAAVE = async () => { + const MockAAVEFactory = await ethers.getContractFactory("MockAAVE"); + + const aave = await MockAAVEFactory.deploy({ + ...overrides[hre.network.name], + }); + await aave.deploymentTransaction().wait(1); + + return aave as unknown as MockAAVE; +}; + +export const deployMOCKLICO = async () => { + const MockLIDOFactory = await ethers.getContractFactory("MockLido"); + + const lido = await MockLIDOFactory.deploy({ + ...overrides[hre.network.name], + }); + await lido.deploymentTransaction().wait(1); + + return lido as unknown as MockLido; +}; + +export const deployMOCKWSTETH = async (stETH: tEthereumAddress) => { + const MockWstETHFactory = await ethers.getContractFactory("MockWstETH"); + + const wstETH = await MockWstETHFactory.deploy(stETH, { + ...overrides[hre.network.name], + }); + await wstETH.deploymentTransaction().wait(1); + + return wstETH as unknown as MockWstETH; +}; + +export const deployMintableERC20 = async () => { + const MintableERC20Factory = await ethers.getContractFactory("MintableERC20"); + + const token = await MintableERC20Factory.deploy( + "Test Token Name", + "Test Token symbol", + { + ...overrides[hre.network.name], + } + ); + await token.deploymentTransaction().wait(1); + + return token as unknown as MintableERC20; +}; diff --git a/script/helpers/networks.ts b/script/helpers/networks.ts index 09fd6d1..1ca7c14 100644 --- a/script/helpers/networks.ts +++ b/script/helpers/networks.ts @@ -1,215 +1,48 @@ import { config as dotenvConfig } from "dotenv"; -import { BigNumberish, Wallet, ethers } from "ethers"; +import { BigNumberish } from "ethers"; import { resolve } from "path"; -import { ChainSlug, ChainSlugToKey } from "@socket.tech/dl-core"; -import { socketSignerKey } from "./constants"; +import { eEthereumNetwork } from "../../script/types"; const dotenvConfigPath: string = process.env.DOTENV_CONFIG_PATH || "./.env"; dotenvConfig({ path: resolve(__dirname, dotenvConfigPath) }); -export const chainSlugKeys: string[] = Object.values(ChainSlugToKey); - export const gasLimit = undefined; export const gasPrice = undefined; export const type = 2; export const overrides: { - [chain in ChainSlug]?: { - type?: number | undefined; + [network in eEthereumNetwork]?: { + type: number | undefined; gasLimit: BigNumberish | undefined; - gasPrice: BigNumberish | undefined; + gasPrice?: BigNumberish; + maxFeePerGas?: BigNumberish; + maxPriorityFeePerGas?: BigNumberish; }; } = { - [ChainSlug.ARBITRUM_GOERLI]: { - type, - gasLimit: 20_000_000, - gasPrice, - }, - [ChainSlug.ARBITRUM_SEPOLIA]: { - type, - gasLimit: 20_000_000, - gasPrice, - }, - [ChainSlug.OPTIMISM_GOERLI]: { - type, - gasLimit: 20_000_000, - gasPrice, - }, - [ChainSlug.OPTIMISM_SEPOLIA]: { + [eEthereumNetwork.hardhat]: { type, gasLimit: 20_000_000, - gasPrice, }, - [ChainSlug.SEPOLIA]: { - type: 1, + [eEthereumNetwork.mainnet]: { + type: 2, gasLimit, - gasPrice: 10_000_000_000, + maxFeePerGas: 30_000_000_000, + maxPriorityFeePerGas: 1_000_000_000, }, - [ChainSlug.AEVO_TESTNET]: { - type, + [eEthereumNetwork.sepolia]: { + type: 2, gasLimit, - gasPrice, - }, - [ChainSlug.OPTIMISM]: { - type, - gasLimit: 2_000_000, - gasPrice, + maxFeePerGas: 30_000_000_000, + maxPriorityFeePerGas: 1_000_000_000, }, - [ChainSlug.ARBITRUM]: { + [eEthereumNetwork.arbitrum]: { type, gasLimit: 20_000_000, gasPrice, }, - [ChainSlug.AEVO]: { - type: 1, - gasLimit, - gasPrice: 100_000_000, - }, - [ChainSlug.LYRA_TESTNET]: { - type: 1, - gasLimit, - gasPrice: 100_000_000, - }, - [ChainSlug.LYRA]: { - type: 1, - gasLimit, - gasPrice: 100_000_000, - }, - [ChainSlug.MAINNET]: { - type: 1, - gasLimit: 400_000, - gasPrice: 25_000_000_000, - }, - [ChainSlug.SX_NETWORK_TESTNET]: { - // type: 1, - gasLimit: 10_000_000, - gasPrice: 20_000_000_000, - }, - [ChainSlug.MODE_TESTNET]: { + [eEthereumNetwork.arbitrumSepolia]: { type: 1, gasLimit: 3_000_000, gasPrice: 100_000_000, }, - [ChainSlug.VICTION_TESTNET]: { - // type: 1, - gasLimit: 3_000_000, - gasPrice: 2_000_000_000, - }, -}; - -export function getJsonRpcUrl(chain: ChainSlug): string { - switch (chain) { - case ChainSlug.ARBITRUM: - if (!process.env.ARBITRUM_RPC) - throw new Error("ARBITRUM_RPC not configured"); - return process.env.ARBITRUM_RPC; - - case ChainSlug.ARBITRUM_GOERLI: - if (!process.env.ARB_GOERLI_RPC) - throw new Error("ARB_GOERLI_RPC not configured"); - return process.env.ARB_GOERLI_RPC; - - case ChainSlug.ARBITRUM_SEPOLIA: - if (!process.env.ARB_SEPOLIA_RPC) - throw new Error("ARB_SEPOLIA_RPC not configured"); - return process.env.ARB_SEPOLIA_RPC; - - case ChainSlug.OPTIMISM: - if (!process.env.OPTIMISM_RPC) - throw new Error("OPTIMISM_RPC not configured"); - return process.env.OPTIMISM_RPC; - - case ChainSlug.OPTIMISM_GOERLI: - if (!process.env.OPTIMISM_GOERLI_RPC) - throw new Error("OPTIMISM_GOERLI_RPC not configured"); - return process.env.OPTIMISM_GOERLI_RPC; - - case ChainSlug.OPTIMISM_SEPOLIA: - if (!process.env.OPTIMISM_SEPOLIA_RPC) - throw new Error("OPTIMISM_SEPOLIA_RPC not configured"); - return process.env.OPTIMISM_SEPOLIA_RPC; - - case ChainSlug.POLYGON_MAINNET: - if (!process.env.POLYGON_RPC) - throw new Error("POLYGON_RPC not configured"); - return process.env.POLYGON_RPC; - - case ChainSlug.POLYGON_MUMBAI: - if (!process.env.POLYGON_MUMBAI_RPC) - throw new Error("POLYGON_MUMBAI_RPC not configured"); - return process.env.POLYGON_MUMBAI_RPC; - - case ChainSlug.BSC: - if (!process.env.BSC_RPC) throw new Error("BSC_RPC not configured"); - return process.env.BSC_RPC; - - case ChainSlug.BSC_TESTNET: - if (!process.env.BSC_TESTNET_RPC) - throw new Error("BSC_TESTNET_RPC not configured"); - return process.env.BSC_TESTNET_RPC; - - case ChainSlug.MAINNET: - if (!process.env.ETHEREUM_RPC) - throw new Error("ETHEREUM_RPC not configured"); - return process.env.ETHEREUM_RPC; - - case ChainSlug.GOERLI: - if (!process.env.GOERLI_RPC) throw new Error("GOERLI_RPC not configured"); - return process.env.GOERLI_RPC; - - case ChainSlug.SEPOLIA: - if (!process.env.SEPOLIA_RPC) - throw new Error("SEPOLIA_RPC not configured"); - return process.env.SEPOLIA_RPC; - - case ChainSlug.AEVO_TESTNET: - if (!process.env.AEVO_TESTNET_RPC) - throw new Error("AEVO_TESTNET_RPC not configured"); - return process.env.AEVO_TESTNET_RPC; - - case ChainSlug.AEVO: - if (!process.env.AEVO_RPC) throw new Error("AEVO_RPC not configured"); - return process.env.AEVO_RPC; - - case ChainSlug.LYRA_TESTNET: - if (!process.env.LYRA_TESTNET_RPC) - throw new Error("LYRA_TESTNET_RPC not configured"); - return process.env.LYRA_TESTNET_RPC; - - case ChainSlug.LYRA: - if (!process.env.LYRA_RPC) throw new Error("LYRA_RPC not configured"); - return process.env.LYRA_RPC; - - case ChainSlug.SX_NETWORK_TESTNET: - if (!process.env.SX_NETWORK_TESTNET_RPC) - throw new Error("SX_NETWORK_TESTNET_RPC not configured"); - return process.env.SX_NETWORK_TESTNET_RPC; - - case ChainSlug.MODE_TESTNET: - if (!process.env.MODE_TESTNET_RPC) - throw new Error("MODE_TESTNET_RPC not configured"); - return process.env.MODE_TESTNET_RPC; - - case ChainSlug.VICTION_TESTNET: - if (!process.env.VICTION_TESTNET_RPC) - throw new Error("VICTION_TESTNET_RPC not configured"); - return process.env.VICTION_TESTNET_RPC; - - case ChainSlug.HARDHAT: - return "http://127.0.0.1:8545/"; - - default: - throw new Error(`Chain RPC not supported ${chain}`); - } -} - -export const getProviderFromChainSlug = ( - chainSlug: ChainSlug -): ethers.providers.StaticJsonRpcProvider => { - const jsonRpcUrl = getJsonRpcUrl(chainSlug); - return new ethers.providers.StaticJsonRpcProvider(jsonRpcUrl); -}; - -export const getSignerFromChainSlug = (chainSlug: ChainSlug): Wallet => { - return new Wallet(socketSignerKey, getProviderFromChainSlug(chainSlug)); }; diff --git a/script/helpers/utils.ts b/script/helpers/utils.ts index 4b67e80..651a961 100644 --- a/script/helpers/utils.ts +++ b/script/helpers/utils.ts @@ -1,207 +1,6 @@ -import { Wallet } from "ethers"; -import { network, ethers, run } from "hardhat"; -import { ContractFactory, Contract } from "ethers"; - -import fs from "fs"; -import path from "path"; -import { Address } from "hardhat-deploy/dist/types"; -import { ChainSlug, IntegrationTypes } from "@socket.tech/dl-core"; - -import { overrides } from "./networks"; -import { - getIntegrationTypeConsts, - mode, - project, - projectConstants, - token, -} from "./constants"; -import { ProjectAddresses, TokenAddresses } from "../../src"; - -export const deploymentsPath = path.join( - __dirname, - `/../../deployments/superbridge/` -); - -export const deployedAddressPath = () => - deploymentsPath + `${mode}_${project}_addresses.json`; - -export interface DeployParams { - addresses: TokenAddresses; - signer: Wallet; - currentChainSlug: number; -} - -export const getOrDeploy = async ( - contractName: string, - path: string, - args: any[], - deployUtils: DeployParams -): Promise => { - if (!deployUtils || !deployUtils.addresses) - throw new Error("No addresses found"); - - let contract: Contract; - if (!deployUtils.addresses[contractName]) { - contract = await deployContractWithArgs( - contractName, - args, - deployUtils.signer - ); - - console.log( - `${contractName} deployed on ${deployUtils.currentChainSlug} for ${mode}, ${project} at address ${contract.address}` - ); - - await storeVerificationParams( - [contract.address, contractName, path, args], - deployUtils.currentChainSlug - ); - } else { - contract = await getInstance( - contractName, - deployUtils.addresses[contractName] - ); - console.log( - `${contractName} found on ${deployUtils.currentChainSlug} for ${mode}, ${project} at address ${contract.address}` - ); - } - - return contract; -}; - -export async function deployContractWithArgs( - contractName: string, - args: Array, - signer: Wallet -) { - try { - const Contract: ContractFactory = await ethers.getContractFactory( - contractName - ); - // gasLimit is set to undefined to not use the value set in overrides - const contract: Contract = await Contract.connect(signer).deploy(...args, { - ...overrides[await signer.getChainId()], - // gasLimit: undefined, - }); - await contract.deployed(); - return contract; - } catch (error) { - throw error; - } -} - -export const verify = async ( - address: string, - contractName: string, - path: string, - args: any[] -) => { - try { - const chainSlug = await getChainSlug(); - if (chainSlug === 31337) return; - - await run("verify:verify", { - address, - contract: `${path}:${contractName}`, - constructorArguments: args, - }); - } catch (error) { - console.log("Error during verification", error); - } -}; - -export const sleep = (delay: number) => - new Promise((resolve) => setTimeout(resolve, delay * 1000)); - -export const getInstance = async ( - contractName: string, - address: Address -): Promise => ethers.getContractAt(contractName, address); - -export const getChainSlug = async (): Promise => { - if (network.config.chainId === undefined) - throw new Error("chain id not found"); - return Number(network.config.chainId); -}; - -export const storeAddresses = async ( - addresses: TokenAddresses, - chainSlug: ChainSlug -) => { - if (!fs.existsSync(deploymentsPath)) { - await fs.promises.mkdir(deploymentsPath, { recursive: true }); - } - - const addressesPath = deploymentsPath + `${mode}_${project}_addresses.json`; - const outputExists = fs.existsSync(addressesPath); - let deploymentAddresses: ProjectAddresses = {}; - if (outputExists) { - const deploymentAddressesString = fs.readFileSync(addressesPath, "utf-8"); - deploymentAddresses = JSON.parse(deploymentAddressesString); - } - - deploymentAddresses = createObj( - deploymentAddresses, - [chainSlug.toString(), token], - addresses - ); - // deploymentAddresses[chainSlug][token] = addresses; - fs.writeFileSync(addressesPath, JSON.stringify(deploymentAddresses, null, 2)); -}; - -export const storeAllAddresses = async (addresses: ProjectAddresses) => { - if (!fs.existsSync(deploymentsPath)) { - await fs.promises.mkdir(deploymentsPath, { recursive: true }); - } - - const addressesPath = deploymentsPath + `${mode}_${project}_addresses.json`; - fs.writeFileSync(addressesPath, JSON.stringify(addresses, null, 2)); -}; - -let addresses: ProjectAddresses; -export const getProjectAddresses = async (): Promise => { - if (!addresses) - try { - addresses = await import( - `../../deployments/superbridge/${mode}_${project}_addresses.json` - ); - } catch (e) { - console.log("addresses not found", e); - throw new Error("addresses not found"); - } - return addresses; -}; - -export const storeVerificationParams = async ( - verificationDetail: any[], - chainSlug: ChainSlug -) => { - if (!fs.existsSync(deploymentsPath)) { - await fs.promises.mkdir(deploymentsPath); - } - const verificationPath = - deploymentsPath + `${mode}_${project}_verification.json`; - const outputExists = fs.existsSync(verificationPath); - let verificationDetails: object = {}; - if (outputExists) { - const verificationDetailsString = fs.readFileSync( - verificationPath, - "utf-8" - ); - verificationDetails = JSON.parse(verificationDetailsString); - } - - if (!verificationDetails[chainSlug]) verificationDetails[chainSlug] = []; - verificationDetails[chainSlug] = [ - verificationDetail, - ...verificationDetails[chainSlug], - ]; - - fs.writeFileSync( - verificationPath, - JSON.stringify(verificationDetails, null, 2) - ); -}; +import { network } from "hardhat"; +import { EAConfigs } from "./constants"; +import { IConfiguration } from "../../src"; export const createObj = function (obj: any, keys: string[], value: any): any { if (keys.length === 1) { @@ -218,17 +17,6 @@ export const createObj = function (obj: any, keys: string[], value: any): any { return obj; }; -export function encodePoolId(chainSlug: number, poolCount: number) { - const encodedValue = (BigInt(chainSlug) << BigInt(224)) | BigInt(poolCount); - - // Ensure the result is a 32-byte hex string (bytes32 in Solidity) - const resultHex = encodedValue.toString(16).padStart(64, "0"); - return "0x" + resultHex; -} - -export const getPoolIdHex = ( - chainSlug: ChainSlug, - it: IntegrationTypes -): string => { - return encodePoolId(chainSlug, getIntegrationTypeConsts(it).poolCount); +export const getMarketConfig = (): IConfiguration => { + return EAConfigs[network.name]; }; diff --git a/script/types.ts b/script/types.ts new file mode 100644 index 0000000..0705ccf --- /dev/null +++ b/script/types.ts @@ -0,0 +1,61 @@ +export type tEthereumAddress = string; + +export enum eEthereumNetwork { + hardhat = "hardhat", + mainnet = "mainnet", + sepolia = "sepolia", + arbitrum = "arbitrum", + arbitrumSepolia = "arbitrumSepolia", +} + +export enum eContractid { + MintableToken = "MintableToken", + NonMintableToken = "NonMintableToken", + AaveStrategyImpl = "AaveStrategyImpl", + VaultImpl = "VaultImpl", + ParallelProxy = "ParallelProxy", +} + +export enum Tokens { + USDC = "USDC", + WETH = "WETH", + USDT = "USDT", + DAI = "DAI", + WBTC = "WBTC", + wstETH = "wstETH", + rETH = "rETH", + cbETH = "cbETH", + AAVE = "AAVE", + LINK = "LINK", +} + +export enum Strategy { + AAVE = "AAVE", + ETHAAVE = "ETHAAVE", +} + +export interface ITokenConfig { + address: tEthereumAddress; + strategy: Strategy; + strategyPool?: tEthereumAddress; + strategyOwner?: tEthereumAddress; +} + +export interface IConfiguration { + upgradeAdmin: tEthereumAddress; + vaultOwner: tEthereumAddress; + wstETH?: tEthereumAddress; + Tokens: Partial>; +} +export enum SuperBridgeContracts { + MintableToken = "MintableToken", + NonMintableToken = "NonMintableToken", + ParallelVault = "ParallelVault", + AaveStrategy = "AaveStrategy", + VaultProxy = "VaultProxy", + VaultImpl = "VaultImpl", + Controller = "Controller", + FiatTokenV2_1_Controller = "FiatTokenV2_1_Controller", + ExchangeRate = "ExchangeRate", + ConnectorPlug = "ConnectorPlug", +} diff --git a/src/core.ts b/src/core.ts deleted file mode 100644 index beafb4e..0000000 --- a/src/core.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Exporting so that they can also be used by downstream projects without explicitly importing dl-core -export { - DeploymentMode, - ChainSlug, - IntegrationTypes, -} from "@socket.tech/dl-core"; diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 7a8a6ba..0000000 --- a/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./types"; -export * from "./superbridge-addresses"; -export * from "./core"; diff --git a/src/superbridge-addresses.ts b/src/superbridge-addresses.ts deleted file mode 100644 index 996a4a0..0000000 --- a/src/superbridge-addresses.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { DeploymentMode } from "@socket.tech/dl-core"; -import { Project, ProjectAddresses } from "./types"; - -import dev_aevo_testnet_addresses from "../deployments/superbridge/dev_aevo-testnet_addresses.json"; -import dev_lyra_testnet_address from "../deployments/superbridge/dev_lyra-testnet_addresses.json"; -import dev_socket_dev_address from "../deployments/superbridge/dev_socket-dev_addresses.json"; -import prod_aevo_testnet_addresses from "../deployments/superbridge/prod_aevo-testnet_addresses.json"; -import prod_lyra_testnet_address from "../deployments/superbridge/prod_lyra-testnet_addresses.json"; -import prod_sxn_testnet_addresses from "../deployments/superbridge/prod_sx-network-testnet_addresses.json"; -import prod_mode_testnet_addresses from "../deployments/superbridge/prod_mode-testnet_addresses.json"; -import prod_viction_testnet_addresses from "../deployments/superbridge/prod_viction-testnet_addresses.json"; -import prod_aevo_addresses from "../deployments/superbridge/prod_aevo_addresses.json"; -import prod_lyra_address from "../deployments/superbridge/prod_lyra_addresses.json"; - -// export const getSuperbridgeAddresses = async ( -// mode: DeploymentMode, -// project: Project -// ): Promise => { -// try { -// // path relative to its position in final published package -// return (await import( -// `../deployments/superbridge/${mode}_${project}_addresses.json` -// )) as ProjectAddresses; -// } catch (e) { -// throw new Error(`addresses not found, mode: ${mode}, project: ${project}`); -// } -// }; - -export const getSuperBridgeAddresses = async ( - deploymentMode: DeploymentMode, - project: Project -): Promise => { - try { - if (deploymentMode === DeploymentMode.DEV) { - if (project === Project.AEVO_TESTNET) - return dev_aevo_testnet_addresses as ProjectAddresses; - if (project === Project.LYRA_TESTNET) - return dev_lyra_testnet_address as ProjectAddresses; - if (project === Project.SOCKET_DEV) - return dev_socket_dev_address as ProjectAddresses; - throw new Error(); - } else if (deploymentMode === DeploymentMode.PROD) { - if (project === Project.SX_NETWORK_TESTNET) - return prod_sxn_testnet_addresses as ProjectAddresses; - if (project === Project.LYRA_TESTNET) - return prod_lyra_testnet_address as ProjectAddresses; - if (project === Project.AEVO_TESTNET) - return prod_aevo_testnet_addresses as ProjectAddresses; - if (project === Project.MODE_TESTNET) - return prod_mode_testnet_addresses as ProjectAddresses; - if (project === Project.VICTION_TESTNET) - return prod_viction_testnet_addresses as ProjectAddresses; - if (project === Project.AEVO) - return prod_aevo_addresses as ProjectAddresses; - if (project === Project.LYRA) - return prod_lyra_address as ProjectAddresses; - throw new Error(); - } else throw new Error(); - } catch (e) { - throw new Error(`address mode: ${deploymentMode}, project: ${project}`); - } -}; diff --git a/src/types.ts b/src/types.ts deleted file mode 100644 index c7e4731..0000000 --- a/src/types.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { ChainSlug, IntegrationTypes } from "./core"; - -export enum Tokens { - Moon = "MOON", - USDC = "USDC", - WETH = "WETH", -} - -export enum Project { - AEVO = "aevo", - AEVO_TESTNET = "aevo-testnet", - LYRA_TESTNET = "lyra-testnet", - LYRA = "lyra", - SX_NETWORK_TESTNET = "sx-network-testnet", - SOCKET_DEV = "socket-dev", - MODE_TESTNET = "mode-testnet", - VICTION_TESTNET = "viction-testnet", -} - -export enum SuperBridgeContracts { - MintableToken = "MintableToken", - NonMintableToken = "NonMintableToken", - Vault = "Vault", - Controller = "Controller", - FiatTokenV2_1_Controller = "FiatTokenV2_1_Controller", - ExchangeRate = "ExchangeRate", - ConnectorPlug = "ConnectorPlug", -} - -export type ProjectAddresses = { - [chainSlug in ChainSlug]?: ChainAddresses; -}; - -export type ChainAddresses = { - [token in Tokens]?: TokenAddresses; -}; - -export type TokenAddresses = AppChainAddresses | NonAppChainAddresses; - -export interface AppChainAddresses { - isAppChain: true; - [SuperBridgeContracts.MintableToken]?: string; - [SuperBridgeContracts.Controller]?: string; - [SuperBridgeContracts.ExchangeRate]?: string; - connectors?: Connectors; -} - -export interface NonAppChainAddresses { - isAppChain: false; - [SuperBridgeContracts.NonMintableToken]?: string; - [SuperBridgeContracts.Vault]?: string; - connectors?: Connectors; -} - -export type Connectors = { - [chainSlug in ChainSlug]?: ConnectorAddresses; -}; - -export type ConnectorAddresses = { - [integration in IntegrationTypes]?: string; -}; - -export const ChainSlugToProject: { [chainSlug in ChainSlug]?: Project } = { - [ChainSlug.AEVO]: Project.AEVO, - [ChainSlug.AEVO_TESTNET]: Project.AEVO_TESTNET, - [ChainSlug.LYRA_TESTNET]: Project.LYRA_TESTNET, - [ChainSlug.LYRA]: Project.LYRA, - [ChainSlug.SX_NETWORK_TESTNET]: Project.SX_NETWORK_TESTNET, - [ChainSlug.OPTIMISM_SEPOLIA]: Project.SOCKET_DEV, - [ChainSlug.MODE_TESTNET]: Project.MODE_TESTNET, - [ChainSlug.VICTION_TESTNET]: Project.VICTION_TESTNET, -}; diff --git a/test/Vault.t.sol b/test/Vault.t.sol deleted file mode 100644 index e6f3268..0000000 --- a/test/Vault.t.sol +++ /dev/null @@ -1,602 +0,0 @@ -pragma solidity 0.8.19; - -import "forge-std/Test.sol"; -import "./mocks/NonMintableToken.sol"; -import "./mocks/MintableToken.sol"; -import "../contracts/superbridge/ParallelVault.sol"; - -contract TestVault is Test { - uint256 _c; - address immutable _admin = address(uint160(_c++)); - address immutable _raju = address(uint160(_c++)); - address immutable _connector = address(uint160(_c++)); - address immutable _wrongConnector = address(uint160(_c++)); - - uint256 constant _lockMaxLimit = 200 ether; - uint256 constant _lockRate = 2 ether; - uint256 constant _unlockMaxLimit = 100 ether; - uint256 constant _unlockRate = 1 ether; - uint256 constant _fees = 0.001 ether; - uint256 constant _msgGasLimit = 200_000; - uint256 constant _bootstrapTime = 100; - ERC20 _token; - ParallelVault _vault; - - function setUp() external { - vm.startPrank(_admin); - _token = new NonMintableToken("USDC", "USDC", 6, 1_000_000_000 ether); - _vault = new ParallelVault(address(_token), "ParallelUSDC", "pUSDC"); - vm.stopPrank(); - } - - function _setLimits() internal { - Vault.UpdateLimitParams[] memory u = new Vault.UpdateLimitParams[](2); - u[0] = Vault.UpdateLimitParams( - true, - _connector, - _lockMaxLimit, - _lockRate - ); - u[1] = Vault.UpdateLimitParams( - false, - _connector, - _unlockMaxLimit, - _unlockRate - ); - - vm.prank(_admin); - _vault.updateLimitParams(u); - skip(_bootstrapTime); - } - - function testMintShares() external { - _setLimits(); - - Vault.LimitParams memory lockLimitParams = _vault.getLockLimitParams( - _connector - ); - Vault.LimitParams memory unlockLimitParams = _vault - .getUnlockLimitParams(_connector); - - assertEq( - lockLimitParams.maxLimit, - _lockMaxLimit, - "lock max limit not updated" - ); - assertEq( - lockLimitParams.ratePerSecond, - _lockRate, - "lock rate not updated" - ); - - assertEq( - unlockLimitParams.maxLimit, - _unlockMaxLimit, - "unlock max limit not updated" - ); - assertEq( - unlockLimitParams.ratePerSecond, - _unlockRate, - "unlock rate not updated" - ); - } - - function testUpdateLimitParamsRaju() external { - Vault.UpdateLimitParams[] memory u = new Vault.UpdateLimitParams[](2); - u[0] = Vault.UpdateLimitParams( - true, - _connector, - _lockMaxLimit, - _lockRate - ); - u[1] = Vault.UpdateLimitParams( - false, - _connector, - _unlockMaxLimit, - _unlockRate - ); - - vm.prank(_raju); - vm.expectRevert("Ownable: caller is not the owner"); - _vault.updateLimitParams(u); - } - - function testDepositConnectorUnavail() external { - uint256 depositAmount = 2 ether; - _setLimits(); - deal(_raju, _fees); - vm.prank(_raju); - vm.expectRevert(Vault.ConnectorUnavailable.selector); - _vault.depositToAppChain{value: _fees}( - _raju, - depositAmount, - _msgGasLimit, - _wrongConnector - ); - } - - function testDepositLimitHit() external { - uint256 depositAmount = 201 ether; - _setLimits(); - assertTrue( - depositAmount > _vault.getCurrentLockLimit(_connector), - "deposit amount within limit" - ); - - vm.prank(_admin); - _token.transfer(_raju, depositAmount); - deal(_raju, _fees); - - vm.startPrank(_raju); - _token.approve(address(_vault), depositAmount); - vm.expectRevert(Gauge.AmountOutsideLimit.selector); - _vault.depositToAppChain{value: _fees}( - _raju, - depositAmount, - _msgGasLimit, - _connector - ); - vm.stopPrank(); - } - - function testZeroAmountDeposit() external { - _setLimits(); - - uint256 depositAmount = 0 ether; - uint256 dealAmount = 10 ether; - deal(address(_token), _raju, dealAmount); - deal(_raju, _fees); - - vm.startPrank(_raju); - _token.approve(address(_vault), dealAmount); - vm.expectRevert(Vault.ZeroAmount.selector); - _vault.depositToAppChain{value: _fees}( - _raju, - depositAmount, - _msgGasLimit, - _connector - ); - vm.stopPrank(); - } - - function testDeposit() external { - _setLimits(); - - uint256 depositAmount = 10 ether; - deal(address(_token), _raju, depositAmount); - deal(_raju, _fees); - - uint256 rajuBalBefore = _token.balanceOf(_raju); - uint256 vaultBalBefore = _token.balanceOf(address(_vault)); - uint256 lockLimitBefore = _vault.getCurrentLockLimit(_connector); - - assertTrue( - depositAmount <= _vault.getCurrentLockLimit(_connector), - "too big deposit" - ); - - vm.startPrank(_raju); - _token.approve(address(_vault), depositAmount); - vm.mockCall( - _connector, - abi.encodeCall( - IConnector.outbound, - (_msgGasLimit, abi.encode(_raju, depositAmount)) - ), - bytes("0") - ); - vm.expectCall( - _connector, - abi.encodeCall( - IConnector.outbound, - (_msgGasLimit, abi.encode(_raju, depositAmount)) - ) - ); - _vault.depositToAppChain{value: _fees}( - _raju, - depositAmount, - _msgGasLimit, - _connector - ); - vm.stopPrank(); - - uint256 rajuBalAfter = _token.balanceOf(_raju); - uint256 vaultBalAfter = _token.balanceOf(address(_vault)); - uint256 lockLimitAfter = _vault.getCurrentLockLimit(_connector); - - assertEq( - rajuBalAfter, - rajuBalBefore - depositAmount, - "raju balance sus" - ); - assertEq( - vaultBalAfter, - vaultBalBefore + depositAmount, - "vault balance sus" - ); - assertEq( - lockLimitAfter, - lockLimitBefore - depositAmount, - "lock limit sus" - ); - } - - function testPartLockLimitReplenish() external { - _setLimits(); - uint256 usedLimit = 30 ether; - uint256 time = 10; - deal(_raju, _fees); - deal(address(_token), _raju, usedLimit); - vm.startPrank(_raju); - _token.approve(address(_vault), usedLimit); - vm.mockCall( - _connector, - abi.encodeCall( - IConnector.outbound, - (_msgGasLimit, abi.encode(_raju, usedLimit)) - ), - bytes("0") - ); - _vault.depositToAppChain{value: _fees}( - _raju, - usedLimit, - _msgGasLimit, - _connector - ); - vm.stopPrank(); - - uint256 lockLimitBefore = _vault.getCurrentLockLimit(_connector); - - assertTrue(lockLimitBefore < _lockMaxLimit, "full limit avail"); - assertTrue( - lockLimitBefore + time * _lockRate < _lockMaxLimit, - "too much time" - ); - - skip(time); - - uint256 lockLimitAfter = _vault.getCurrentLockLimit(_connector); - assertEq( - lockLimitAfter, - lockLimitBefore + time * _lockRate, - "lock limit sus" - ); - } - - function testFullLockLimitReplenish() external { - _setLimits(); - uint256 usedLimit = 30 ether; - uint256 time = 100; - deal(_raju, _fees); - deal(address(_token), _raju, usedLimit); - vm.startPrank(_raju); - _token.approve(address(_vault), usedLimit); - vm.mockCall( - _connector, - abi.encodeCall( - IConnector.outbound, - (_msgGasLimit, abi.encode(_raju, usedLimit)) - ), - bytes("0") - ); - _vault.depositToAppChain{value: _fees}( - _raju, - usedLimit, - _msgGasLimit, - _connector - ); - vm.stopPrank(); - - uint256 lockLimitBefore = _vault.getCurrentLockLimit(_connector); - - assertTrue(lockLimitBefore < _lockMaxLimit, "full limit avail"); - assertTrue( - lockLimitBefore + time * _lockRate > _lockMaxLimit, - "not enough time" - ); - - skip(time); - - uint256 lockLimitAfter = _vault.getCurrentLockLimit(_connector); - assertEq(lockLimitAfter, _lockMaxLimit, "lock limit sus"); - } - - function testReceiveInboundConnectorUnavail() external { - _setLimits(); - uint256 withdrawAmount = 2 ether; - deal(address(_token), address(_vault), withdrawAmount); - - vm.expectRevert(Vault.ConnectorUnavailable.selector); - vm.prank(_wrongConnector); - _vault.receiveInbound(abi.encode(_raju, withdrawAmount)); - } - - function testFullConsumeInboundReceive() external { - _setLimits(); - uint256 withdrawAmount = 2 ether; - deal(address(_token), address(_vault), withdrawAmount); - - uint256 vaultBalBefore = _token.balanceOf(address(_vault)); - uint256 rajuBalBefore = _token.balanceOf(_raju); - uint256 pendingUnlocksBefore = _vault.pendingUnlocks(_connector, _raju); - uint256 connectorPendingUnlocksBefore = _vault.connectorPendingUnlocks( - _connector - ); - uint256 unlockLimitBefore = _vault.getCurrentUnlockLimit(_connector); - - assertTrue(withdrawAmount <= unlockLimitBefore, "limit hit"); - - vm.prank(_connector); - _vault.receiveInbound(abi.encode(_raju, withdrawAmount)); - - uint256 vaultBalAfter = _token.balanceOf(address(_vault)); - uint256 rajuBalAfter = _token.balanceOf(_raju); - uint256 pendingUnlocksAfter = _vault.pendingUnlocks(_connector, _raju); - uint256 connectorPendingUnlocksAfter = _vault.connectorPendingUnlocks( - _connector - ); - uint256 unlockLimitAfter = _vault.getCurrentUnlockLimit(_connector); - - assertEq( - vaultBalAfter, - vaultBalBefore - withdrawAmount, - "vault balance sus" - ); - assertEq( - rajuBalAfter, - rajuBalBefore + withdrawAmount, - "raju balance sus" - ); - assertEq( - pendingUnlocksAfter, - pendingUnlocksBefore, - "pending unlocks sus" - ); - assertEq( - connectorPendingUnlocksAfter, - connectorPendingUnlocksBefore, - "total pending amount sus" - ); - assertEq( - unlockLimitAfter, - unlockLimitBefore - withdrawAmount, - "unlock limit sus" - ); - } - - function testPartConsumeInboundReceive() external { - _setLimits(); - uint256 withdrawAmount = 110 ether; - deal(address(_token), address(_vault), withdrawAmount); - - uint256 vaultBalBefore = _token.balanceOf(address(_vault)); - uint256 rajuBalBefore = _token.balanceOf(_raju); - uint256 pendingUnlocksBefore = _vault.pendingUnlocks(_connector, _raju); - uint256 connectorPendingUnlocksBefore = _vault.connectorPendingUnlocks( - _connector - ); - uint256 unlockLimitBefore = _vault.getCurrentUnlockLimit(_connector); - - assertTrue(unlockLimitBefore > 0, "no unlock limit available"); - assertTrue(withdrawAmount > unlockLimitBefore, "unlock not partial"); - - vm.prank(_connector); - _vault.receiveInbound(abi.encode(_raju, withdrawAmount)); - - uint256 vaultBalAfter = _token.balanceOf(address(_vault)); - uint256 rajuBalAfter = _token.balanceOf(_raju); - uint256 pendingUnlocksAfter = _vault.pendingUnlocks(_connector, _raju); - uint256 connectorPendingUnlocksAfter = _vault.connectorPendingUnlocks( - _connector - ); - uint256 unlockLimitAfter = _vault.getCurrentUnlockLimit(_connector); - - assertEq( - vaultBalAfter, - vaultBalBefore - unlockLimitBefore, - "vault balance sus" - ); - assertEq( - rajuBalAfter, - rajuBalBefore + unlockLimitBefore, - "raju balance sus" - ); - assertEq( - pendingUnlocksAfter, - pendingUnlocksBefore + withdrawAmount - unlockLimitBefore, - "pending unlocks sus" - ); - assertEq( - connectorPendingUnlocksAfter, - connectorPendingUnlocksBefore + withdrawAmount - unlockLimitBefore, - "total pending amount sus" - ); - assertEq(unlockLimitAfter, 0, "unlock limit sus"); - } - - function testPartUnlockLimitReplenish() external { - _setLimits(); - uint256 usedLimit = 20 ether; - uint256 time = 10; - deal(address(_token), address(_vault), usedLimit); - vm.prank(_connector); - _vault.receiveInbound(abi.encode(_raju, usedLimit)); - - uint256 unlockLimitBefore = _vault.getCurrentUnlockLimit(_connector); - - assertTrue(unlockLimitBefore < _unlockMaxLimit, "full limit avail"); - assertTrue( - unlockLimitBefore + time * _unlockRate < _unlockMaxLimit, - "too much time" - ); - - skip(time); - - uint256 unlockLimitAfter = _vault.getCurrentUnlockLimit(_connector); - assertEq( - unlockLimitAfter, - unlockLimitBefore + time * _unlockRate, - "unlock limit sus" - ); - } - - function testFullUnlockLimitReplenish() external { - _setLimits(); - uint256 usedLimit = 20 ether; - uint256 time = 100; - deal(address(_token), address(_vault), usedLimit); - vm.prank(_connector); - _vault.receiveInbound(abi.encode(_raju, usedLimit)); - - uint256 unlockLimitBefore = _vault.getCurrentUnlockLimit(_connector); - - assertTrue(unlockLimitBefore < _unlockMaxLimit, "full limit avail"); - assertTrue( - unlockLimitBefore + time * _unlockRate > _unlockMaxLimit, - "not enough time" - ); - - skip(time); - - uint256 unlockLimitAfter = _vault.getCurrentUnlockLimit(_connector); - assertEq(unlockLimitAfter, _unlockMaxLimit, "unlock limit sus"); - } - - function testUnlockPendingConnectorUnavail() external { - _setLimits(); - uint256 withdrawAmount = 2 ether; - deal(address(_token), address(_vault), withdrawAmount); - - vm.expectRevert(Vault.ConnectorUnavailable.selector); - _vault.unlockPendingFor(_raju, _wrongConnector); - } - - function testFullConsumeUnlockPending() external { - _setLimits(); - uint256 withdrawAmount = 120 ether; - uint256 time = 200; - deal(address(_token), address(_vault), withdrawAmount); - - vm.prank(_connector); - _vault.receiveInbound(abi.encode(_raju, withdrawAmount)); - - uint256 vaultBalBefore = _token.balanceOf(address(_vault)); - uint256 rajuBalBefore = _token.balanceOf(_raju); - uint256 pendingUnlocksBefore = _vault.pendingUnlocks(_connector, _raju); - uint256 connectorPendingUnlocksBefore = _vault.connectorPendingUnlocks( - _connector - ); - - assertEq( - vaultBalBefore, - withdrawAmount - _unlockMaxLimit, - "vault bal before sus" - ); - assertEq(rajuBalBefore, _unlockMaxLimit, "raju bal before sus"); - assertEq( - pendingUnlocksBefore, - withdrawAmount - _unlockMaxLimit, - "pending unlock before sus" - ); - assertEq( - connectorPendingUnlocksBefore, - withdrawAmount - _unlockMaxLimit, - "total pending unlock before sus" - ); - assertTrue( - time * _unlockRate > withdrawAmount - _unlockMaxLimit, - "not enough time" - ); - - skip(time); - _vault.unlockPendingFor(_raju, _connector); - - uint256 vaultBalAfter = _token.balanceOf(address(_vault)); - uint256 rajuBalAfter = _token.balanceOf(_raju); - uint256 pendingUnlocksAfter = _vault.pendingUnlocks(_connector, _raju); - uint256 connectorPendingUnlocksAfter = _vault.connectorPendingUnlocks( - _connector - ); - - assertEq(vaultBalAfter, 0, "vault bal after sus"); - assertEq(rajuBalAfter, withdrawAmount, "raju bal after sus"); - assertEq(pendingUnlocksAfter, 0, "pending unlock after sus"); - assertEq( - connectorPendingUnlocksAfter, - 0, - "total pending unlock after sus" - ); - } - - function testPartConsumeUnlockPending() external { - _setLimits(); - uint256 withdrawAmount = 120 ether; - uint256 time = 5; - deal(address(_token), address(_vault), withdrawAmount); - - vm.prank(_connector); - _vault.receiveInbound(abi.encode(_raju, withdrawAmount)); - - uint256 vaultBalBefore = _token.balanceOf(address(_vault)); - uint256 rajuBalBefore = _token.balanceOf(_raju); - uint256 pendingUnlocksBefore = _vault.pendingUnlocks(_connector, _raju); - uint256 connectorPendingUnlocksBefore = _vault.connectorPendingUnlocks( - _connector - ); - uint256 newUnlock = time * _unlockRate; - - assertEq( - vaultBalBefore, - withdrawAmount - _unlockMaxLimit, - "vault bal before sus" - ); - assertEq(rajuBalBefore, _unlockMaxLimit, "raju bal before sus"); - assertEq( - pendingUnlocksBefore, - withdrawAmount - _unlockMaxLimit, - "pending unlock before sus" - ); - assertEq( - connectorPendingUnlocksBefore, - withdrawAmount - _unlockMaxLimit, - "total pending unlock before sus" - ); - assertTrue(withdrawAmount - _unlockMaxLimit > 0, "what to unlock?"); - - assertTrue( - newUnlock < withdrawAmount - _unlockMaxLimit, - "too much time" - ); - - skip(time); - _vault.unlockPendingFor(_raju, _connector); - - uint256 vaultBalAfter = _token.balanceOf(address(_vault)); - uint256 rajuBalAfter = _token.balanceOf(_raju); - uint256 pendingUnlocksAfter = _vault.pendingUnlocks(_connector, _raju); - uint256 connectorPendingUnlocksAfter = _vault.connectorPendingUnlocks( - _connector - ); - - assertEq( - vaultBalAfter, - withdrawAmount - _unlockMaxLimit - newUnlock, - "vault bal after sus" - ); - assertEq( - rajuBalAfter, - _unlockMaxLimit + newUnlock, - "raju bal after sus" - ); - assertEq( - pendingUnlocksAfter, - withdrawAmount - _unlockMaxLimit - newUnlock, - "pending unlock after sus" - ); - assertEq( - connectorPendingUnlocksAfter, - withdrawAmount - _unlockMaxLimit - newUnlock, - "total pending unlock after sus" - ); - } -} diff --git a/test/helper/utils.ts b/test/helper/utils.ts new file mode 100644 index 0000000..38b4526 --- /dev/null +++ b/test/helper/utils.ts @@ -0,0 +1,111 @@ +import { + AaveStrategy, + ETHAaveStrategy, + MintableERC20, + MockAAVE, + MockLido, + MockWstETH, + XERC20, + XERC20Factory, + XERC20Lockbox, +} from "../../typechain-types"; +import { + deployAAVEStrategy, + deployAAVEStrategyImpl, + deployETHAAVEStrategy, + deployFactory, + deployMintableERC20, + deployMOCKAAVE, + deployMOCKLICO, + deployMOCKWSTETH, +} from "../../script/helpers/deployment"; +import { ZEROADDRESS } from "../../script/helpers/constants"; + +const hre = require("hardhat"); + +export const MAX_UINT_AMOUNT = + "115792089237316195423570985008687907853269984665640564039457584007913129639935"; + +export interface TestDeploymentEnv { + erc20: MintableERC20; + xERC20: XERC20; + lockBox: XERC20Lockbox; + ethXERC20: XERC20; + ethLockBox: XERC20Lockbox; + aaveStrategy: AaveStrategy; + ethStrategy: ETHAaveStrategy; + aave: MockAAVE; + lido: MockLido; +} + +export const deployFixture = async function () { + const [, user1] = await hre.ethers.getSigners(); + + const erc20: MintableERC20 = await deployMintableERC20(); + const tokenAddress = await erc20.getAddress(); + const aave: MockAAVE = await deployMOCKAAVE(); + const lido: MockLido = await deployMOCKLICO(); + const wstETH: MockWstETH = await deployMOCKWSTETH(await lido.getAddress()); + + const factory: XERC20Factory = await deployFactory(); + const lockBoxFactory = await hre.ethers.getContractFactory("XERC20Lockbox"); + const xERC20Factory = await hre.ethers.getContractFactory("XERC20"); + + await factory.deployToken( + tokenAddress, + false, + "Test Token Name", + "Test Token symbol", + [], + [], + [] + ); + const testLockBoxAddress = await factory.lockboxRegistry(tokenAddress); + const lockBox = lockBoxFactory.attach(testLockBoxAddress); + let xERC20Address = await lockBox.XERC20(); + const xERC20: XERC20 = xERC20Factory.attach(xERC20Address); + + await factory.deployToken( + ZEROADDRESS, + true, + "ETHXERC20", + "ETHXERC20", + [], + [], + [] + ); + const ethLockBoxAddress = await factory.lockboxRegistry(ZEROADDRESS); + const ethLockBox = lockBoxFactory.attach(ethLockBoxAddress); + xERC20Address = await ethLockBox.XERC20(); + const ethXERC20: XERC20 = xERC20Factory.attach(xERC20Address); + + const aaveStrategyImpl = await deployAAVEStrategyImpl(); + const aaveStrategy = await deployAAVEStrategy( + aaveStrategyImpl, + await aave.getAddress(), + testLockBoxAddress, + await user1.getAddress() + ); + + const ethStrategy = await deployETHAAVEStrategy( + await wstETH.getAddress(), + await aave.getAddress(), + ethLockBoxAddress, + await user1.getAddress() + ); + + await lockBox.setStrategy(await aaveStrategy.getAddress()); + await ethLockBox.setStrategy(await ethStrategy.getAddress()); + + return { + erc20: erc20, + xERC20: xERC20, + lockBox: lockBox, + ethXERC20: ethXERC20, + ethLockBox: ethLockBox, + aaveStrategy: aaveStrategy, + ethStrategy: ethStrategy, + aave: aave, + lido: lido, + } as TestDeploymentEnv; +}; diff --git a/test/lockbox_test.ts b/test/lockbox_test.ts new file mode 100644 index 0000000..7b23ae4 --- /dev/null +++ b/test/lockbox_test.ts @@ -0,0 +1,123 @@ +import { + deployFixture, + MAX_UINT_AMOUNT, + TestDeploymentEnv, +} from "./helper/utils"; +import { parseEther } from "ethers"; +import { ZEROADDRESS } from "../script/helpers/constants"; +const hre = require("hardhat"); +const { expect } = require("chai"); +const { + loadFixture, +} = require("@nomicfoundation/hardhat-toolbox/network-helpers"); + +describe("XERC20 TEST", function () { + it("ERC20 with AAVE strategy operation function as expected", async function () { + const [owner, user] = await hre.ethers.getSigners(); + const testENV: TestDeploymentEnv = await loadFixture(deployFixture); + + const testAmount = parseEther("1000"); + const halfAmount = parseEther("500"); + await testENV.erc20.connect(user)["mint(uint256)"](testAmount); + + await testENV.erc20 + .connect(user) + .approve(await testENV.lockBox.getAddress(), MAX_UINT_AMOUNT); + + await testENV.lockBox.connect(user).deposit(testAmount); + + expect(await testENV.xERC20.balanceOf(user.address)).to.be.eq(testAmount); + + expect( + await testENV.erc20.balanceOf(await testENV.lockBox.getAddress()) + ).to.be.eq(testAmount); + await testENV.lockBox.connect(owner).strategyYield(testAmount); + expect( + await testENV.erc20.balanceOf(await testENV.lockBox.getAddress()) + ).to.be.eq(0); + await testENV.lockBox.connect(owner).strategyWithdraw(testAmount); + expect( + await testENV.erc20.balanceOf(await testENV.lockBox.getAddress()) + ).to.be.eq(testAmount); + + await testENV.lockBox.connect(owner).setExchangeRate(parseEther("2")); + + await testENV.xERC20 + .connect(user) + .approve(await testENV.lockBox.getAddress(), MAX_UINT_AMOUNT); + await testENV.lockBox.connect(user).withdraw(testAmount); + expect( + await testENV.erc20.balanceOf(await testENV.lockBox.getAddress()) + ).to.be.eq(0); + expect(await testENV.xERC20.balanceOf(user.address)).to.be.eq(halfAmount); + }); + + it("ETH with ETH AAVE strategy operation function as expected", async function () { + const [owner, user] = await hre.ethers.getSigners(); + const testENV: TestDeploymentEnv = await loadFixture(deployFixture); + + const testAmount = parseEther("100"); + const halfAmount = parseEther("50"); + + await testENV.ethLockBox + .connect(user) + .depositGasToken({ value: testAmount }); + + const lockBoxAddr = await testENV.ethLockBox.getAddress(); + const provider = hre.ethers.provider; + expect(await provider.getBalance(lockBoxAddr)).to.be.eq(testAmount); + await testENV.ethLockBox.connect(owner).strategyYield(testAmount); + expect(await provider.getBalance(lockBoxAddr)).to.be.eq(0); + await testENV.ethLockBox.connect(owner).strategyWithdraw(testAmount); + expect(await provider.getBalance(lockBoxAddr)).to.be.eq(0); + expect(await testENV.lido.balanceOf(lockBoxAddr)).to.be.eq(0); + + //simulate offchain owner action + await testENV.ethLockBox + .connect(owner) + .rescueERC20( + await testENV.lido.getAddress(), + await owner.getAddress(), + testAmount + ); + await owner.sendTransaction({ + to: await testENV.ethLockBox.getAddress(), + value: testAmount, + }); + + await testENV.ethLockBox.connect(owner).setExchangeRate(parseEther("2")); + await testENV.ethXERC20 + .connect(user) + .approve(await testENV.ethLockBox.getAddress(), MAX_UINT_AMOUNT); + await testENV.ethLockBox.connect(user).withdraw(testAmount); + expect(await provider.getBalance(lockBoxAddr)).to.be.eq(0); + expect(await testENV.ethXERC20.balanceOf(user.address)).to.be.eq( + halfAmount + ); + }); + + it("lockbox owner privilege operation", async function () { + const [, user] = await hre.ethers.getSigners(); + const testENV: TestDeploymentEnv = await loadFixture(deployFixture); + + await expect( + testENV.lockBox.connect(user).setExchangeRate("1") + ).to.be.rejectedWith("Ownable: caller is not the owner"); + + await expect( + testENV.lockBox.connect(user).setStrategy(ZEROADDRESS) + ).to.be.rejectedWith("Ownable: caller is not the owner"); + + await expect( + testENV.lockBox.connect(user).strategyYield("1") + ).to.be.rejectedWith("Ownable: caller is not the owner"); + + await expect( + testENV.lockBox.connect(user).strategyWithdraw("1") + ).to.be.rejectedWith("Ownable: caller is not the owner"); + + await expect( + testENV.lockBox.connect(user).rescueERC20(ZEROADDRESS, ZEROADDRESS, "1") + ).to.be.rejectedWith("Ownable: caller is not the owner"); + }); +}); diff --git a/test/mocks/FiatTokenV2_1_Mintable.sol b/test/mocks/FiatTokenV2_1_Mintable.sol deleted file mode 100644 index 87d806d..0000000 --- a/test/mocks/FiatTokenV2_1_Mintable.sol +++ /dev/null @@ -1,20 +0,0 @@ -pragma solidity 0.8.19; - -import "../../contracts/superbridge/FiatTokenV2_1/IFiatTokenV2_1_Mintable.sol"; - -// this is a mock token used in tests, other projects' token to be used here -contract FiatTokenV2_1_Mintable is IFiatTokenV2_1_Mintable { - constructor( - string memory name_, - string memory symbol_, - uint8 decimals_ - ) ERC20(name_, symbol_, decimals_) {} - - function mint(address receiver_, uint256 amount_) external override { - _mint(receiver_, amount_); - } - - function burn(uint256 amount_) external override { - _burn(msg.sender, amount_); - } -} diff --git a/test/mocks/MintableToken.sol b/test/mocks/MintableToken.sol deleted file mode 100644 index 6253dbe..0000000 --- a/test/mocks/MintableToken.sol +++ /dev/null @@ -1,20 +0,0 @@ -pragma solidity 0.8.19; - -import "../../contracts/superbridge/IMintableERC20.sol"; - -// this is a mock token used in tests, other projects' token to be used here -contract MintableToken is IMintableERC20 { - constructor( - string memory name_, - string memory symbol_, - uint8 decimals_ - ) ERC20(name_, symbol_, decimals_) {} - - function mint(address receiver_, uint256 amount_) external override { - _mint(receiver_, amount_); - } - - function burn(address burner_, uint256 amount_) external override { - _burn(burner_, amount_); - } -} diff --git a/test/mocks/MockSocket.sol b/test/mocks/MockSocket.sol deleted file mode 100644 index 40c0e09..0000000 --- a/test/mocks/MockSocket.sol +++ /dev/null @@ -1,112 +0,0 @@ -// pragma solidity 0.8.13; - -// import "../../contracts/interfaces/ISocket.sol"; -// import "../../contracts/interfaces/IPlug.sol"; - -// contract MockSocket is ISocket { -// uint32 _localSlug; - -// struct PlugConfig { -// address siblingPlug; -// address inboundSwitchboard; -// address outboundSwitchboard; -// } -// // localSlug => localPlug => siblingSlug => config(inboundSwitchboard, outboundSwitchboard, siblingPlug) -// mapping(uint32 => mapping(address => mapping(uint32 => PlugConfig))) -// public plugConfigs; - -// error WrongSiblingPlug(); -// error PlugDisconnected(); - -// function chainSlug() external view override returns (uint32) { -// return _localSlug; -// } - -// function setLocalSlug(uint32 localSlug_) external { -// _localSlug = localSlug_; -// } - -// function connect( -// uint32 siblingChainSlug_, -// address siblingPlug_, -// address inboundSwitchboard_, -// address outboundSwitchboard_ -// ) external override { -// PlugConfig storage plugConfig = plugConfigs[_localSlug][msg.sender][ -// siblingChainSlug_ -// ]; - -// plugConfig.siblingPlug = siblingPlug_; -// plugConfig.inboundSwitchboard = inboundSwitchboard_; -// plugConfig.outboundSwitchboard = outboundSwitchboard_; -// } - -// function outbound( -// uint32 siblingChainSlug_, -// uint256 minMsgGasLimit_, -// bytes32, -// bytes32, -// bytes calldata payload_ -// ) external payable override returns (bytes32) { -// PlugConfig memory srcPlugConfig = plugConfigs[_localSlug][msg.sender][ -// siblingChainSlug_ -// ]; - -// if (srcPlugConfig.siblingPlug == address(0)) revert PlugDisconnected(); - -// PlugConfig memory dstPlugConfig = plugConfigs[siblingChainSlug_][ -// srcPlugConfig.siblingPlug -// ][_localSlug]; - -// if (dstPlugConfig.siblingPlug != msg.sender) revert WrongSiblingPlug(); -// IPlug(srcPlugConfig.siblingPlug).inbound{gas: minMsgGasLimit_}( -// _localSlug, -// payload_ -// ); - -// return bytes32(0); -// } - -// // ignore ISocket function -// function execute( -// ISocket.ExecutionDetails calldata executionDetails_, -// ISocket.MessageDetails calldata messageDetails_ -// ) external payable override {} - -// // ignore ISocket function -// function getMinFees( -// uint256 minMsgGasLimit_, -// uint256 payloadSize_, -// bytes32 executionParams_, -// bytes32 transmissionParams_, -// uint32 siblingChainSlug_, -// address plug_ -// ) external view override returns (uint256 totalFees) {} - -// function getPlugConfig( -// address plugAddress_, -// uint32 siblingChainSlug_ -// ) -// external -// view -// returns ( -// address siblingPlug, -// address inboundSwitchboard__, -// address outboundSwitchboard__, -// address capacitor__, -// address decapacitor__ -// ) -// { -// PlugConfig memory srcPlugConfig = plugConfigs[_localSlug][plugAddress_][ -// siblingChainSlug_ -// ]; - -// return ( -// srcPlugConfig.siblingPlug, -// address(srcPlugConfig.inboundSwitchboard), -// address(srcPlugConfig.outboundSwitchboard), -// address(0), -// address(0) -// ); -// } -// } diff --git a/test/mocks/NonMintableToken.sol b/test/mocks/NonMintableToken.sol deleted file mode 100644 index fcb121a..0000000 --- a/test/mocks/NonMintableToken.sol +++ /dev/null @@ -1,15 +0,0 @@ -pragma solidity 0.8.19; - -import "solmate/tokens/ERC20.sol"; - -contract NonMintableToken is ERC20 { - // this is a mock token used in tests, other projects' token to be used here - constructor( - string memory name_, - string memory symbol_, - uint8 decimals_, - uint256 totalSupply_ - ) ERC20(name_, symbol_, decimals_) { - _mint(msg.sender, totalSupply_); - } -} diff --git a/yarn.lock b/yarn.lock index 4a5664a..0ee774d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,28 +2,33 @@ # yarn lockfile v1 +"@adraffy/ens-normalize@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7" + integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q== + "@chainsafe/as-sha256@^0.3.1": version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + resolved "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz" integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== "@chainsafe/persistent-merkle-tree@^0.4.2": version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + resolved "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz" integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== dependencies: "@chainsafe/as-sha256" "^0.3.1" "@chainsafe/persistent-merkle-tree@^0.5.0": version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + resolved "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz" integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== dependencies: "@chainsafe/as-sha256" "^0.3.1" "@chainsafe/ssz@^0.10.0": version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + resolved "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz" integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== dependencies: "@chainsafe/as-sha256" "^0.3.1" @@ -31,7 +36,7 @@ "@chainsafe/ssz@^0.9.2": version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + resolved "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz" integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== dependencies: "@chainsafe/as-sha256" "^0.3.1" @@ -40,14 +45,28 @@ "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.7.0": +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== dependencies: "@ethersproject/address" "^5.7.0" @@ -62,7 +81,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== dependencies: "@ethersproject/bignumber" "^5.7.0" @@ -75,7 +94,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== dependencies: "@ethersproject/abstract-provider" "^5.7.0" @@ -86,7 +105,7 @@ "@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== dependencies: "@ethersproject/bignumber" "^5.7.0" @@ -97,14 +116,14 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^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" + resolved "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz" integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -112,7 +131,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -121,21 +140,21 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^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" + resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0", "@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" + resolved "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz" integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== dependencies: "@ethersproject/abi" "^5.7.0" @@ -151,7 +170,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== dependencies: "@ethersproject/abstract-signer" "^5.7.0" @@ -166,7 +185,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz" integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== dependencies: "@ethersproject/abstract-signer" "^5.7.0" @@ -184,7 +203,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz" integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== dependencies: "@ethersproject/abstract-signer" "^5.7.0" @@ -203,7 +222,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -211,19 +230,19 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== "@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" + resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^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" + resolved "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz" integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -231,14 +250,14 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" "@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + resolved "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== dependencies: "@ethersproject/abstract-provider" "^5.7.0" @@ -264,7 +283,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz" integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -272,7 +291,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -280,7 +299,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz" integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -289,7 +308,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -299,9 +318,9 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": +"@ethersproject/solidity@5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + resolved "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz" integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== dependencies: "@ethersproject/bignumber" "^5.7.0" @@ -313,7 +332,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -322,7 +341,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== dependencies: "@ethersproject/address" "^5.7.0" @@ -337,16 +356,16 @@ "@ethersproject/units@5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + resolved "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz" integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== dependencies: "@ethersproject/bignumber" "^5.7.0" "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.7.0": +"@ethersproject/wallet@5.7.0": version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + resolved "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz" integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== dependencies: "@ethersproject/abstract-provider" "^5.7.0" @@ -367,7 +386,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== dependencies: "@ethersproject/base64" "^5.7.0" @@ -378,7 +397,7 @@ "@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" + resolved "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz" integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== dependencies: "@ethersproject/bytes" "^5.7.0" @@ -389,17 +408,17 @@ "@jridgewell/resolve-uri@^3.0.3": version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -407,7 +426,7 @@ "@metamask/eth-sig-util@^4.0.0": version "4.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + resolved "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz" integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== dependencies: ethereumjs-abi "^0.6.8" @@ -416,41 +435,91 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" +"@noble/curves@1.1.0", "@noble/curves@~1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" + integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== + 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" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz" integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== +"@noble/hashes@1.3.1": + version "1.3.1" + 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/hashes@~1.3.0", "@noble/hashes@~1.3.1": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz" integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== -"@nomicfoundation/ethereumjs-block@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz#6f89664f55febbd723195b6d0974773d29ee133d" - integrity sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" +"@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/ethereumjs-block@5.0.2": + version "5.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz" + integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" ethereum-cryptography "0.1.3" ethers "^5.7.1" -"@nomicfoundation/ethereumjs-blockchain@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz#80e0bd3535bfeb9baa29836b6f25123dab06a726" - integrity sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-ethash" "3.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" +"@nomicfoundation/ethereumjs-blockchain@7.0.2": + version "7.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz" + integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-ethash" "3.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" abstract-level "^1.0.3" debug "^4.3.3" ethereum-cryptography "0.1.3" @@ -458,108 +527,153 @@ lru-cache "^5.1.1" memory-level "^1.0.0" -"@nomicfoundation/ethereumjs-common@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz#4702d82df35b07b5407583b54a45bf728e46a2f0" - integrity sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g== +"@nomicfoundation/ethereumjs-common@4.0.2": + version "4.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz" + integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-util" "9.0.2" crc-32 "^1.2.0" -"@nomicfoundation/ethereumjs-ethash@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz#65ca494d53e71e8415c9a49ef48bc921c538fc41" - integrity sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w== +"@nomicfoundation/ethereumjs-ethash@3.0.2": + version "3.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz" + integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" abstract-level "^1.0.3" bigint-crypto-utils "^3.0.23" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-evm@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz#f35681e203363f69ce2b3d3bf9f44d4e883ca1f1" - integrity sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ== +"@nomicfoundation/ethereumjs-evm@2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz" + integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== dependencies: "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" debug "^4.3.3" ethereum-cryptography "0.1.3" mcl-wasm "^0.7.1" rustbn.js "~0.2.0" -"@nomicfoundation/ethereumjs-rlp@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz#0b30c1cf77d125d390408e391c4bb5291ef43c28" - integrity sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ== +"@nomicfoundation/ethereumjs-rlp@5.0.2": + version "5.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz" + integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== -"@nomicfoundation/ethereumjs-statemanager@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz#8824a97938db4471911e2d2f140f79195def5935" - integrity sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ== +"@nomicfoundation/ethereumjs-statemanager@2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz" + integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" debug "^4.3.3" ethereum-cryptography "0.1.3" ethers "^5.7.1" js-sdsl "^4.1.4" -"@nomicfoundation/ethereumjs-trie@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz#662c55f6b50659fd4b22ea9f806a7401cafb7717" - integrity sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA== +"@nomicfoundation/ethereumjs-trie@6.0.2": + version "6.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz" + integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" "@types/readable-stream" "^2.3.13" ethereum-cryptography "0.1.3" readable-stream "^3.6.0" -"@nomicfoundation/ethereumjs-tx@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz#7629dc2036b4a33c34e9f0a592b43227ef4f0c7d" - integrity sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w== +"@nomicfoundation/ethereumjs-tx@5.0.2": + version "5.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz" + integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== dependencies: "@chainsafe/ssz" "^0.9.2" "@ethersproject/providers" "^5.7.2" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz#530cda8bae33f8b5020a8f199ed1d0a2ce48ec89" - integrity sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA== +"@nomicfoundation/ethereumjs-util@9.0.2": + version "9.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz" + integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== dependencies: "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-vm@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz#7d035e0993bcad10716c8b36e61dfb87fa3ca05f" - integrity sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-blockchain" "7.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-evm" "2.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-statemanager" "2.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" +"@nomicfoundation/ethereumjs-vm@7.0.2": + version "7.0.2" + resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz" + integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" debug "^4.3.3" ethereum-cryptography "0.1.3" mcl-wasm "^0.7.1" rustbn.js "~0.2.0" +"@nomicfoundation/hardhat-chai-matchers@^2.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.3.tgz#f4c074d39b74bd283c99e2c2bf143e3cef51ae18" + integrity sha512-A40s7EAK4Acr8UP1Yudgi9GGD9Cca/K3LHt3DzmRIje14lBfHtg9atGQ7qK56vdPcTwKmeaGn30FzxMUfPGEMw== + dependencies: + "@types/chai-as-promised" "^7.1.3" + chai-as-promised "^7.1.1" + deep-eql "^4.0.1" + ordinal "^1.0.3" + +"@nomicfoundation/hardhat-ethers@^3.0.2": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz#0422c2123dec7c42e7fb2be8e1691f1d9708db56" + integrity sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw== + dependencies: + debug "^4.1.1" + lodash.isequal "^4.5.0" + +"@nomicfoundation/hardhat-network-helpers@^1.0.8": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.10.tgz#c61042ceb104fdd6c10017859fdef6529c1d6585" + integrity sha512-R35/BMBlx7tWN5V6d/8/19QCwEmIdbnA4ZrsuXgvs8i2qFx5i7h6mH5pBS4Pwi4WigLH+upl6faYusrNPuzMrQ== + dependencies: + ethereumjs-util "^7.1.4" + +"@nomicfoundation/hardhat-toolbox@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-3.0.0.tgz#83e2c28a745aa4eb1236072166367b0de68b4c76" + integrity sha512-MsteDXd0UagMksqm9KvcFG6gNKYNa3GGNCy73iQ6bEasEgg2v8Qjl6XA5hjs8o5UD5A3153B6W2BIVJ8SxYUtA== + +"@nomicfoundation/hardhat-verify@^1.0.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-1.1.1.tgz#6a433d777ce0172d1f0edf7f2d3e1df14b3ecfc1" + integrity sha512-9QsTYD7pcZaQFEA3tBb/D/oCStYDiEVDN7Dxeo/4SCyHRSm86APypxxdOMEPlGmXsAvd+p1j/dTODcpxb8aztA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + chalk "^2.4.2" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" @@ -567,7 +681,7 @@ "@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz" integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== "@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": @@ -612,7 +726,7 @@ "@nomicfoundation/solidity-analyzer@^0.1.0": version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz" integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== optionalDependencies: "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" @@ -626,52 +740,58 @@ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" -"@nomiclabs/hardhat-ethers@^2.1.1": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" - integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== +"@openzeppelin/contracts-upgradeable@^4.9.5": + version "4.9.5" + resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.5.tgz" + integrity sha512-f7L1//4sLlflAN7fVzJLoRedrf5Na3Oal5PZfIq55NFcVZ90EpV1q5xOvL4lFvg3MNICSDr2hH0JUBxwlxcoPg== -"@nomiclabs/hardhat-etherscan@^3.1.0": - version "3.1.7" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz#72e3d5bd5d0ceb695e097a7f6f5ff6fcbf062b9a" - integrity sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@ethersproject/address" "^5.0.2" - cbor "^8.1.0" - chalk "^2.4.2" - debug "^4.1.1" - fs-extra "^7.0.1" - lodash "^4.17.11" - semver "^6.3.0" - table "^6.8.0" - undici "^5.14.0" +"@openzeppelin/contracts@^4.9.5": + version "4.9.5" + resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.5.tgz" + integrity sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg== "@scure/base@~1.1.0": version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== "@scure/bip32@1.1.5": version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz" integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== dependencies: "@noble/hashes" "~1.2.0" "@noble/secp256k1" "~1.7.0" "@scure/base" "~1.1.0" +"@scure/bip32@1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" + integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== + dependencies: + "@noble/curves" "~1.1.0" + "@noble/hashes" "~1.3.1" + "@scure/base" "~1.1.0" + "@scure/bip39@1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz" integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== dependencies: "@noble/hashes" "~1.2.0" "@scure/base" "~1.1.0" +"@scure/bip39@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" + integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg== + dependencies: + "@noble/hashes" "~1.3.0" + "@scure/base" "~1.1.0" + "@sentry/core@5.30.0": version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + resolved "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== dependencies: "@sentry/hub" "5.30.0" @@ -682,7 +802,7 @@ "@sentry/hub@5.30.0": version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== dependencies: "@sentry/types" "5.30.0" @@ -691,7 +811,7 @@ "@sentry/minimal@5.30.0": version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== dependencies: "@sentry/hub" "5.30.0" @@ -700,7 +820,7 @@ "@sentry/node@^5.18.1": version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + resolved "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== dependencies: "@sentry/core" "5.30.0" @@ -715,7 +835,7 @@ "@sentry/tracing@5.30.0": version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== dependencies: "@sentry/hub" "5.30.0" @@ -726,122 +846,169 @@ "@sentry/types@5.30.0": version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + resolved "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== "@sentry/utils@5.30.0": version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== dependencies: "@sentry/types" "5.30.0" tslib "^1.9.3" -"@socket.tech/dl-core@2.4.15-test.1": - version "2.4.15-test.1" - resolved "https://registry.yarnpkg.com/@socket.tech/dl-core/-/dl-core-2.4.15-test.1.tgz#9a8b5a453287c25292ba0f8d12bf95fd5b644376" - integrity sha512-+6zBi3RgZG5nkmj6VrI/x60GBCBOjDNnH2x6MXZCnqHVMVpIR5fB9KWIoDRJZ8JjM/8WlqFiytynK+9yzbFQPQ== +"@solidity-parser/parser@^0.14.0": + version "0.14.5" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== dependencies: - axios "^1.3.6" - prompts "^2.4.2" - yargs "^17.7.1" + antlr4ts "^0.5.0-alpha.4" "@solidity-parser/parser@^0.16.0": version "0.16.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c" + resolved "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.1.tgz" integrity sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw== dependencies: antlr4ts "^0.5.0-alpha.4" "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@typechain/ethers-v5@^10.0.0": - 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== +"@typechain/ethers-v6@^0.4.0": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v6/-/ethers-v6-0.4.3.tgz#badd99f88d5a1f1a2f42590f298e20cc62618e59" + integrity sha512-TrxBsyb4ryhaY9keP6RzhFCviWYApcLCIRMPyWaKp2cZZrfaM3QBoxXTnw/eO4+DAY3l+8O0brNW0WgeQeOiDA== dependencies: lodash "^4.17.15" ts-essentials "^7.0.1" -"@typechain/hardhat@^6.0.0": - version "6.1.6" - resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-6.1.6.tgz#1a749eb35e5054c80df531cf440819cb347c62ea" - integrity sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA== +"@typechain/hardhat@^8.0.0": + version "8.0.3" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-8.0.3.tgz#a114825f130405bbb8e535314003733b7ce3f91c" + integrity sha512-MytSmJJn+gs7Mqrpt/gWkTCOpOQ6ZDfRrRT2gtZL0rfGe4QrU4x9ZdW15fFbVM/XTa+5EsKiOMYXhRABibNeng== dependencies: fs-extra "^9.1.0" "@types/bn.js@^4.11.3": version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== dependencies: "@types/node" "*" "@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" + resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== dependencies: "@types/node" "*" +"@types/chai-as-promised@^7.1.3": + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz#f2b3d82d53c59626b5d6bbc087667ccb4b677fe9" + integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw== + dependencies: + "@types/chai" "*" + +"@types/chai@*": + version "4.3.11" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c" + integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== + +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + "@types/lru-cache@^5.1.0": version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + "@types/mocha@^9.1.0": version "9.1.1" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + resolved "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz" integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== -"@types/node@*": - version "20.4.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.9.tgz#c7164e0f8d3f12dfae336af0b1f7fdec8c6b204f" - integrity sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ== - -"@types/node@^18.11.9": +"@types/node@*", "@types/node@^18.11.9": version "18.17.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.4.tgz#bf8ae9875528929cc9930dc3f066cd0481fe1231" + resolved "https://registry.npmjs.org/@types/node/-/node-18.17.4.tgz" integrity sha512-ATL4WLgr7/W40+Sp1WnNTSKbgVn6Pvhc/2RHAdt8fl6NsQyp4oPCi2eKcGOvA494bwf1K/W6nGgZ9TwDqvpjdw== +"@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@^10.0.3": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + "@types/pbkdf2@^3.0.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" + resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz" integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== dependencies: "@types/node" "*" "@types/prettier@^2.1.1": version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz" integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== -"@types/qs@^6.9.7": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== +"@types/qs@^6.2.31": + version "6.9.11" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" + integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== "@types/readable-stream@^2.3.13": version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + resolved "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz" integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== dependencies: "@types/node" "*" @@ -849,26 +1016,36 @@ "@types/secp256k1@^4.0.1": version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + resolved "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== dependencies: "@types/node" "*" "@types/yargs-parser@*": version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.22": version "17.0.24" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz" integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== dependencies: "@types/yargs-parser" "*" +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== + abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + resolved "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz" integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== dependencies: buffer "^6.0.3" @@ -881,34 +1058,44 @@ abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: acorn-walk@^8.1.1: version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.4.1: version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +address@^1.0.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + adm-zip@^0.4.16: version "0.4.16" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== aes-js@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + resolved "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz" 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== + agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" @@ -924,50 +1111,60 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + ansi-colors@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-colors@^4.1.0, ansi-colors@^4.1.1: +ansi-colors@^4.1.1: version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.3.0: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" antlr4ts@^0.5.0-alpha.4: version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + resolved "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -975,29 +1172,61 @@ anymatch@~3.1.2: arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-back@^3.0.1, array-back@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + resolved "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== array-back@^4.0.1, array-back@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + resolved "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== +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-uniq@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async@1.x: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1005,75 +1234,73 @@ asynckit@^0.4.0: at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -axios@^0.21.1: - version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -axios@^1.3.6: - version "1.4.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" - integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== +axios@^1.5.1: + version "1.6.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8" + integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.4" 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" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2: version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== dependencies: safe-buffer "^5.0.1" base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== bech32@1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== bigint-crypto-utils@^3.0.23: version "3.3.0" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + resolved "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz" integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== blakejs@^1.1.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1081,26 +1308,26 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" -braces@~3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" brorand@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browser-level@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + resolved "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz" integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== dependencies: abstract-level "^1.0.2" @@ -1110,12 +1337,12 @@ browser-level@^1.0.1: browser-stdout@1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== browserify-aes@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== dependencies: buffer-xor "^1.0.3" @@ -1127,14 +1354,14 @@ browserify-aes@^1.2.0: bs58@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== dependencies: base-x "^3.0.2" bs58check@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== dependencies: bs58 "^4.0.0" @@ -1143,17 +1370,17 @@ bs58check@^2.1.2: buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-xor@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -1161,37 +1388,43 @@ buffer@^6.0.3: busboy@^1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== dependencies: streamsearch "^1.1.0" bytes@3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" camelcase@^6.0.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== case@^1.6.3: version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + resolved "https://registry.npmjs.org/case/-/case-1.6.3.tgz" integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + catering@^2.1.0, catering@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + resolved "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== cbor@^8.1.0: @@ -1201,26 +1434,58 @@ cbor@^8.1.0: dependencies: nofilter "^3.1.0" +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai@^4.2.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.0.8" + chalk@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.1.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2, check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@3.5.3, chokidar@^3.4.0: version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -1235,12 +1500,12 @@ chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: ci-info@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" @@ -1248,7 +1513,7 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: classic-level@^1.2.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" + resolved "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz" integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== dependencies: abstract-level "^1.0.2" @@ -1259,52 +1524,58 @@ classic-level@^1.2.0: clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + cliui@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.8: +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, 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== @@ -1313,12 +1584,12 @@ combined-stream@^1.0.8: command-exists@^1.2.8: version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== command-line-args@^5.1.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + resolved "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== dependencies: array-back "^3.1.0" @@ -1328,7 +1599,7 @@ command-line-args@^5.1.1: command-line-usage@^6.1.0: version "6.1.3" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + resolved "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz" integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== dependencies: array-back "^4.0.2" @@ -1338,15 +1609,15 @@ command-line-usage@^6.1.0: commander@3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + resolved "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concat-stream@^1.4.7: +concat-stream@^1.4.7, concat-stream@^1.6.0, concat-stream@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -1358,22 +1629,22 @@ concat-stream@^1.4.7: cookie@^0.4.1: version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== core-util-is@~1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== crc-32@^1.2.0: version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" 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" + resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== dependencies: cipher-base "^1.0.1" @@ -1384,7 +1655,7 @@ create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: create-hmac@^1.1.4, create-hmac@^1.1.7: version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== dependencies: cipher-base "^1.0.3" @@ -1396,73 +1667,116 @@ create-hmac@^1.1.4, create-hmac@^1.1.7: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^5.0.1: version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3: +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +death@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== + +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decamelize@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== +deep-eql@^4.0.1, deep-eql@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + deep-extend@~0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + 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== -delete-empty@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/delete-empty/-/delete-empty-3.0.0.tgz#f8040f2669f26fa7060bc2304e9859c593b685e8" - integrity sha512-ZUyiwo76W+DYnKsL3Kim6M/UOavPdBJgDYWOmuQhYaZvJH0AXAHbUNyEDtRbBra8wqqr686+63/0azfEk1ebUQ== - dependencies: - ansi-colors "^4.1.0" - minimist "^1.2.0" - path-starts-with "^2.0.0" - rimraf "^2.6.2" - depd@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +detect-port@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== + dependencies: + address "^1.0.1" + debug "4" + diff@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +difflib@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + +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" + dotenv@^16.0.3: version "16.3.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: bn.js "^4.11.9" @@ -1475,17 +1789,12 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4: emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encode-utf8@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" - integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== - -enquirer@^2.3.0, enquirer@^2.3.6: +enquirer@^2.3.0: version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz" integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" @@ -1493,27 +1802,85 @@ enquirer@^2.3.0, enquirer@^2.3.6: env-paths@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + +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== + +eth-gas-reporter@^0.2.25: + version "0.2.27" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e" + integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== + dependencies: + "@solidity-parser/parser" "^0.14.0" + axios "^1.5.1" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^5.7.2" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^10.2.0" + req-cwd "^2.0.0" + sha1 "^1.1.1" + sync-request "^6.0.0" + +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== dependencies: "@types/pbkdf2" "^3.0.0" @@ -1534,7 +1901,7 @@ ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: ethereum-cryptography@^1.0.3: version "1.2.0" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz" integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== dependencies: "@noble/hashes" "1.2.0" @@ -1542,9 +1909,19 @@ ethereum-cryptography@^1.0.3: "@scure/bip32" "1.1.5" "@scure/bip39" "1.1.1" +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" + integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== + dependencies: + "@noble/curves" "1.1.0" + "@noble/hashes" "1.3.1" + "@scure/bip32" "1.3.1" + "@scure/bip39" "1.2.1" + ethereumjs-abi@^0.6.8: version "0.6.8" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + resolved "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== dependencies: bn.js "^4.11.8" @@ -1552,7 +1929,7 @@ ethereumjs-abi@^0.6.8: ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== dependencies: "@types/bn.js" "^4.11.3" @@ -1563,7 +1940,18 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethers@^5.5.3, ethers@^5.6.6, ethers@^5.7.1: +ethereumjs-util@^7.1.4: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethers@^5.7.1, ethers@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -1599,9 +1987,30 @@ ethers@^5.5.3, ethers@^5.6.6, ethers@^5.7.1: "@ethersproject/web" "5.7.1" "@ethersproject/wordlists" "5.7.0" +ethers@^6.6.0: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.10.0.tgz#20f3c63c60d59a993f8090ad423d8a3854b3b1cd" + integrity sha512-nMNwYHzs6V1FR3Y4cdfxSQmNgZsRj1RiTU25JwvnJLmyzw9z3SKxNc2XKDuiXXo/v9ds5Mp9m6HBabgYQQ26tA== + dependencies: + "@adraffy/ens-normalize" "1.10.0" + "@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-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + ethjs-util@0.1.6, ethjs-util@^0.1.6: version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + resolved "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== dependencies: is-hex-prefixed "1.0.0" @@ -1609,7 +2018,7 @@ ethjs-util@0.1.6, ethjs-util@^0.1.6: evp_bytestokey@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" @@ -1620,23 +2029,46 @@ 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.0.3: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + 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" + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + 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" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-replace@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + resolved "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== dependencies: array-back "^3.0.1" find-up@5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -1644,27 +2076,29 @@ find-up@5.0.0: find-up@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" flat@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -fmix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" - integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== - dependencies: - imul "^1.0.0" +follow-redirects@^1.12.1, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== -follow-redirects@^1.12.1, follow-redirects@^1.14.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== +form-data@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" form-data@^4.0.0: version "4.0.0" @@ -1677,17 +2111,17 @@ form-data@^4.0.0: fp-ts@1.19.3: version "1.19.3" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== fp-ts@^1.0.0: version "1.19.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== fs-extra@^0.30.0: version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== dependencies: graceful-fs "^4.1.2" @@ -1696,27 +2130,27 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - fs-extra@^7.0.0, fs-extra@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^9.1.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" @@ -1724,51 +2158,74 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 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" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +ghost-testrpc@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" + integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== + dependencies: + chalk "^2.4.2" + node-emoji "^1.10.0" -glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@7.1.7: version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" @@ -1778,9 +2235,9 @@ glob@7.1.7: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0: +glob@7.2.0, glob@^7.1.3: version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" @@ -1790,7 +2247,18 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3: +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1802,78 +2270,86 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, 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== +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" -hardhat-abi-exporter@^2.10.1: - version "2.10.1" - resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.10.1.tgz#b14884e233c73fe3f43360f014ad7fd6df4b6d25" - integrity sha512-X8GRxUTtebMAd2k4fcPyVnCdPa6dYK4lBsrwzKP5yiSq4i+WadWPIumaLfce53TUf/o2TnLpLOduyO1ylE2NHQ== +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: - "@ethersproject/abi" "^5.5.0" - delete-empty "^3.0.0" + get-intrinsic "^1.1.3" -hardhat-change-network@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/hardhat-change-network/-/hardhat-change-network-0.0.7.tgz#9f9b7943ff966515658b70bf5e44bc2f073af402" - integrity sha512-Usp9fJan9SOJnOlVcv/jMJDchseE7bIDA5ZsBnracgVk4MiBwkvMqpmLWn5G1aDBvnUCthvS2gO3odfahgkV0Q== +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -hardhat-deploy@^0.11.20: - version "0.11.34" - resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.34.tgz#61252ebf5dfdda7b0b31298dd5580b0735c05910" - integrity sha512-N6xcwD8LSMV/IyfEr8TfR2YRbOh9Q4QvitR9MKZRTXQmgQiiMGjX+2efMjKgNMxwCVlmpfnE1tyDxOJOOUseLQ== +handlebars@^4.0.1: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/contracts" "^5.7.0" - "@ethersproject/providers" "^5.7.2" - "@ethersproject/solidity" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wallet" "^5.7.0" - "@types/qs" "^6.9.7" - axios "^0.21.1" - chalk "^4.1.2" - chokidar "^3.5.2" - debug "^4.3.2" - enquirer "^2.3.6" - ethers "^5.5.3" - form-data "^4.0.0" - fs-extra "^10.0.0" - match-all "^1.2.6" - murmur-128 "^0.2.1" - qs "^6.9.4" - zksync-web3 "^0.14.3" + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" -hardhat-preprocessor@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/hardhat-preprocessor/-/hardhat-preprocessor-0.1.5.tgz#75b22641fd6a680739c995d03bd5f7868eb72144" - integrity sha512-j8m44mmPxpxAAd0G8fPHRHOas/INZdzptSur0TNJvMEGcFdLDhbHHxBcqZVQ/bmiW42q4gC60AP4CXn9EF018g== +hardhat-gas-reporter@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz#9a2afb354bc3b6346aab55b1c02ca556d0e16450" + integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg== dependencies: - murmur-128 "^0.2.1" + array-uniq "1.0.3" + eth-gas-reporter "^0.2.25" + sha1 "^1.1.1" -hardhat@^2.9.5: - version "2.17.1" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.17.1.tgz#4b6c8c8f624fd23d9f40185a4af24815d05a486a" - integrity sha512-1PxRkfjhEzXs/wDxI5YgzYBxNmvzifBTjYzuopwel+vXpAhCudplusJthN5eig0FTs4qbi828DBIITEDh8x9LA== +hardhat@^2.15.0: + version "2.19.4" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.4.tgz#5112c30295d8be2e18e55d847373c50483ed1902" + integrity sha512-fTQJpqSt3Xo9Mn/WrdblNGAfcANM6XC3tAEi6YogB4s02DmTf93A8QsGb8uR0KR8TFcpcS8lgiW4ugAIYpnbrQ== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-blockchain" "7.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-evm" "2.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-statemanager" "2.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - "@nomicfoundation/ethereumjs-vm" "7.0.1" + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-blockchain" "7.0.2" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-evm" "2.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-statemanager" "2.0.2" + "@nomicfoundation/ethereumjs-trie" "6.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@nomicfoundation/ethereumjs-vm" "7.0.2" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" @@ -1911,16 +2387,28 @@ hardhat@^2.9.5: uuid "^8.3.2" ws "^7.4.6" +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" @@ -1931,16 +2419,9 @@ has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - hash-base@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== dependencies: inherits "^2.0.4" @@ -1949,29 +2430,51 @@ hash-base@^3.0.0: hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + he@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +"heap@>= 0.2.0": + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + hmac-drbg@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -1980,9 +2483,16 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -1990,34 +2500,34 @@ https-proxy-agent@^5.0.0: iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore@^5.1.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + immutable@^4.0.0-rc.12: version "4.3.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.2.tgz#f89d910f8dfb6e15c03b2cae2faaf8c1f66455fe" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz" integrity sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA== -imul@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" - integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== - indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -2025,88 +2535,118 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + io-ts@1.10.4: version "1.10.4" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + resolved "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== dependencies: fp-ts "^1.0.0" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-buffer@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.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" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + 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" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 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" + resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-plain-obj@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-sdsl@^4.1.4: version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + resolved "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz" integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== +js-yaml@3.x: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" @@ -2118,56 +2658,61 @@ json-schema-traverse@^1.0.0: jsonfile@^2.1.0: version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" +jsonschema@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" + integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== + keccak@^3.0.0, keccak@^3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" + resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz" integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" readable-stream "^3.6.0" +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + klaw@^1.0.0: version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + resolved "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz" integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== optionalDependencies: graceful-fs "^4.1.9" -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - level-supports@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + resolved "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz" integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== level-transcoder@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + resolved "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz" integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== dependencies: buffer "^6.0.3" @@ -2175,15 +2720,23 @@ level-transcoder@^1.0.1: level@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" + resolved "https://registry.npmjs.org/level/-/level-8.0.0.tgz" integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== dependencies: browser-level "^1.0.1" classic-level "^1.2.0" +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + locate-path@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" @@ -2191,37 +2744,54 @@ locate-path@^2.0.0: locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.camelcase@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.11, lodash@^4.17.15: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" is-unicode-supported "^0.1.0" +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + lru-cache@^4.0.1: version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" @@ -2229,41 +2799,41 @@ lru-cache@^4.0.1: lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" lru_map@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -match-all@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" - integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== mcl-wasm@^0.7.1: version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + resolved "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== md5.js@^1.3.4: version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: hash-base "^3.0.0" @@ -2272,7 +2842,7 @@ md5.js@^1.3.4: memory-level@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + resolved "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz" integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== dependencies: abstract-level "^1.0.0" @@ -2281,9 +2851,27 @@ memory-level@^1.0.0: memorystream@^0.3.1: version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== +merge2@^1.2.3, merge2@^1.3.0: + 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.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + 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" @@ -2298,46 +2886,53 @@ mime-types@^2.1.12: minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimalistic-crypto-utils@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + minimatch@5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0: +minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +mkdirp@0.5.x: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mnemonist@^0.38.0: version "0.38.5" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== dependencies: obliterator "^2.0.0" -mocha@^10.0.0: +mocha@10.2.0, mocha@^10.0.0, mocha@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== @@ -2366,46 +2961,49 @@ mocha@^10.0.0: module-error@^1.0.1, module-error@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + resolved "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -murmur-128@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/murmur-128/-/murmur-128-0.2.1.tgz#a9f6568781d2350ecb1bf80c14968cadbeaa4b4d" - integrity sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg== - dependencies: - encode-utf8 "^1.0.2" - fmix "^0.1.0" - imul "^1.0.0" - nanoid@3.3.3: version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== napi-macros@^2.2.2: version "2.2.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz" integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + 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" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== nofilter@^3.1.0: @@ -2413,106 +3011,153 @@ nofilter@^3.1.0: resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== + dependencies: + abbrev "1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +object-assign@^4.1.0: + 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.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== + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== obliterator@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== -once@^1.3.0: +once@1.x, once@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +ordinal@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" + integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== + os-shim@^0.1.2: version "0.1.3" - resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" + resolved "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz" integrity sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A== os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" p-try@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-starts-with@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-starts-with/-/path-starts-with-2.0.1.tgz#cd8b6213c141a9f2dd86c748310acdfa6493abb1" - integrity sha512-wZ3AeiRBRlNwkdUxvBANh0+esnt38DLffHDujZyRHkqkaKHTglnY2EP5UX3b8rdeiSutgO4y9NEJwXezNP5vHg== +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== pbkdf2@^3.0.17: version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" @@ -2521,23 +3166,33 @@ pbkdf2@^3.0.17: safe-buffer "^5.0.1" sha.js "^2.4.8" -picomatch@^2.0.4, picomatch@^2.2.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + pre-commit@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6" + resolved "https://registry.npmjs.org/pre-commit/-/pre-commit-1.2.2.tgz" integrity sha512-qokTiqxD6GjODy5ETAIgzsRgnBWWQHQH2ghy86PU7mIn/wuWeTwF3otyNQZxWBwVn8XNr8Tdzj/QfUXpH+gRZA== dependencies: cross-spawn "^5.0.1" spawn-sync "^1.0.15" which "1.2.x" +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + prettier-plugin-solidity@^1.0.0-beta.13: version "1.1.3" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz#9a35124f578404caf617634a8cab80862d726cba" + resolved "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz" integrity sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg== dependencies: "@solidity-parser/parser" "^0.16.0" @@ -2546,21 +3201,20 @@ prettier-plugin-solidity@^1.0.0-beta.13: prettier@^2.3.1, prettier@^2.6.1: version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== +promise@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" + asap "~2.0.6" proxy-from-env@^1.1.0: version "1.1.0" @@ -2569,15 +3223,15 @@ proxy-from-env@^1.1.0: pseudomap@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -qs@^6.9.4: +qs@^6.4.0: version "6.11.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== @@ -2586,19 +3240,19 @@ qs@^6.9.4: queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" raw-body@^2.4.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -2608,7 +3262,7 @@ raw-body@^2.4.1: readable-stream@^2.2.2: version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" @@ -2621,7 +3275,7 @@ readable-stream@^2.2.2: readable-stream@^3.6.0: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -2630,19 +3284,47 @@ readable-stream@^3.6.0: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + reduce-flatten@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + resolved "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz" integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.0, require-from-string@^2.0.2: @@ -2650,29 +3332,53 @@ require-from-string@^2.0.0, require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + resolve@1.17.0: version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" -rimraf@^2.2.8, rimraf@^2.6.2: +resolve@^1.1.6: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +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== + +rimraf@^2.2.8: version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== dependencies: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.2.3: +rlp@^2.2.3, rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== @@ -2681,39 +3387,66 @@ rlp@^2.2.3: run-parallel-limit@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + resolved "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz" integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== dependencies: queue-microtask "^1.2.2" +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" + rustbn.js@~0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + resolved "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== 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" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== "safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sc-istanbul@^0.4.5: + version "0.4.6" + resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" + integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + 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" + resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== secp256k1@^4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== dependencies: elliptic "^6.5.4" @@ -2722,15 +3455,15 @@ secp256k1@^4.0.1: semver@^5.5.0: version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^6.3.0: version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.8: +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== @@ -2739,41 +3472,69 @@ semver@^7.3.8: serialize-javascript@6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: randombytes "^2.1.0" +set-function-length@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" + integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== + dependencies: + define-data-property "^1.1.1" + function-bind "^1.1.2" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + setimmediate@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== +shelljs@^0.8.3: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -2783,10 +3544,10 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +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@^4.0.0: version "4.0.0" @@ -2799,7 +3560,7 @@ slice-ansi@^4.0.0: solc@0.7.3: version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + resolved "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== dependencies: command-exists "^1.2.8" @@ -2814,52 +3575,98 @@ solc@0.7.3: solidity-comments-extractor@^0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" + resolved "https://registry.npmjs.org/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz" integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== +solidity-coverage@^0.8.2: + version "0.8.5" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.5.tgz#64071c3a0c06a0cecf9a7776c35f49edc961e875" + integrity sha512-6C6N6OV2O8FQA0FWA95FdzVH+L16HU94iFgg5wAFZ29UpLFkgNI/DRR2HotG1bC0F4gAc/OMs2BJI44Q/DYlKQ== + dependencies: + "@ethersproject/abi" "^5.0.9" + "@solidity-parser/parser" "^0.16.0" + chalk "^2.4.2" + death "^1.1.0" + detect-port "^1.3.0" + difflib "^0.2.4" + fs-extra "^8.1.0" + ghost-testrpc "^0.0.2" + global-modules "^2.0.0" + globby "^10.0.1" + jsonschema "^1.2.4" + lodash "^4.17.15" + mocha "10.2.0" + node-emoji "^1.10.0" + pify "^4.0.1" + recursive-readdir "^2.2.2" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.6" + source-map-support@^0.5.13: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== + dependencies: + amdefine ">=0.0.4" + spawn-sync@^1.0.15: version "1.0.15" - resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476" + resolved "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz" integrity sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw== dependencies: concat-stream "^1.4.7" os-shim "^0.1.2" +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + stacktrace-parser@^0.1.10: version "0.1.10" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== dependencies: type-fest "^0.7.1" statuses@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== streamsearch@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== string-format@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + resolved "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz" integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -2871,61 +3678,96 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-hex-prefix@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + resolved "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== dependencies: is-hex-prefixed "1.0.0" strip-json-comments@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@8.1.1: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.0" + supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "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== + +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + table-layout@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + resolved "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz" integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== dependencies: array-back "^4.0.1" @@ -2944,28 +3786,45 @@ table@^6.8.0: string-width "^4.2.3" strip-ansi "^6.0.1" +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + tmp@0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== ts-command-line-args@^2.2.0: version "2.5.1" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + resolved "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz" integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== dependencies: chalk "^4.1.0" @@ -2975,12 +3834,12 @@ ts-command-line-args@^2.2.0: ts-essentials@^7.0.1: version "7.0.3" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz" integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== ts-node@^10.7.0: version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -2997,39 +3856,56 @@ ts-node@^10.7.0: v8-compile-cache-lib "^3.0.1" yn "3.1.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== + tslib@^1.9.3: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tsort@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + resolved "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== tweetnacl-util@^0.15.1: version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== tweetnacl@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.7.1: version "0.7.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== typechain@^8.0.0: version "8.3.1" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.1.tgz#dccbc839b94877997536c356380eff7325395cfb" + resolved "https://registry.npmjs.org/typechain/-/typechain-8.3.1.tgz" integrity sha512-fA7clol2IP/56yq6vkMTR+4URF1nGjV82Wx6Rf09EsqD4tkzMAvEaqYxVFCavJm/1xaRga/oD55K+4FtuXwQOQ== dependencies: "@types/prettier" "^2.1.1" @@ -3045,44 +3921,49 @@ typechain@^8.0.0: typedarray@^0.0.6: version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.6.4: version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typical@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + resolved "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== typical@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + resolved "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz" integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + undici@^5.14.0: version "5.23.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.23.0.tgz#e7bdb0ed42cebe7b7aca87ced53e6eaafb8f8ca0" + resolved "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz" integrity sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg== dependencies: busboy "^1.6.0" universalify@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unpipe@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== uri-js@^4.2.2: @@ -3092,38 +3973,67 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@^8.3.2: version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +web3-utils@^1.3.6: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.3.tgz#f1db99c82549c7d9f8348f04ffe4e0188b449714" + integrity sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + which@1.2.x: version "1.2.14" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" + resolved "https://registry.npmjs.org/which/-/which-1.2.14.tgz" integrity sha512-16uPglFkRPzgiUXYMi1Jf8Z5EzN1iB4V0ZtMXcHZnwsBtQhhHeCqoWw7tsUY42hJGNDWtUsVLTjakIa5BgAxCw== dependencies: isexe "^2.0.0" -which@^1.2.9: +which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + wordwrapjs@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + resolved "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz" integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== dependencies: reduce-flatten "^2.0.0" @@ -3131,12 +4041,12 @@ wordwrapjs@^4.0.0: workerpool@6.2.1: version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -3145,57 +4055,57 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@7.4.6: version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + ws@^7.4.6: version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@20.2.4: version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@^20.2.2: version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - yargs-unparser@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: camelcase "^6.0.0" @@ -3205,7 +4115,7 @@ yargs-unparser@2.0.0: yargs@16.2.0: version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: cliui "^7.0.2" @@ -3216,30 +4126,12 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.7.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zksync-web3@^0.14.3: - version "0.14.3" - resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.3.tgz#64ac2a16d597464c3fc4ae07447a8007631c57c9" - integrity sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==