diff --git a/README.md b/README.md index 8f423d5b..78a48ffb 100644 --- a/README.md +++ b/README.md @@ -7,83 +7,100 @@ # Solarity Solidity Library -Solidity modules and utilities that **go far beyond mediocre solidity**. - -- Implementation of the [**Contracts Registry**](https://eips.ethereum.org/EIPS/eip-6224) pattern -- State-of-the-art cryptography primitives (**ECDSA over 256-bit, 384-bit, and 512-bit curves**, **RSASSA-PSS**) -- Advanced data structures (**Vector**, **DynamicSet**, **PriorityQueue**, **AVLTree**) -- ZK-friendly [**Cartesian Merkle Tree**](https://medium.com/@Arvolear/cartesian-merkle-tree-the-new-breed-a30b005ecf27), [**Sparse Merkle Tree**](https://docs.iden3.io/publications/pdfs/Merkle-Tree.pdf), and [**Incremental Merkle Tree**](https://github.com/runtimeverification/deposit-contract-verification/blob/master/deposit-contract-verification.pdf) implementations -- Versatile access control smart contracts (**Merkle whitelists**, **RBAC**) -- Enhanced and simplified [**Diamond**](https://eips.ethereum.org/EIPS/eip-2535) pattern -- Flexible finance instruments (**Staking**, **Vesting**) -- Robust UniswapV2 and UniswapV3 oracles -- Lightweight SBT implementation -- Hyperoptimized **uint512** BigInt library -- Utilities to ease work with memory, types, ERC20 decimals, arrays, sets, and ZK proofs +Solidity contracts and utilities that **go far beyond mediocre solidity**. + +## Contracts + +```ml +contracts +├── access +│ ├── AMerkleWhitelisted — "Whitelists via Merkle proofs" +│ ├── AMultiOwnable — "Multiple owners with the equal access level" +│ ├── ARBAC — "A powerful implementation of a true RBAC" +│ └── extensions +│ └── ARBACGroupable — "Groupable extension of ARBAC" +├── contracts—registry +│ ├── AContractsRegistry — "Reference registry implementation of ERC-6224 pattern" +│ ├── ADependant — "Reference dependant implementation of ERC-6224 pattern" +│ └── pools +│ ├── APoolContractsRegistry — "Adaptation of ERC-6224 for factory-like contracts" +│ └── APoolFactory — "Factory implementation for a pooled registry" +├── diamond +│ ├── ADiamondStorage — "The storage part of ERC-2535 diamond" +│ ├── Diamond — "Revised ERC-2535 diamond implementation" +│ └── utils +│ ├── AInitializableStorage — "Initializable logic for diamond facets" +│ └── DiamondERC165 — "ERC-165 introspection for diamond facets" +├── finance +│ ├── compound—rate—keeper +│ │ └── ACompoundRateKeeper — "Complex percentage calculator used in lending protocols" +│ ├── staking +│ │ ├── AStaking — "Flexible rewards staking implementation" +│ │ └── AValueDistributor — "Efficient distribution algorithm implementation" +│ └── vesting +│ └── AVesting — "Linear and exponential vesting implementation" +├── libs +│ ├── arrays +│ │ ├── ArrayHelper — "Common functions to work with arrays" +│ │ ├── Paginator — "Return array slices from view function" +│ │ └── SetHelper — "Array abstraction over sets" +│ ├── bn +│ │ └── U512 — "A hyperoptimized uint512 implementation" +│ ├── crypto +│ │ ├── ECDSA256 — "ECDSA verification over any 256-bit curves" +│ │ ├── ECDSA384 — "ECDSA verification over any 384-bit curves" +│ │ ├── ECDSA512 — "ECDSA verification over any 512-bit curves" +│ │ └── RSASSAPSS — "RSASSA-PSS verification with MGF1" +│ ├── data—structures +│ │ ├── AvlTree — "AVL tree implementation with an iterator traversal" +│ │ ├── CartesianMerkleTree — "CMT reference implementation" +│ │ ├── DynamicSet — "Set for strings and bytes" +│ │ ├── IncrementalMerkleTree — "IMT implementation with flexible tree height" +│ │ ├── PriorityQueue — "Max queue heap implementation" +│ │ ├── SparseMerkleTree — "SMT optimized implementation" +│ │ └── memory +│ │ └── Vector — "A pushable memory array" +│ ├── utils +│ │ ├── DecimalsConverter — "Simplify interaction with ERC-20 decimals" +│ │ ├── MemoryUtils — "Functions for memory manipulation" +│ │ ├── ReturnDataProxy — "Bypass extra returndata copy when returning data" +│ │ └── Typecaster — "Cast between various Solidity types" +│ └── zkp +│ ├── Groth16VerifierHelper — "Simplify integration with Groth16 proofs" +│ └── PlonkVerifierHelper — "Simplify integration with Plonk proofs" +├── oracles +│ ├── AUniswapV2Oracle — "Uniswap V2 oracle with custom TWAP" +│ └── UniswapV3Oracle — "Uniswap V3 oracle with a clean interface" +├── proxy +│ └── adminable +│ ├── AdminableProxy — "A slight modification of a transparent proxy" +│ └── AdminableProxyUpgrader — "A slight modification of a proxy admin" +├── tokens +│ └── ASBT — "A minimal implementation of an SBT" +├── utils +│ ├── ABlockGuard — "Protect against flashloans" +│ └── Globals — "Some commonly used constants" +├── presets — "Presets for the library contracts" +├── interfaces — "Interfaces for the library contracts" +└── mock — "Mocks for testing purposes" +``` Built with courage and aspiration to perfection. -## Overview +> [!TIP] +> The library is designed to work cohesively with [hardhat-zkit](https://github.com/dl-solarity/hardhat-zkit) and [circom-lib](https://github.com/dl-solarity/circom-lib) packages. -### Installation +## Installation -```console -$ npm install @solarity/solidity-lib +```bash +npm install @solarity/solidity-lib ``` The latest stable version is always in the `master` branch. -### Documentation - -Check out the project's [documentation](https://docs.solarity.dev) with broad explanations and usage examples of every module. Full `natspec` guides are also available in the source code. - -## Usage - -You will find the smart contracts in the `/contracts` directory. Feel free to play around and check the project's structure. - -Once the [npm package](https://www.npmjs.com/package/@solarity/solidity-lib) is installed, one can use the library just like that: - -```solidity -pragma solidity ^0.8.21; - -import {AMultiOwnable} from "@solarity/solidity-lib/access/AMultiOwnable.sol"; -import {TypeCaster} from "@solarity/solidity-lib/libs/utils/TypeCaster.sol"; -import {CartesianMerkleTree} from "@solarity/solidity-lib/libs/data-structures/CartesianMerkleTree.sol"; -import {Groth16VerifierHelper} from "@solarity/solidity-lib/libs/zkp/Groth16VerifierHelper.sol"; - -contract Example is AMultiOwnable { - using CartesianMerkleTree for CartesianMerkleTree.UintCMT; - using Groth16VerifierHelper for address; - - CartesianMerkleTree.UintCMT internal _uintTreaple; - address internal _treapleVerifier; +## Documentation - function __Example_init(address treapleVerifier_) initializer { - __AMultiOwnable_init(); - _uintTreaple.initialize(40); - _treapleVerifier = treapleVerifier_; - } - - function addToTree(uint256 key_) external onlyOwner { - _uintTreaple.add(key_); - } - - function getMerkleProof(uint256 key_) external view returns (CartesianMerkleTree.Proof memory) { - return _uintTreaple.getProof(key_, 0); - } - - function verifyZKProof(Groth16VerifierHelper.ProofPoints memory proof_) external view { - uint256[] memory pubSignals_ = TypeCaster.asSingletonArray(_uintTreaple.getRoot()); - - require(_treapleVerifier.verifyProof(proof_, pubSignals_), "ZKP verification failed"); - } -} -``` - -This example showcases the basic usage of a `CartesianMerkleTree` with ZK proofs. The contract's `MultiOwner` may add elements to the tree to then privately prove their existence. Also, the `Groth16VerifierHelper` library is used to simplify the interaction with the ZK verifier. - -> [!TIP] -> The library is designed to work cohesively with [hardhat-zkit](https://github.com/dl-solarity/hardhat-zkit) and [circom-lib](https://github.com/dl-solarity/circom-lib) packages. +Check out the project's [documentation](https://docs.solarity.dev) with broad explanations and usage examples of every contract. Full `natspec` guides are also available in the source code. ## Contribution diff --git a/contracts/contracts-registry/AContractsRegistry.sol b/contracts/contracts-registry/AContractsRegistry.sol index b57b2983..498b65cb 100644 --- a/contracts/contracts-registry/AContractsRegistry.sol +++ b/contracts/contracts-registry/AContractsRegistry.sol @@ -38,10 +38,15 @@ import {ADependant} from "./ADependant.sol"; * Users may also fetch all the contracts present in the system as they are now located in a single place. */ abstract contract AContractsRegistry is Initializable { - AdminableProxyUpgrader private _proxyUpgrader; + struct AContractsRegistryStorage { + AdminableProxyUpgrader proxyUpgrader; + mapping(string name => address contractAddress) contracts; + mapping(address contractAddress => bool isProxy) isProxy; + } - mapping(string => address) private _contracts; - mapping(address => bool) private _isProxy; + // bytes32(uint256(keccak256("solarity.contract.AContractsRegistry")) - 1) + bytes32 private constant A_CONTRACTS_REGISTRY_STORAGE = + 0x769f3b456cd81d706504548e533f55ce8f4cb7a5f9b80697cfd5d8146de0ca61; event ContractAdded(string name, address contractAddress); event ProxyContractAdded(string name, address contractAddress, address implementation); @@ -56,7 +61,9 @@ abstract contract AContractsRegistry is Initializable { * @notice The initialization function */ function __AContractsRegistry_init() internal onlyInitializing { - _proxyUpgrader = new AdminableProxyUpgrader(address(this)); + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + $.proxyUpgrader = new AdminableProxyUpgrader(address(this)); } /** @@ -65,7 +72,9 @@ abstract contract AContractsRegistry is Initializable { * @return the address of the contract */ function getContract(string memory name_) public view returns (address) { - address contractAddress_ = _contracts[name_]; + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + address contractAddress_ = $.contracts[name_]; _checkIfMappingExist(contractAddress_, name_); @@ -78,7 +87,9 @@ abstract contract AContractsRegistry is Initializable { * @return true if the contract is present in the registry */ function hasContract(string memory name_) public view returns (bool) { - return _contracts[name_] != address(0); + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + return $.contracts[name_] != address(0); } /** @@ -86,7 +97,9 @@ abstract contract AContractsRegistry is Initializable { * @return the proxy admin address */ function getProxyUpgrader() public view returns (address) { - return address(_proxyUpgrader); + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + return address($.proxyUpgrader); } /** @@ -95,12 +108,14 @@ abstract contract AContractsRegistry is Initializable { * @return the implementation address */ function getImplementation(string memory name_) public view returns (address) { - address contractProxy_ = _contracts[name_]; + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + address contractProxy_ = $.contracts[name_]; if (contractProxy_ == address(0)) revert NoMappingExists(name_); - if (!_isProxy[contractProxy_]) revert NotAProxy(name_, contractProxy_); + if (!$.isProxy[contractProxy_]) revert NotAProxy(name_, contractProxy_); - return _proxyUpgrader.getImplementation(contractProxy_); + return $.proxyUpgrader.getImplementation(contractProxy_); } /** @@ -120,7 +135,9 @@ abstract contract AContractsRegistry is Initializable { string memory name_, bytes memory data_ ) internal virtual { - address contractAddress_ = _contracts[name_]; + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + address contractAddress_ = $.contracts[name_]; _checkIfMappingExist(contractAddress_, name_); @@ -152,12 +169,14 @@ abstract contract AContractsRegistry is Initializable { address newImplementation_, bytes memory data_ ) internal virtual { - address contractToUpgrade_ = _contracts[name_]; + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + address contractToUpgrade_ = $.contracts[name_]; if (contractToUpgrade_ == address(0)) revert NoMappingExists(name_); - if (!_isProxy[contractToUpgrade_]) revert NotAProxy(name_, contractToUpgrade_); + if (!$.isProxy[contractToUpgrade_]) revert NotAProxy(name_, contractToUpgrade_); - _proxyUpgrader.upgrade(contractToUpgrade_, newImplementation_, data_); + $.proxyUpgrader.upgrade(contractToUpgrade_, newImplementation_, data_); emit ProxyContractUpgraded(name_, newImplementation_); } @@ -171,7 +190,9 @@ abstract contract AContractsRegistry is Initializable { function _addContract(string memory name_, address contractAddress_) internal virtual { if (contractAddress_ == address(0)) revert ZeroAddressProvided(name_); - _contracts[name_] = contractAddress_; + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + $.contracts[name_] = contractAddress_; emit ContractAdded(name_, contractAddress_); } @@ -200,10 +221,12 @@ abstract contract AContractsRegistry is Initializable { ) internal virtual { if (contractAddress_ == address(0)) revert ZeroAddressProvided(name_); - address proxyAddr_ = _deployProxy(contractAddress_, address(_proxyUpgrader), data_); + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + address proxyAddr_ = _deployProxy(contractAddress_, address($.proxyUpgrader), data_); - _contracts[name_] = proxyAddr_; - _isProxy[proxyAddr_] = true; + $.contracts[name_] = proxyAddr_; + $.isProxy[proxyAddr_] = true; emit ProxyContractAdded(name_, proxyAddr_, contractAddress_); } @@ -221,13 +244,15 @@ abstract contract AContractsRegistry is Initializable { ) internal virtual { if (contractAddress_ == address(0)) revert ZeroAddressProvided(name_); - _contracts[name_] = contractAddress_; - _isProxy[contractAddress_] = true; + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + $.contracts[name_] = contractAddress_; + $.isProxy[contractAddress_] = true; emit ProxyContractAdded( name_, contractAddress_, - _proxyUpgrader.getImplementation(contractAddress_) + $.proxyUpgrader.getImplementation(contractAddress_) ); } @@ -236,12 +261,14 @@ abstract contract AContractsRegistry is Initializable { * @param name_ the associated name with the contract */ function _removeContract(string memory name_) internal virtual { - address contractAddress_ = _contracts[name_]; + AContractsRegistryStorage storage $ = _getAContractsRegistryStorage(); + + address contractAddress_ = $.contracts[name_]; _checkIfMappingExist(contractAddress_, name_); - delete _isProxy[contractAddress_]; - delete _contracts[name_]; + delete $.isProxy[contractAddress_]; + delete $.contracts[name_]; emit ContractRemoved(name_); } @@ -264,4 +291,17 @@ abstract contract AContractsRegistry is Initializable { function _checkIfMappingExist(address contractAddress_, string memory name_) internal pure { if (contractAddress_ == address(0)) revert NoMappingExists(name_); } + + /** + * @dev Returns a pointer to the storage namespace + */ + function _getAContractsRegistryStorage() + private + pure + returns (AContractsRegistryStorage storage $) + { + assembly { + $.slot := A_CONTRACTS_REGISTRY_STORAGE + } + } } diff --git a/contracts/contracts-registry/pools/APoolContractsRegistry.sol b/contracts/contracts-registry/pools/APoolContractsRegistry.sol index 14432a77..a298508c 100644 --- a/contracts/contracts-registry/pools/APoolContractsRegistry.sol +++ b/contracts/contracts-registry/pools/APoolContractsRegistry.sol @@ -28,10 +28,15 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { using Paginator for EnumerableSet.AddressSet; using Math for uint256; - address internal _contractsRegistry; + struct APoolContractsRegistryStorage { + address contractsRegistry; + mapping(string name => UpgradeableBeacon beacon) beacons; + mapping(string name => EnumerableSet.AddressSet pools) pools; + } - mapping(string => UpgradeableBeacon) private _beacons; - mapping(string => EnumerableSet.AddressSet) private _pools; // name => pool + // bytes32(uint256(keccak256("solarity.contract.APoolContractsRegistry")) - 1) + bytes32 private constant A_POOL_CONTRACTS_REGISTRY_STORAGE = + 0x8d5dd0f70e3c83ece432cedb954444f19062d979f9fc6b474d5ea33604196f67; error NoMappingExists(string poolName); error NoPoolsToInject(string poolName); @@ -50,7 +55,9 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { address contractsRegistry_, bytes memory ) public virtual override dependant { - _contractsRegistry = contractsRegistry_; + APoolContractsRegistryStorage storage $ = _getAPoolContractsRegistryStorage(); + + $.contractsRegistry = contractsRegistry_; } /** @@ -69,9 +76,11 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { * @return address_ the implementation these pools point to */ function getImplementation(string memory name_) public view returns (address) { - if (address(_beacons[name_]) == address(0)) revert NoMappingExists(name_); + APoolContractsRegistryStorage storage $ = _getAPoolContractsRegistryStorage(); + + if (address($.beacons[name_]) == address(0)) revert NoMappingExists(name_); - return _beacons[name_].implementation(); + return $.beacons[name_].implementation(); } /** @@ -80,7 +89,9 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { * @return address the BeaconProxy address */ function getProxyBeacon(string memory name_) public view returns (address) { - address beacon_ = address(_beacons[name_]); + APoolContractsRegistryStorage storage $ = _getAPoolContractsRegistryStorage(); + + address beacon_ = address($.beacons[name_]); if (beacon_ == address(0)) revert ProxyDoesNotExist(name_); @@ -94,7 +105,9 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { * @return true if pool_ is whithing the registry */ function isPool(string memory name_, address pool_) public view returns (bool) { - return _pools[name_].contains(pool_); + APoolContractsRegistryStorage storage $ = _getAPoolContractsRegistryStorage(); + + return $.pools[name_].contains(pool_); } /** @@ -103,7 +116,16 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { * @return the number of pools with this name */ function countPools(string memory name_) public view returns (uint256) { - return _pools[name_].length(); + APoolContractsRegistryStorage storage $ = _getAPoolContractsRegistryStorage(); + + return $.pools[name_].length(); + } + + /** + * @dev Returns the address of the contracts registry + */ + function getContractsRegistry() public view returns (address) { + return _getAPoolContractsRegistryStorage().contractsRegistry; } /** @@ -118,7 +140,9 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { uint256 offset_, uint256 limit_ ) public view returns (address[] memory pools_) { - return _pools[name_].part(offset_, limit_); + APoolContractsRegistryStorage storage $ = _getAPoolContractsRegistryStorage(); + + return $.pools[name_].part(offset_, limit_); } /** @@ -131,15 +155,17 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { string[] memory names_, address[] memory newImplementations_ ) internal virtual { + APoolContractsRegistryStorage storage $ = _getAPoolContractsRegistryStorage(); + for (uint256 i = 0; i < names_.length; i++) { - if (address(_beacons[names_[i]]) == address(0)) { - _beacons[names_[i]] = UpgradeableBeacon( + if (address($.beacons[names_[i]]) == address(0)) { + $.beacons[names_[i]] = UpgradeableBeacon( _deployProxyBeacon(newImplementations_[i]) ); } - if (_beacons[names_[i]].implementation() != newImplementations_[i]) { - _beacons[names_[i]].upgradeTo(newImplementations_[i]); + if ($.beacons[names_[i]].implementation() != newImplementations_[i]) { + $.beacons[names_[i]].upgradeTo(newImplementations_[i]); } } } @@ -171,13 +197,15 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { uint256 offset_, uint256 limit_ ) internal virtual { - EnumerableSet.AddressSet storage _namedPools = _pools[name_]; + APoolContractsRegistryStorage storage $ = _getAPoolContractsRegistryStorage(); + + EnumerableSet.AddressSet storage _namedPools = $.pools[name_]; uint256 to_ = (offset_ + limit_).min(_namedPools.length()).max(offset_); if (to_ == offset_) revert NoPoolsToInject(name_); - address contractsRegistry_ = _contractsRegistry; + address contractsRegistry_ = $.contractsRegistry; for (uint256 i = offset_; i < to_; i++) { ADependant(_namedPools.at(i)).setDependencies(contractsRegistry_, data_); @@ -190,7 +218,9 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { * @param poolAddress_ the proxy address of the pool */ function _addProxyPool(string memory name_, address poolAddress_) internal virtual { - _pools[name_].add(poolAddress_); + APoolContractsRegistryStorage storage $ = _getAPoolContractsRegistryStorage(); + + $.pools[name_].add(poolAddress_); } /** @@ -200,4 +230,17 @@ abstract contract APoolContractsRegistry is Initializable, ADependant { function _deployProxyBeacon(address implementation_) internal virtual returns (address) { return address(new UpgradeableBeacon(implementation_, address(this))); } + + /** + * @dev Returns a pointer to the storage namespace + */ + function _getAPoolContractsRegistryStorage() + private + pure + returns (APoolContractsRegistryStorage storage $) + { + assembly { + $.slot := A_POOL_CONTRACTS_REGISTRY_STORAGE + } + } } diff --git a/contracts/contracts-registry/pools/pool-factory/APoolFactory.sol b/contracts/contracts-registry/pools/APoolFactory.sol similarity index 75% rename from contracts/contracts-registry/pools/pool-factory/APoolFactory.sol rename to contracts/contracts-registry/pools/APoolFactory.sol index 6ccfefdc..749e5679 100644 --- a/contracts/contracts-registry/pools/pool-factory/APoolFactory.sol +++ b/contracts/contracts-registry/pools/APoolFactory.sol @@ -4,8 +4,8 @@ pragma solidity ^0.8.22; import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; import {BeaconProxy} from "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol"; -import {ADependant} from "../../../contracts-registry/ADependant.sol"; -import {APoolContractsRegistry} from "../APoolContractsRegistry.sol"; +import {ADependant} from "../../contracts-registry/ADependant.sol"; +import {APoolContractsRegistry} from "./APoolContractsRegistry.sol"; /** * @notice The PoolContractsRegistry module @@ -19,7 +19,13 @@ import {APoolContractsRegistry} from "../APoolContractsRegistry.sol"; * Both "create1" and "create2" deployment modes are supported. */ abstract contract APoolFactory is ADependant { - address internal _contractsRegistry; + struct APoolFactoryStorage { + address contractsRegistry; + } + + // bytes32(uint256(keccak256("solarity.contract.APoolFactory")) - 1) + bytes32 private constant A_POOL_FACTORY_STORAGE = + 0x1f5518d1b664801322096f1ea43578b6bee500653439ee8a900427e814b7cf43; /** * @notice The function that accepts dependencies from the ContractsRegistry, can be overridden @@ -29,7 +35,16 @@ abstract contract APoolFactory is ADependant { address contractsRegistry_, bytes memory ) public virtual override dependant { - _contractsRegistry = contractsRegistry_; + APoolFactoryStorage storage $ = _getAPoolFactoryStorage(); + + $.contractsRegistry = contractsRegistry_; + } + + /** + * @dev Returns the address of the contracts registry + */ + function getContractsRegistry() public view returns (address) { + return _getAPoolFactoryStorage().contractsRegistry; } /** @@ -83,7 +98,9 @@ abstract contract APoolFactory is ADependant { * provided PoolContractsRegistry as an injector */ function _injectDependencies(address poolRegistry_, address proxy_) internal virtual { - ADependant(proxy_).setDependencies(_contractsRegistry, bytes("")); + APoolFactoryStorage storage $ = _getAPoolFactoryStorage(); + + ADependant(proxy_).setDependencies($.contractsRegistry, bytes("")); ADependant(proxy_).setInjector(poolRegistry_); } @@ -107,4 +124,13 @@ abstract contract APoolFactory is ADependant { return Create2.computeAddress(salt_, bytecodeHash); } + + /** + * @dev Returns a pointer to the storage namespace + */ + function _getAPoolFactoryStorage() private pure returns (APoolFactoryStorage storage $) { + assembly { + $.slot := A_POOL_FACTORY_STORAGE + } + } } diff --git a/contracts/diamond/access/access-control/ADiamondAccessControl.sol b/contracts/diamond/access/access-control/ADiamondAccessControl.sol deleted file mode 100644 index 3f99b8eb..00000000 --- a/contracts/diamond/access/access-control/ADiamondAccessControl.sol +++ /dev/null @@ -1,98 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -// solhint-disable-next-line no-unused-import -import {ADiamondAccessControlStorage, IAccessControl} from "./ADiamondAccessControlStorage.sol"; - -/** - * @notice The Diamond standard module - * - * This is modified version of OpenZeppelin's AccessControl contract to be used as a Storage contract - * by the Diamond Standard. - */ -abstract contract ADiamondAccessControl is ADiamondAccessControlStorage { - error UnauthorizedAccount(address account); - error RoleAlreadyGranted(bytes32 role, address account); - - /** - * @notice Sets `DEFAULT_ADMIN_ROLE` to `msg.sender` - */ - function __ADiamondAccessControl_init() - internal - onlyInitializing(DIAMOND_ACCESS_CONTROL_STORAGE_SLOT) - { - _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); - } - - /** - * @inheritdoc IAccessControl - */ - function grantRole( - bytes32 role_, - address account_ - ) public virtual override onlyRole(getRoleAdmin(role_)) { - _grantRole(role_, account_); - } - - /** - * @inheritdoc IAccessControl - */ - function revokeRole( - bytes32 role_, - address account_ - ) public virtual override onlyRole(getRoleAdmin(role_)) { - _revokeRole(role_, account_); - } - - /** - * @inheritdoc IAccessControl - */ - function renounceRole(bytes32 role_, address account_) public virtual override { - if (account_ != msg.sender) revert UnauthorizedAccount(msg.sender); - - _revokeRole(role_, account_); - } - - /** - * @dev Sets `adminRole` as ``role``'s admin role. - * - * Emits a {RoleAdminChanged} event. - */ - function _setRoleAdmin(bytes32 role_, bytes32 adminRole_) internal virtual { - bytes32 previousAdminRole_ = getRoleAdmin(role_); - - _getAccessControlStorage().roles[role_].adminRole = adminRole_; - - emit RoleAdminChanged(role_, previousAdminRole_, adminRole_); - } - - /** - * @dev Grants `role` to `account`. - * - * Internal function without access restriction. - * - * May emit a {RoleGranted} event. - */ - function _grantRole(bytes32 role_, address account_) internal virtual { - if (hasRole(role_, account_)) revert RoleAlreadyGranted(role_, account_); - - _getAccessControlStorage().roles[role_].members[account_] = true; - - emit RoleGranted(role_, account_, msg.sender); - } - - /** - * @dev Revokes `role` from `account`. - * - * Internal function without access restriction. - * - * May emit a {RoleRevoked} event. - */ - function _revokeRole(bytes32 role_, address account_) internal virtual { - if (!hasRole(role_, account_)) revert RoleNotGranted(role_, account_); - - _getAccessControlStorage().roles[role_].members[account_] = false; - - emit RoleRevoked(role_, account_, msg.sender); - } -} diff --git a/contracts/diamond/access/access-control/ADiamondAccessControlStorage.sol b/contracts/diamond/access/access-control/ADiamondAccessControlStorage.sol deleted file mode 100644 index c308f960..00000000 --- a/contracts/diamond/access/access-control/ADiamondAccessControlStorage.sol +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; - -import {AInitializableStorage} from "../../utils/AInitializableStorage.sol"; - -/** - * @notice The Diamond standard module - * - * This is an AccessControl Storage contract with Diamond Standard support - */ -abstract contract ADiamondAccessControlStorage is IAccessControl, AInitializableStorage { - bytes32 public constant DIAMOND_ACCESS_CONTROL_STORAGE_SLOT = - keccak256("diamond.standard.diamond.access.control.storage"); - - bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; - - struct RoleData { - mapping(address => bool) members; - bytes32 adminRole; - } - - struct DACStorage { - mapping(bytes32 => RoleData) roles; - } - - error RoleNotGranted(bytes32 role, address account); - - /** - * @dev Modifier that checks that an account has a specific role. Reverts - * with a custom error including the required role. - */ - modifier onlyRole(bytes32 role_) { - _checkRole(role_); - _; - } - - function _getAccessControlStorage() internal pure returns (DACStorage storage _dacStorage) { - bytes32 slot_ = DIAMOND_ACCESS_CONTROL_STORAGE_SLOT; - - assembly { - _dacStorage.slot := slot_ - } - } - - /** - * @inheritdoc IAccessControl - */ - function hasRole(bytes32 role_, address account_) public view virtual override returns (bool) { - return _getAccessControlStorage().roles[role_].members[account_]; - } - - /** - * @inheritdoc IAccessControl - */ - function getRoleAdmin(bytes32 role_) public view virtual override returns (bytes32) { - return _getAccessControlStorage().roles[role_].adminRole; - } - - /** - * @dev Revert with a custom error if `_msgSender()` is missing `role`. - * Overriding this function changes the behavior of the {onlyRole} modifier. - */ - function _checkRole(bytes32 role_) internal view virtual { - _checkRole(role_, msg.sender); - } - - /** - * @dev Revert with a custom error if `account` is missing `role`. - */ - function _checkRole(bytes32 role_, address account_) internal view virtual { - if (!hasRole(role_, account_)) revert RoleNotGranted(role_, account_); - } -} diff --git a/contracts/diamond/access/ownable/ADiamondOwnableStorage.sol b/contracts/diamond/access/ownable/ADiamondOwnableStorage.sol deleted file mode 100644 index 12c271a2..00000000 --- a/contracts/diamond/access/ownable/ADiamondOwnableStorage.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -import {AInitializableStorage} from "../../utils/AInitializableStorage.sol"; - -/** - * @notice The Diamond standard module - * - * This is an Ownable Storage contract with Diamond Standard support - */ -abstract contract ADiamondOwnableStorage is AInitializableStorage { - bytes32 public constant DIAMOND_OWNABLE_STORAGE_SLOT = - keccak256("diamond.standard.diamond.ownable.storage"); - - struct DOStorage { - address owner; - } - - error CallerNotOwner(address caller, address owner); - - modifier onlyOwner() { - _onlyOwner(); - _; - } - - function _getDiamondOwnableStorage() internal pure returns (DOStorage storage _dos) { - bytes32 slot_ = DIAMOND_OWNABLE_STORAGE_SLOT; - - assembly { - _dos.slot := slot_ - } - } - - /** - * @notice The function to get the Diamond owner - * @return the owner of the Diamond - */ - function owner() public view virtual returns (address) { - return _getDiamondOwnableStorage().owner; - } - - /** - * @notice The function to check if `msg.sender` is the owner - */ - function _onlyOwner() internal view virtual { - if (owner() != msg.sender) revert CallerNotOwner(msg.sender, owner()); - } -} diff --git a/contracts/diamond/access/ownable/DiamondOwnable.sol b/contracts/diamond/access/ownable/DiamondOwnable.sol deleted file mode 100644 index 0b86a37d..00000000 --- a/contracts/diamond/access/ownable/DiamondOwnable.sol +++ /dev/null @@ -1,51 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -import {ADiamondOwnableStorage} from "./ADiamondOwnableStorage.sol"; - -/** - * @notice The Diamond standard module - * - * This is modified version of OpenZeppelin's Ownable contract to be used as a Storage contract - * by the Diamond Standard. - */ -contract DiamondOwnable is ADiamondOwnableStorage { - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - - error InvalidOwner(); - - /** - * @notice Transfers ownership to `msg.sender` - */ - function __DiamondOwnable_init() internal onlyInitializing(DIAMOND_OWNABLE_STORAGE_SLOT) { - _transferOwnership(msg.sender); - } - - /** - * @notice The function to transfer the Diamond ownership - * @param newOwner_ the new owner of the Diamond - */ - function transferOwnership(address newOwner_) public virtual onlyOwner { - if (newOwner_ == address(0)) revert InvalidOwner(); - - _transferOwnership(newOwner_); - } - - /** - * @notice The function to leave Diamond without an owner - */ - function renounceOwnership() public virtual onlyOwner { - _transferOwnership(address(0)); - } - - /** - * @notice The function to appoint a new Diamond owner - */ - function _transferOwnership(address newOwner_) internal virtual { - address previousOwner_ = _getDiamondOwnableStorage().owner; - - _getDiamondOwnableStorage().owner = newOwner_; - - emit OwnershipTransferred(previousOwner_, newOwner_); - } -} diff --git a/contracts/diamond/tokens/ERC20/ADiamondERC20Storage.sol b/contracts/diamond/tokens/ERC20/ADiamondERC20Storage.sol deleted file mode 100644 index 778b5f99..00000000 --- a/contracts/diamond/tokens/ERC20/ADiamondERC20Storage.sol +++ /dev/null @@ -1,81 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; - -import {AInitializableStorage} from "../../utils/AInitializableStorage.sol"; - -/** - * @notice The Diamond standard module - * - * This is an ERC20 token Storage contract with Diamond Standard support - */ -abstract contract ADiamondERC20Storage is AInitializableStorage, IERC20, IERC20Metadata { - bytes32 public constant DIAMOND_ERC20_STORAGE_SLOT = - keccak256("diamond.standard.diamond.erc20.storage"); - - struct DERC20Storage { - string name; - string symbol; - uint256 totalSupply; - mapping(address => uint256) balances; - mapping(address => mapping(address => uint256)) allowances; - } - - function _getErc20Storage() internal pure returns (DERC20Storage storage _erc20Storage) { - bytes32 slot_ = DIAMOND_ERC20_STORAGE_SLOT; - - assembly { - _erc20Storage.slot := slot_ - } - } - - /** - * @notice The function to get the name of the token. - * @return The name of the token. - */ - function name() public view virtual override returns (string memory) { - return _getErc20Storage().name; - } - - /** - * @notice The function to get the symbol of the token. - * @return The symbol of the token. - */ - function symbol() public view virtual override returns (string memory) { - return _getErc20Storage().symbol; - } - - /** - * @notice The function to get the number of decimals used for user representation. - * @return The number of decimals. - */ - function decimals() public view virtual override returns (uint8) { - return 18; - } - - /** - * @inheritdoc IERC20 - */ - function totalSupply() public view virtual override returns (uint256) { - return _getErc20Storage().totalSupply; - } - - /** - * @inheritdoc IERC20 - */ - function balanceOf(address account_) public view virtual override returns (uint256) { - return _getErc20Storage().balances[account_]; - } - - /** - * @inheritdoc IERC20 - */ - function allowance( - address owner_, - address spender_ - ) public view virtual override returns (uint256) { - return _getErc20Storage().allowances[owner_][spender_]; - } -} diff --git a/contracts/diamond/tokens/ERC20/DiamondERC20.sol b/contracts/diamond/tokens/ERC20/DiamondERC20.sol deleted file mode 100644 index a8d83209..00000000 --- a/contracts/diamond/tokens/ERC20/DiamondERC20.sol +++ /dev/null @@ -1,168 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -// solhint-disable-next-line no-unused-import -import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - -import {ADiamondERC20Storage} from "./ADiamondERC20Storage.sol"; - -/** - * @notice The Diamond standard module - * - * This is modified version of OpenZeppelin's ERC20 contract to be used as a Storage contract - * by the Diamond Standard. - */ -contract DiamondERC20 is ADiamondERC20Storage { - error ApproverIsZeroAddress(); - error InsufficientAllowance(address spender, uint256 allowance, uint256 needed); - error InsufficientBalance(address sender, uint256 balance, uint256 needed); - error ReceiverIsZeroAddress(); - error SenderIsZeroAddress(); - error SpenderIsZeroAddress(); - - /** - * @notice Sets the values for {name} and {symbol}. - * - * The default value of {decimals} is 18. - */ - function __DiamondERC20_init( - string memory name_, - string memory symbol_ - ) internal onlyInitializing(DIAMOND_ERC20_STORAGE_SLOT) { - DERC20Storage storage _erc20Storage = _getErc20Storage(); - - _erc20Storage.name = name_; - _erc20Storage.symbol = symbol_; - } - - /** - * @inheritdoc IERC20 - */ - function transfer(address to_, uint256 amount_) public virtual override returns (bool) { - _transfer(msg.sender, to_, amount_); - - return true; - } - - /** - * @inheritdoc IERC20 - */ - function approve(address spender_, uint256 amount_) public virtual override returns (bool) { - _approve(msg.sender, spender_, amount_); - - return true; - } - - /** - * @inheritdoc IERC20 - */ - function transferFrom( - address from_, - address to_, - uint256 amount_ - ) public virtual override returns (bool) { - _spendAllowance(from_, msg.sender, amount_); - _transfer(from_, to_, amount_); - - return true; - } - - /** - * @notice Moves `amount` of tokens from `from` to `to`. - * @dev This function is not virtual, {_update} should be overridden instead. - */ - function _transfer(address from_, address to_, uint256 amount_) internal { - if (from_ == address(0)) revert SenderIsZeroAddress(); - if (to_ == address(0)) revert ReceiverIsZeroAddress(); - - _update(from_, to_, amount_); - } - - /** - * @notice Creates `amount` tokens and assigns them to `account`, increasing - * the total supply. - * @dev This function is not virtual, {_update} should be overridden instead. - */ - function _mint(address account_, uint256 amount_) internal { - if (account_ == address(0)) revert ReceiverIsZeroAddress(); - - _update(address(0), account_, amount_); - } - - /** - * @notice Destroys `amount` tokens from `account`, reducing the - * total supply. - * @dev This function is not virtual, {_update} should be overridden instead. - */ - function _burn(address account_, uint256 amount_) internal { - if (account_ == address(0)) revert SenderIsZeroAddress(); - - _update(account_, address(0), amount_); - } - - /** - * @dev Transfers a `amount` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` - * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding - * this function. - * Emits a {Transfer} event. - */ - function _update(address from_, address to_, uint256 amount_) internal virtual { - DERC20Storage storage _erc20Storage = _getErc20Storage(); - - if (from_ == address(0)) { - // Overflow check required: The rest of the code assumes that totalSupply never overflows - _erc20Storage.totalSupply += amount_; - } else { - uint256 fromBalance_ = _erc20Storage.balances[from_]; - - if (fromBalance_ < amount_) revert InsufficientBalance(from_, fromBalance_, amount_); - - unchecked { - // Overflow not possible: amount <= fromBalance <= totalSupply. - _erc20Storage.balances[from_] = fromBalance_ - amount_; - } - } - - if (to_ == address(0)) { - unchecked { - // Overflow not possible: amount <= fromBalance <= totalSupply. - _erc20Storage.totalSupply -= amount_; - } - } else { - unchecked { - // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. - _erc20Storage.balances[to_] += amount_; - } - } - - emit Transfer(from_, to_, amount_); - } - - /** - * @notice Sets `amount` as the allowance of `spender` over the `owner` s tokens. - */ - function _approve(address owner_, address spender_, uint256 amount_) internal virtual { - if (owner_ == address(0)) revert ApproverIsZeroAddress(); - if (spender_ == address(0)) revert SpenderIsZeroAddress(); - - _getErc20Storage().allowances[owner_][spender_] = amount_; - - emit Approval(owner_, spender_, amount_); - } - - /** - * @notice Updates `owner` s allowance for `spender` based on spent `amount`. - */ - function _spendAllowance(address owner_, address spender_, uint256 amount_) internal virtual { - uint256 currentAllowance_ = allowance(owner_, spender_); - - if (currentAllowance_ != type(uint256).max) { - if (currentAllowance_ < amount_) - revert InsufficientAllowance(spender_, currentAllowance_, amount_); - - unchecked { - _approve(owner_, spender_, currentAllowance_ - amount_); - } - } - } -} diff --git a/contracts/diamond/tokens/ERC721/ADiamondERC721Storage.sol b/contracts/diamond/tokens/ERC721/ADiamondERC721Storage.sol deleted file mode 100644 index 4838a914..00000000 --- a/contracts/diamond/tokens/ERC721/ADiamondERC721Storage.sol +++ /dev/null @@ -1,205 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; -import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; -import {IERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; -import {IERC721Metadata} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; -import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; - -import {DiamondERC165} from "../../introspection/DiamondERC165.sol"; -import {AInitializableStorage} from "../../utils/AInitializableStorage.sol"; - -/** - * @notice The Diamond standard module - * - * This is an ERC721 token Storage contract with Diamond Standard support - */ -abstract contract ADiamondERC721Storage is - AInitializableStorage, - DiamondERC165, - IERC721, - IERC721Metadata -{ - using Strings for uint256; - - bytes32 public constant DIAMOND_ERC721_STORAGE_SLOT = - keccak256("diamond.standard.diamond.erc721.storage"); - - struct DERC721Storage { - string name; - string symbol; - uint256[] allTokens; - mapping(uint256 => address) owners; - mapping(address => uint256) balances; - mapping(uint256 => address) tokenApprovals; - mapping(uint256 => uint256) allTokensIndex; - mapping(uint256 => uint256) ownedTokensIndex; - mapping(address => mapping(address => bool)) operatorApprovals; - mapping(address => mapping(uint256 => uint256)) ownedTokens; - } - - error IndexOutOfBounds(uint256 index); - error NonexistentToken(uint256 tokenId); - error OwnerIndexOutOfBounds(address owner, uint256 index); - - function _getErc721Storage() internal pure returns (DERC721Storage storage _erc721Storage) { - bytes32 slot_ = DIAMOND_ERC721_STORAGE_SLOT; - - assembly { - _erc721Storage.slot := slot_ - } - } - - /** - * @inheritdoc IERC165 - */ - function supportsInterface( - bytes4 interfaceId_ - ) public view virtual override(DiamondERC165, IERC165) returns (bool) { - return - interfaceId_ == type(IERC721).interfaceId || - interfaceId_ == type(IERC721Metadata).interfaceId || - interfaceId_ == type(IERC721Enumerable).interfaceId || - super.supportsInterface(interfaceId_); - } - - /** - * @notice The function to get the name of the token. - * @return The name of the token. - */ - function name() public view virtual override returns (string memory) { - return _getErc721Storage().name; - } - - /** - * @notice The function to get the symbol of the token. - * @return The symbol of the token. - */ - function symbol() public view virtual override returns (string memory) { - return _getErc721Storage().symbol; - } - - /** - * @notice The function to get the Uniform Resource Identifier (URI) for `tokenId` token. - * @return The URI of the token. - */ - function tokenURI(uint256 tokenId_) public view virtual override returns (string memory) { - _requireMinted(tokenId_); - - string memory baseURI_ = _baseURI(); - - return - bytes(baseURI_).length > 0 - ? string(abi.encodePacked(baseURI_, tokenId_.toString())) - : ""; - } - - /** - * @notice The function to get total amount of minted tokens. - * @return The amount of minted tokens. - */ - function totalSupply() public view virtual returns (uint256) { - return _getErc721Storage().allTokens.length; - } - - /** - * @inheritdoc IERC721 - */ - function balanceOf(address owner_) public view virtual override returns (uint256) { - return _getErc721Storage().balances[owner_]; - } - - /** - * @notice This function allows you to retrieve the NFT token ID for a specific owner at a specified index. - */ - function tokenOfOwnerByIndex( - address owner_, - uint256 index_ - ) public view virtual returns (uint256) { - if (index_ >= balanceOf(owner_)) revert OwnerIndexOutOfBounds(owner_, index_); - - return _getErc721Storage().ownedTokens[owner_][index_]; - } - - /** - * @notice This function allows you to retrieve the NFT token ID at a given `index` of all the tokens stored by the contract. - */ - function tokenByIndex(uint256 index_) public view virtual returns (uint256) { - if (index_ >= totalSupply()) revert IndexOutOfBounds(index_); - - return _getErc721Storage().allTokens[index_]; - } - - /** - * @inheritdoc IERC721 - */ - function ownerOf(uint256 tokenId_) public view virtual override returns (address) { - address owner = _ownerOf(tokenId_); - - if (owner == address(0)) revert NonexistentToken(tokenId_); - - return owner; - } - - /** - * @inheritdoc IERC721 - */ - function getApproved(uint256 tokenId_) public view virtual override returns (address) { - _requireMinted(tokenId_); - - return _getErc721Storage().tokenApprovals[tokenId_]; - } - - /** - * @inheritdoc IERC721 - */ - function isApprovedForAll( - address owner_, - address operator_ - ) public view virtual override returns (bool) { - return _getErc721Storage().operatorApprovals[owner_][operator_]; - } - - /** - * @notice This function that returns the base URI that can be used to construct the URI for retrieving metadata related to the NFT collection. - */ - function _baseURI() internal view virtual returns (string memory) { - return ""; - } - - /** - * @notice The function that reverts if the `tokenId` has not been minted yet. - */ - function _requireMinted(uint256 tokenId_) internal view virtual { - if (!_exists(tokenId_)) revert NonexistentToken(tokenId_); - } - - /** - * @notice The function that returns whether `tokenId` exists. - */ - function _exists(uint256 tokenId_) internal view virtual returns (bool) { - return _ownerOf(tokenId_) != address(0); - } - - /** - * @notice The function that returns the owner of the `tokenId`. Does NOT revert if token doesn't exist. - */ - function _ownerOf(uint256 tokenId_) internal view virtual returns (address) { - return _getErc721Storage().owners[tokenId_]; - } - - /** - * @notice The function that returns whether `spender` is allowed to manage `tokenId`. - */ - function _isApprovedOrOwner( - address spender_, - uint256 tokenId_ - ) internal view virtual returns (bool) { - address owner = ownerOf(tokenId_); - - return (spender_ == owner || - isApprovedForAll(owner, spender_) || - getApproved(tokenId_) == spender_); - } -} diff --git a/contracts/diamond/tokens/ERC721/DiamondERC721.sol b/contracts/diamond/tokens/ERC721/DiamondERC721.sol deleted file mode 100644 index 4239a61c..00000000 --- a/contracts/diamond/tokens/ERC721/DiamondERC721.sol +++ /dev/null @@ -1,329 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -// solhint-disable-next-line no-unused-import -import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; -import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; - -import {ADiamondERC721Storage} from "./ADiamondERC721Storage.sol"; - -/** - * @notice The Diamond standard module - * - * This is modified version of OpenZeppelin's ERC721 contract to be used as a Storage contract - * by the Diamond Standard. - */ -contract DiamondERC721 is ADiamondERC721Storage { - error ApproveToCaller(address caller); - error ApprovalToCurrentOwner(address owner, uint256 tokenId); - error ConsecutiveTransfersNotSupported(); - error InvalidApprover(address approver, address owner); - error InvalidSpender(address spender, uint256 tokenId); - error NonERC721Receiver(address receiver); - error ReceiverIsZeroAddress(); - error TokenAlreadyMinted(uint256 tokenId); - error UnauthorizedAccount(address account); - - /** - * @notice Sets the values for {name} and {symbol}. - */ - function __DiamondERC721_init( - string memory name_, - string memory symbol_ - ) internal onlyInitializing(DIAMOND_ERC721_STORAGE_SLOT) { - DERC721Storage storage _erc721Storage = _getErc721Storage(); - - _erc721Storage.name = name_; - _erc721Storage.symbol = symbol_; - } - - /** - * @inheritdoc IERC721 - */ - function approve(address to_, uint256 tokenId_) public virtual override { - address owner_ = ownerOf(tokenId_); - - if (to_ == owner_) revert ApprovalToCurrentOwner(owner_, tokenId_); - if (msg.sender != owner_ && !isApprovedForAll(owner_, msg.sender)) - revert InvalidApprover(msg.sender, owner_); - - _approve(to_, tokenId_); - } - - /** - * @inheritdoc IERC721 - */ - function setApprovalForAll(address operator_, bool approved_) public virtual override { - _setApprovalForAll(msg.sender, operator_, approved_); - } - - /** - * @inheritdoc IERC721 - */ - function transferFrom(address from_, address to_, uint256 tokenId_) public virtual override { - if (!_isApprovedOrOwner(msg.sender, tokenId_)) revert InvalidSpender(msg.sender, tokenId_); - - _transfer(from_, to_, tokenId_); - } - - /** - * @inheritdoc IERC721 - */ - function safeTransferFrom( - address from_, - address to_, - uint256 tokenId_ - ) public virtual override { - safeTransferFrom(from_, to_, tokenId_, ""); - } - - /** - * @inheritdoc IERC721 - */ - function safeTransferFrom( - address from_, - address to_, - uint256 tokenId_, - bytes memory data_ - ) public virtual override { - if (!_isApprovedOrOwner(msg.sender, tokenId_)) revert InvalidSpender(msg.sender, tokenId_); - - _safeTransfer(from_, to_, tokenId_, data_); - } - - /** - * @notice Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients - * are aware of the ERC721 protocol to prevent tokens from being forever locked. - */ - function _safeTransfer( - address from_, - address to_, - uint256 tokenId_, - bytes memory data_ - ) internal virtual { - _transfer(from_, to_, tokenId_); - - if (!_checkOnERC721Received(from_, to_, tokenId_, data_)) revert NonERC721Receiver(to_); - } - - /** - * @notice Safely mints `tokenId` and transfers it to `to`. - */ - function _safeMint(address to_, uint256 tokenId_) internal virtual { - _safeMint(to_, tokenId_, ""); - } - - /** - * @notice Same as _safeMint, with an additional `data` parameter. - */ - function _safeMint(address to_, uint256 tokenId_, bytes memory data_) internal virtual { - _mint(to_, tokenId_); - - if (!_checkOnERC721Received(address(0), to_, tokenId_, data_)) - revert NonERC721Receiver(to_); - } - - /** - * @notice Mints `tokenId` and transfers it to `to`. - * @dev This function is not virtual, {_update} should be overridden instead. - */ - function _mint(address to_, uint256 tokenId_) internal { - if (to_ == address(0)) revert ReceiverIsZeroAddress(); - if (_exists(tokenId_)) revert TokenAlreadyMinted(tokenId_); - - address previousOwner_ = _update(to_, tokenId_, 1); - - if (previousOwner_ != address(0)) revert TokenAlreadyMinted(tokenId_); - } - - /** - * @notice Destroys `tokenId`. - * @dev This function is not virtual, {_update} should be overridden instead. - */ - function _burn(uint256 tokenId_) internal { - address owner_ = _update(address(0), tokenId_, 1); - - if (owner_ == address(0)) revert NonexistentToken(tokenId_); - } - - /** - * @notice Transfers `tokenId` from `from` to `to`. - * @dev This function is not virtual, {_update} should be overridden instead. - */ - function _transfer(address from_, address to_, uint256 tokenId_) internal { - if (to_ == address(0)) revert ReceiverIsZeroAddress(); - - address previousOwner_ = _update(to_, tokenId_, 1); - - if (previousOwner_ == address(0)) { - revert NonexistentToken(tokenId_); - } else if (previousOwner_ != from_) { - revert UnauthorizedAccount(from_); - } - } - - /** - * @notice Transfers `tokenId` from its current owner to `to`, or alternatively mints (or burns) if the - * current owner (or `to`) is the zero address. Returns the owner of the `tokenId` before the update. - * Emits a {Transfer} event. - */ - function _update( - address to_, - uint256 tokenId_, - uint256 batchSize_ - ) internal virtual returns (address) { - if (batchSize_ > 1) { - // Will only trigger during construction. Batch transferring (minting) is not available afterwards. - revert ConsecutiveTransfersNotSupported(); - } - - DERC721Storage storage _erc721Storage = _getErc721Storage(); - - address from_ = _ownerOf(tokenId_); - - if (from_ == address(0)) { - _addTokenToAllTokensEnumeration(tokenId_); - } else { - if (from_ != to_) { - _removeTokenFromOwnerEnumeration(from_, tokenId_); - } - - delete _erc721Storage.tokenApprovals[tokenId_]; - - unchecked { - _erc721Storage.balances[from_] -= 1; - } - } - - if (to_ == address(0)) { - _removeTokenFromAllTokensEnumeration(tokenId_); - } else { - if (to_ != from_) { - _addTokenToOwnerEnumeration(to_, tokenId_); - } - - unchecked { - _erc721Storage.balances[to_] += 1; - } - } - - _getErc721Storage().owners[tokenId_] = to_; - - emit Transfer(from_, to_, tokenId_); - - return from_; - } - - /** - * @notice Approve `to` to operate on `tokenId`. - */ - function _approve(address to_, uint256 tokenId_) internal virtual { - _getErc721Storage().tokenApprovals[tokenId_] = to_; - - emit Approval(ownerOf(tokenId_), to_, tokenId_); - } - - /** - * @notice Approve `operator` to operate on all of `owner` tokens. - */ - function _setApprovalForAll( - address owner_, - address operator_, - bool approved_ - ) internal virtual { - if (owner_ == operator_) revert ApproveToCaller(owner_); - - _getErc721Storage().operatorApprovals[owner_][operator_] = approved_; - - emit ApprovalForAll(owner_, operator_, approved_); - } - - /** - * @notice Function to check if the 'to' can receive token. - * The call is not executed if the target address is not a contract. - */ - function _checkOnERC721Received( - address from_, - address to_, - uint256 tokenId_, - bytes memory data_ - ) internal virtual returns (bool) { - if (to_.code.length > 0) { - try IERC721Receiver(to_).onERC721Received(msg.sender, from_, tokenId_, data_) returns ( - bytes4 retval - ) { - return retval == IERC721Receiver.onERC721Received.selector; - } catch (bytes memory reason) { - if (reason.length == 0) { - revert NonERC721Receiver(to_); - } else { - // @solidity memory-safe-assembly - assembly { - revert(add(32, reason), mload(reason)) - } - } - } - } else { - return true; - } - } - - /** - * @notice Private function to add a token to ownership-tracking data structures. - */ - function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { - DERC721Storage storage _erc721Storage = _getErc721Storage(); - - uint256 length_ = balanceOf(to); - _erc721Storage.ownedTokens[to][length_] = tokenId; - _erc721Storage.ownedTokensIndex[tokenId] = length_; - } - - /** - * @notice Private function to add a token to token tracking data structures. - */ - function _addTokenToAllTokensEnumeration(uint256 tokenId) private { - DERC721Storage storage _erc721Storage = _getErc721Storage(); - - _erc721Storage.allTokensIndex[tokenId] = _erc721Storage.allTokens.length; - _erc721Storage.allTokens.push(tokenId); - } - - /** - * @dev Private function to remove a token from ownership-tracking data structures. - */ - function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { - DERC721Storage storage _erc721Storage = _getErc721Storage(); - - uint256 lastTokenIndex_ = balanceOf(from) - 1; - uint256 tokenIndex_ = _erc721Storage.ownedTokensIndex[tokenId]; - - if (tokenIndex_ != lastTokenIndex_) { - uint256 lastTokenId = _erc721Storage.ownedTokens[from][lastTokenIndex_]; - - _erc721Storage.ownedTokens[from][tokenIndex_] = lastTokenId; - _erc721Storage.ownedTokensIndex[lastTokenId] = tokenIndex_; - } - - delete _erc721Storage.ownedTokensIndex[tokenId]; - delete _erc721Storage.ownedTokens[from][lastTokenIndex_]; - } - - /** - * @dev Private function to remove a token from token tracking data structures. - */ - function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { - DERC721Storage storage _erc721Storage = _getErc721Storage(); - - // "swap and pop" pattern is used - uint256 lastTokenIndex_ = _erc721Storage.allTokens.length - 1; - uint256 tokenIndex_ = _erc721Storage.allTokensIndex[tokenId]; - uint256 lastTokenId_ = _erc721Storage.allTokens[lastTokenIndex_]; - - _erc721Storage.allTokens[tokenIndex_] = lastTokenId_; - _erc721Storage.allTokensIndex[lastTokenId_] = tokenIndex_; - - delete _erc721Storage.allTokensIndex[tokenId]; - _erc721Storage.allTokens.pop(); - } -} diff --git a/contracts/diamond/introspection/DiamondERC165.sol b/contracts/diamond/utils/DiamondERC165.sol similarity index 100% rename from contracts/diamond/introspection/DiamondERC165.sol rename to contracts/diamond/utils/DiamondERC165.sol diff --git a/contracts/finance/compound-rate-keeper/ACompoundRateKeeper.sol b/contracts/finance/compound-rate-keeper/ACompoundRateKeeper.sol index 6cabc5ec..c0709b75 100644 --- a/contracts/finance/compound-rate-keeper/ACompoundRateKeeper.sol +++ b/contracts/finance/compound-rate-keeper/ACompoundRateKeeper.sol @@ -28,14 +28,17 @@ import {PRECISION} from "../../utils/Globals.sol"; abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { using Math for uint256; - uint256 private _capitalizationRate; - uint64 private _capitalizationPeriod; - - uint64 private _lastUpdate; - - bool private _isMaxRateReached; + struct ACompoundRateKeeperStorage { + uint256 capitalizationRate; + uint64 capitalizationPeriod; + uint64 lastUpdate; + bool isMaxRateReached; + uint256 currentRate; + } - uint256 private _currentRate; + // bytes32(uint256(keccak256("solarity.contract.ACompoundRateKeeper")) - 1) + bytes32 private constant A_COMPOUND_RATE_KEEPER_STORAGE = + 0x061532485bc23876878e1c65fc8e0ea01501853558743d08806f3509197f1f11; error CapitalizationPeriodIsZero(); error MaxRateIsReached(); @@ -48,8 +51,10 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { uint256 capitalizationRate_, uint64 capitalizationPeriod_ ) internal onlyInitializing { - _currentRate = PRECISION; - _lastUpdate = uint64(block.timestamp); + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + + $.currentRate = PRECISION; + $.lastUpdate = uint64(block.timestamp); _changeCapitalizationRate(capitalizationRate_); _changeCapitalizationPeriod(capitalizationPeriod_); @@ -59,12 +64,14 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { * @notice The function to force-update the compound rate if the getter reverts, sets isMaxRateReached to true */ function emergencyUpdateCompoundRate() public override { + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + try this.getCompoundRate() returns (uint256 rate_) { if (rate_ == _getMaxRate()) { - _isMaxRateReached = true; + $.isMaxRateReached = true; } } catch { - _isMaxRateReached = true; + $.isMaxRateReached = true; } } @@ -82,24 +89,26 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { * @return the compound rate for the provided timestamp */ function getFutureCompoundRate(uint64 timestamp_) public view override returns (uint256) { - if (_isMaxRateReached) { + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + + if ($.isMaxRateReached) { return _getMaxRate(); } - uint64 lastUpdate_ = _lastUpdate; + uint64 lastUpdate_ = $.lastUpdate; if (lastUpdate_ >= timestamp_) { - return _currentRate; + return $.currentRate; } uint64 secondsPassed_ = timestamp_ - lastUpdate_; - uint64 capitalizationPeriod_ = _capitalizationPeriod; + uint64 capitalizationPeriod_ = $.capitalizationPeriod; uint64 capitalizationPeriodsNum_ = secondsPassed_ / capitalizationPeriod_; uint64 secondsLeft_ = secondsPassed_ % capitalizationPeriod_; - uint256 capitalizationRate_ = _capitalizationRate; - uint256 rate_ = _currentRate; + uint256 capitalizationRate_ = $.capitalizationRate; + uint256 rate_ = $.currentRate; if (capitalizationPeriodsNum_ != 0) { uint256 capitalizationPeriodRate_ = _raiseToPower( @@ -124,7 +133,9 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { * @return capitalizationRate_ the current capitalization rate */ function getCapitalizationRate() public view returns (uint256 capitalizationRate_) { - return _capitalizationRate; + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + + return $.capitalizationRate; } /** @@ -132,7 +143,9 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { * @return capitalizationPeriod_ the current capitalization period */ function getCapitalizationPeriod() public view returns (uint64 capitalizationPeriod_) { - return _capitalizationPeriod; + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + + return $.capitalizationPeriod; } /** @@ -140,7 +153,9 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { * @return lastUpdate_ the timestamp of the last update */ function getLastUpdate() public view returns (uint64 lastUpdate_) { - return _lastUpdate; + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + + return $.lastUpdate; } /** @@ -148,7 +163,9 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { * @return isMaxRateReached_ the boolean indicating if the max rate is reached */ function getIsMaxRateReached() public view returns (bool isMaxRateReached_) { - return _isMaxRateReached; + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + + return $.isMaxRateReached; } /** @@ -156,7 +173,9 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { * @return currentRate_ the current rate */ function getCurrentRate() public view returns (uint256 currentRate_) { - return _currentRate; + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + + return $.currentRate; } /** @@ -181,10 +200,12 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { * @notice The private function to update the compound rate */ function _update() private { - if (_isMaxRateReached) revert MaxRateIsReached(); + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + + if ($.isMaxRateReached) revert MaxRateIsReached(); - _currentRate = getCompoundRate(); - _lastUpdate = uint64(block.timestamp); + $.currentRate = getCompoundRate(); + $.lastUpdate = uint64(block.timestamp); } /** @@ -193,7 +214,9 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { function _changeCapitalizationRate(uint256 capitalizationRate_) private { if (capitalizationRate_ < PRECISION) revert RateIsLessThanOne(capitalizationRate_); - _capitalizationRate = capitalizationRate_; + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + + $.capitalizationRate = capitalizationRate_; emit CapitalizationRateChanged(capitalizationRate_); } @@ -204,7 +227,9 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { function _changeCapitalizationPeriod(uint64 capitalizationPeriod_) private { if (capitalizationPeriod_ == 0) revert CapitalizationPeriodIsZero(); - _capitalizationPeriod = capitalizationPeriod_; + ACompoundRateKeeperStorage storage $ = _getACompoundRateKeeperStorage(); + + $.capitalizationPeriod = capitalizationPeriod_; emit CapitalizationPeriodChanged(capitalizationPeriod_); } @@ -234,4 +259,17 @@ abstract contract ACompoundRateKeeper is ICompoundRateKeeper, Initializable { function _getMaxRate() private pure returns (uint256) { return type(uint128).max * PRECISION; } + + /** + * @dev Returns a pointer to the storage namespace + */ + function _getACompoundRateKeeperStorage() + private + pure + returns (ACompoundRateKeeperStorage storage $) + { + assembly { + $.slot := A_COMPOUND_RATE_KEEPER_STORAGE + } + } } diff --git a/contracts/finance/compound-rate-keeper/presets/OwnableCompoundRateKeeper.sol b/contracts/finance/compound-rate-keeper/presets/OwnableCompoundRateKeeper.sol deleted file mode 100644 index cf0f92bc..00000000 --- a/contracts/finance/compound-rate-keeper/presets/OwnableCompoundRateKeeper.sol +++ /dev/null @@ -1,40 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.21; - -import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; - -import {ACompoundRateKeeper} from "../ACompoundRateKeeper.sol"; - -/** - * @notice The Ownable preset of CompoundRateKeeper - */ -contract OwnableCompoundRateKeeper is ACompoundRateKeeper, OwnableUpgradeable { - /** - * @notice The initialization function - * @param capitalizationRate_ the compound interest rate with 10\**25 precision - * @param capitalizationPeriod_ the compounding period in seconds - */ - function __OwnableCompoundRateKeeper_init( - uint256 capitalizationRate_, - uint64 capitalizationPeriod_ - ) public initializer { - __Ownable_init(msg.sender); - __ACompoundRateKeeper_init(capitalizationRate_, capitalizationPeriod_); - } - - /** - * The function to set the compound interest rate - * @param capitalizationRate_ new compound interest rate - */ - function setCapitalizationRate(uint256 capitalizationRate_) external onlyOwner { - _setCapitalizationRate(capitalizationRate_); - } - - /** - * @notice The function to set the compounding period - * @param capitalizationPeriod_ new compounding period in seconds - */ - function setCapitalizationPeriod(uint64 capitalizationPeriod_) external onlyOwner { - _setCapitalizationPeriod(capitalizationPeriod_); - } -} diff --git a/contracts/finance/staking/AStaking.sol b/contracts/finance/staking/AStaking.sol index c55d2541..ac54c6cb 100644 --- a/contracts/finance/staking/AStaking.sol +++ b/contracts/finance/staking/AStaking.sol @@ -15,21 +15,25 @@ import {AValueDistributor} from "./AValueDistributor.sol"; abstract contract AStaking is AValueDistributor, Initializable { using SafeERC20 for IERC20; - address private _sharesToken; - address private _rewardsToken; - - /** - * @dev The rate of rewards distribution per second. - * - * It determines the rate at which rewards are earned and distributed - * to stakers based on their shares. - * - * Note: Ensure that the `_rate` value is set correctly to match - * the decimal precision of the `_rewardsToken` to ensure accurate rewards distribution. - */ - uint256 private _rate; + struct AStakingStorage { + address sharesToken; + address rewardsToken; + /** + * @dev The rate of rewards distribution per second. + * + * It determines the rate at which rewards are earned and distributed + * to stakers based on their shares. + * + * Note: Ensure that the `rate` value is set correctly to match + * the decimal precision of the `rewardsToken` to ensure accurate rewards distribution. + */ + uint256 rate; + uint256 stakingStartTime; + } - uint256 private _stakingStartTime; + // bytes32(uint256(keccak256("solarity.contract.AStaking")) - 1) + bytes32 private constant A_STAKING_STORAGE = + 0xee54d165e3c91d57e07d52c1ebabdcdcd7404fd069d2a193b47e3d9262448543; error RewardsTokenIsZeroAddress(); error SharesTokenIsZeroAddress(); @@ -63,8 +67,10 @@ abstract contract AStaking is AValueDistributor, Initializable { if (sharesToken_ == address(0)) revert SharesTokenIsZeroAddress(); if (rewardsToken_ == address(0)) revert RewardsTokenIsZeroAddress(); - _sharesToken = sharesToken_; - _rewardsToken = rewardsToken_; + AStakingStorage storage $ = _getAStakingStorage(); + + $.sharesToken = sharesToken_; + $.rewardsToken = rewardsToken_; _setRate(rate_); _setStakingStartTime(stakingStartTime_); } @@ -125,7 +131,9 @@ abstract contract AStaking is AValueDistributor, Initializable { * @return The address of the shares token contract. */ function sharesToken() public view returns (address) { - return _sharesToken; + AStakingStorage storage $ = _getAStakingStorage(); + + return $.sharesToken; } /** @@ -133,7 +141,9 @@ abstract contract AStaking is AValueDistributor, Initializable { * @return The address of the rewards token contract. */ function rewardsToken() public view returns (address) { - return _rewardsToken; + AStakingStorage storage $ = _getAStakingStorage(); + + return $.rewardsToken; } /** @@ -141,7 +151,9 @@ abstract contract AStaking is AValueDistributor, Initializable { * @return The timestamp when staking starts. */ function stakingStartTime() public view returns (uint256) { - return _stakingStartTime; + AStakingStorage storage $ = _getAStakingStorage(); + + return $.stakingStartTime; } /** @@ -149,7 +161,9 @@ abstract contract AStaking is AValueDistributor, Initializable { * @return The rate of rewards distribution per second. */ function rate() public view returns (uint256) { - return _rate; + AStakingStorage storage $ = _getAStakingStorage(); + + return $.rate; } /** @@ -157,7 +171,9 @@ abstract contract AStaking is AValueDistributor, Initializable { * @param stakingStartTime_ The timestamp when staking will start. */ function _setStakingStartTime(uint256 stakingStartTime_) internal { - _stakingStartTime = stakingStartTime_; + AStakingStorage storage $ = _getAStakingStorage(); + + $.stakingStartTime = stakingStartTime_; } /** @@ -167,7 +183,9 @@ abstract contract AStaking is AValueDistributor, Initializable { function _setRate(uint256 newRate_) internal { _update(address(0)); - _rate = newRate_; + AStakingStorage storage $ = _getAStakingStorage(); + + $.rate = newRate_; } /** @@ -176,7 +194,9 @@ abstract contract AStaking is AValueDistributor, Initializable { * @param amount_ The amount of shares added. */ function _afterAddShares(address user_, uint256 amount_) internal virtual override { - IERC20(_sharesToken).safeTransferFrom(user_, address(this), amount_); + AStakingStorage storage $ = _getAStakingStorage(); + + IERC20($.sharesToken).safeTransferFrom(user_, address(this), amount_); } /** @@ -185,7 +205,9 @@ abstract contract AStaking is AValueDistributor, Initializable { * @param amount_ The amount of shares removed. */ function _afterRemoveShares(address user_, uint256 amount_) internal virtual override { - IERC20(_sharesToken).safeTransfer(user_, amount_); + AStakingStorage storage $ = _getAStakingStorage(); + + IERC20($.sharesToken).safeTransfer(user_, amount_); } /** @@ -194,15 +216,19 @@ abstract contract AStaking is AValueDistributor, Initializable { * @param amount_ The amount of value distributed. */ function _afterDistributeValue(address user_, uint256 amount_) internal virtual override { - IERC20(_rewardsToken).safeTransfer(user_, amount_); + AStakingStorage storage $ = _getAStakingStorage(); + + IERC20($.rewardsToken).safeTransfer(user_, amount_); } /** * @dev Throws if the staking has not started yet. */ function _checkStakingStarted() internal view { - if (block.timestamp < _stakingStartTime) - revert StakingHasNotStarted(block.timestamp, _stakingStartTime); + AStakingStorage storage $ = _getAStakingStorage(); + + if (block.timestamp < $.stakingStartTime) + revert StakingHasNotStarted(block.timestamp, $.stakingStartTime); } /** @@ -215,6 +241,17 @@ abstract contract AStaking is AValueDistributor, Initializable { uint256 timeUpTo_, uint256 timeLastUpdate_ ) internal view virtual override returns (uint256) { - return _rate * (timeUpTo_ - timeLastUpdate_); + AStakingStorage storage $ = _getAStakingStorage(); + + return $.rate * (timeUpTo_ - timeLastUpdate_); + } + + /** + * @dev Returns a pointer to the storage namespace + */ + function _getAStakingStorage() private pure returns (AStakingStorage storage $) { + assembly { + $.slot := A_STAKING_STORAGE + } } } diff --git a/contracts/finance/staking/AValueDistributor.sol b/contracts/finance/staking/AValueDistributor.sol index 35211b2d..8948d1a5 100644 --- a/contracts/finance/staking/AValueDistributor.sol +++ b/contracts/finance/staking/AValueDistributor.sol @@ -24,11 +24,16 @@ abstract contract AValueDistributor { uint256 owedValue; } - uint256 private _totalShares; - uint256 private _cumulativeSum; - uint256 private _updatedAt; + struct AValueDistributorStorage { + uint256 totalShares; + uint256 cumulativeSum; + uint256 updatedAt; + mapping(address user => UserDistribution distribution) userDistributions; + } - mapping(address => UserDistribution) private _userDistributions; + // bytes32(uint256(keccak256("solarity.contract.AValueDistributor")) - 1) + bytes32 private constant A_VALUE_DISTRIBUTOR_STORAGE = + 0x3787c5369be7468820c1967d258d594c4479f12333b91d3edff0bcbb43e7bf8f; event SharesAdded(address user, uint256 amount); event SharesRemoved(address user, uint256 amount); @@ -44,7 +49,9 @@ abstract contract AValueDistributor { * @return The total number of shares. */ function totalShares() public view returns (uint256) { - return _totalShares; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + return $.totalShares; } /** @@ -52,7 +59,9 @@ abstract contract AValueDistributor { * @return The cumulative sum of value that has been distributed. */ function cumulativeSum() public view returns (uint256) { - return _cumulativeSum; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + return $.cumulativeSum; } /** @@ -60,7 +69,9 @@ abstract contract AValueDistributor { * @return The timestamp of the last update. */ function updatedAt() public view returns (uint256) { - return _updatedAt; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + return $.updatedAt; } /** @@ -69,7 +80,9 @@ abstract contract AValueDistributor { * @return The distribution details including user's shares, cumulative sum and value owed. */ function userDistribution(address user_) public view returns (UserDistribution memory) { - return _userDistributions[user_]; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + return $.userDistributions[user_]; } /** @@ -78,7 +91,9 @@ abstract contract AValueDistributor { * @return The total owed value to the user. */ function getOwedValue(address user_) public view returns (uint256) { - UserDistribution storage userDist = _userDistributions[user_]; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + UserDistribution storage userDist = $.userDistributions[user_]; return (userDist.shares * @@ -98,8 +113,10 @@ abstract contract AValueDistributor { _update(user_); - _totalShares += amount_; - _userDistributions[user_].shares += amount_; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + $.totalShares += amount_; + $.userDistributions[user_].shares += amount_; emit SharesAdded(user_, amount_); @@ -112,7 +129,9 @@ abstract contract AValueDistributor { * @param amount_ The amount of shares to remove. */ function _removeShares(address user_, uint256 amount_) internal virtual { - UserDistribution storage _userDist = _userDistributions[user_]; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + UserDistribution storage _userDist = $.userDistributions[user_]; if (amount_ == 0) revert AmountIsZero(); if (amount_ > _userDist.shares) @@ -120,7 +139,7 @@ abstract contract AValueDistributor { _update(user_); - _totalShares -= amount_; + $.totalShares -= amount_; _userDist.shares -= amount_; emit SharesRemoved(user_, amount_); @@ -136,7 +155,9 @@ abstract contract AValueDistributor { function _distributeValue(address user_, uint256 amount_) internal virtual { _update(user_); - UserDistribution storage _userDist = _userDistributions[user_]; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + UserDistribution storage _userDist = $.userDistributions[user_]; if (amount_ == 0) revert AmountIsZero(); if (amount_ > _userDist.owedValue) @@ -157,7 +178,9 @@ abstract contract AValueDistributor { function _distributeAllValue(address user_) internal virtual returns (uint256) { _update(user_); - UserDistribution storage _userDist = _userDistributions[user_]; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + UserDistribution storage _userDist = $.userDistributions[user_]; uint256 amount_ = _userDist.owedValue; @@ -213,16 +236,18 @@ abstract contract AValueDistributor { * @param user_ The address of the user. */ function _update(address user_) internal { - _cumulativeSum = _getFutureCumulativeSum(block.timestamp); - _updatedAt = block.timestamp; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + $.cumulativeSum = _getFutureCumulativeSum(block.timestamp); + $.updatedAt = block.timestamp; if (user_ != address(0)) { - UserDistribution storage _userDist = _userDistributions[user_]; + UserDistribution storage _userDist = $.userDistributions[user_]; _userDist.owedValue += - (_userDist.shares * (_cumulativeSum - _userDist.cumulativeSum)) / + (_userDist.shares * ($.cumulativeSum - _userDist.cumulativeSum)) / PRECISION; - _userDist.cumulativeSum = _cumulativeSum; + _userDist.cumulativeSum = $.cumulativeSum; } } @@ -246,12 +271,27 @@ abstract contract AValueDistributor { * @return The future cumulative sum of value per token staked that has been distributed. */ function _getFutureCumulativeSum(uint256 timeUpTo_) internal view returns (uint256) { - if (_totalShares == 0) { - return _cumulativeSum; + AValueDistributorStorage storage $ = _getAValueDistributorStorage(); + + if ($.totalShares == 0) { + return $.cumulativeSum; } - uint256 value_ = _getValueToDistribute(timeUpTo_, _updatedAt); + uint256 value_ = _getValueToDistribute(timeUpTo_, $.updatedAt); - return _cumulativeSum + (value_ * PRECISION) / _totalShares; + return $.cumulativeSum + (value_ * PRECISION) / $.totalShares; + } + + /** + * @dev Returns a pointer to the storage namespace + */ + function _getAValueDistributorStorage() + private + pure + returns (AValueDistributorStorage storage $) + { + assembly { + $.slot := A_VALUE_DISTRIBUTOR_STORAGE + } } } diff --git a/contracts/finance/vesting/AVesting.sol b/contracts/finance/vesting/AVesting.sol index 77700c07..2e51d184 100644 --- a/contracts/finance/vesting/AVesting.sol +++ b/contracts/finance/vesting/AVesting.sol @@ -102,17 +102,19 @@ abstract contract AVesting is Initializable { uint256 scheduleId; } - uint256 public constant LINEAR_EXPONENT = 1; + struct AVestingStorage { + uint256 scheduleId; + uint256 vestingId; + mapping(uint256 id => Schedule schedule) schedules; + mapping(uint256 id => VestingData vesting) vestings; + mapping(address beneficiary => EnumerableSet.UintSet vesting_ids) beneficiaryIds; + } - uint256 public scheduleId; - uint256 public vestingId; + uint256 public constant LINEAR_EXPONENT = 1; - // id => schedule - mapping(uint256 => Schedule) private _schedules; - // id => vesting - mapping(uint256 => VestingData) private _vestings; - // beneficiary => vesting ids - mapping(address => EnumerableSet.UintSet) private _beneficiaryIds; + // bytes32(uint256(keccak256("solarity.contract.AVesting")) - 1); + bytes32 private constant A_VESTING_STORAGE = + 0xee07efa6f2a5c4bf7120115c09072706624f99551950f190e3ef74cf14f394d1; /** * @notice Emitted when a new schedule is created. @@ -156,7 +158,9 @@ abstract contract AVesting is Initializable { * @param vestingId_ The ID of the vesting contract. */ function withdrawFromVesting(uint256 vestingId_) public virtual { - VestingData storage _vesting = _vestings[vestingId_]; + AVestingStorage storage $ = _getAVestingStorage(); + + VestingData storage _vesting = $.vestings[vestingId_]; if (msg.sender != _vesting.beneficiary) revert UnauthorizedAccount(msg.sender); if (_vesting.paidAmount >= _vesting.vestingAmount) revert NothingToWithdraw(); @@ -177,7 +181,9 @@ abstract contract AVesting is Initializable { * @return Schedule struct. */ function getSchedule(uint256 scheduleId_) public view virtual returns (Schedule memory) { - return _schedules[scheduleId_]; + AVestingStorage storage $ = _getAVestingStorage(); + + return $.schedules[scheduleId_]; } /** @@ -186,7 +192,9 @@ abstract contract AVesting is Initializable { * @return VestingData struct. */ function getVesting(uint256 vestingId_) public view virtual returns (VestingData memory) { - return _vestings[vestingId_]; + AVestingStorage storage $ = _getAVestingStorage(); + + return $.vestings[vestingId_]; } /** @@ -195,11 +203,13 @@ abstract contract AVesting is Initializable { * @return An array of VestingData struct. */ function getVestings(address beneficiary_) public view virtual returns (VestingData[] memory) { - uint256[] memory ids_ = _beneficiaryIds[beneficiary_].values(); + AVestingStorage storage $ = _getAVestingStorage(); + + uint256[] memory ids_ = $.beneficiaryIds[beneficiary_].values(); VestingData[] memory beneficiaryVestings_ = new VestingData[](ids_.length); for (uint256 i = 0; i < ids_.length; i++) { - beneficiaryVestings_[i] = _vestings[ids_[i]]; + beneficiaryVestings_[i] = $.vestings[ids_[i]]; } return beneficiaryVestings_; @@ -211,7 +221,9 @@ abstract contract AVesting is Initializable { * @return An array of uint256 representing all vesting IDs for the beneficiary. */ function getVestingIds(address beneficiary_) public view virtual returns (uint256[] memory) { - return _beneficiaryIds[beneficiary_].values(); + AVestingStorage storage $ = _getAVestingStorage(); + + return $.beneficiaryIds[beneficiary_].values(); } /** @@ -220,7 +232,9 @@ abstract contract AVesting is Initializable { * @return The amount of tokens vested. */ function getVestedAmount(uint256 vestingId_) public view virtual returns (uint256) { - VestingData storage _vesting = _vestings[vestingId_]; + AVestingStorage storage $ = _getAVestingStorage(); + + VestingData storage _vesting = $.vestings[vestingId_]; return _getVestedAmount(_vesting, _vesting.scheduleId, block.timestamp); } @@ -231,11 +245,27 @@ abstract contract AVesting is Initializable { * @return The amount of tokens available to withdraw. */ function getWithdrawableAmount(uint256 vestingId_) public view virtual returns (uint256) { - VestingData storage _vesting = _vestings[vestingId_]; + AVestingStorage storage $ = _getAVestingStorage(); + + VestingData storage _vesting = $.vestings[vestingId_]; return _getWithdrawableAmount(_vesting, _vesting.scheduleId, block.timestamp); } + /** + * @notice Returns the scheduleId + */ + function getScheduleId() public view returns (uint256) { + return _getAVestingStorage().scheduleId; + } + + /** + * @notice Returns the vestingId + */ + function getVestingId() public view returns (uint256) { + return _getAVestingStorage().vestingId; + } + /** * @notice Creates a new vesting schedule. * @dev The exponent is set to 1, making the vesting linear. @@ -247,14 +277,16 @@ abstract contract AVesting is Initializable { ) internal virtual returns (uint256) { _validateSchedule(baseSchedule_); - _schedules[++scheduleId] = Schedule({ + AVestingStorage storage $ = _getAVestingStorage(); + + $.schedules[++$.scheduleId] = Schedule({ scheduleData: baseSchedule_, exponent: LINEAR_EXPONENT }); - emit ScheduleCreated(scheduleId); + emit ScheduleCreated($.scheduleId); - return scheduleId; + return $.scheduleId; } /** @@ -267,11 +299,13 @@ abstract contract AVesting is Initializable { _validateSchedule(schedule_.scheduleData); - _schedules[++scheduleId] = schedule_; + AVestingStorage storage $ = _getAVestingStorage(); + + $.schedules[++$.scheduleId] = schedule_; - emit ScheduleCreated(scheduleId); + emit ScheduleCreated($.scheduleId); - return scheduleId; + return $.scheduleId; } /** @@ -282,7 +316,9 @@ abstract contract AVesting is Initializable { function _createVesting(VestingData memory vesting_) internal virtual returns (uint256) { _validateVesting(vesting_); - Schedule storage _schedule = _schedules[vesting_.scheduleId]; + AVestingStorage storage $ = _getAVestingStorage(); + + Schedule storage _schedule = $.schedules[vesting_.scheduleId]; if ( vesting_.vestingStartTime + @@ -291,11 +327,11 @@ abstract contract AVesting is Initializable { block.timestamp ) revert VestingPastDate(); - uint256 _currentVestingId = ++vestingId; + uint256 _currentVestingId = ++$.vestingId; - _beneficiaryIds[vesting_.beneficiary].add(_currentVestingId); + $.beneficiaryIds[vesting_.beneficiary].add(_currentVestingId); - _vestings[_currentVestingId] = vesting_; + $.vestings[_currentVestingId] = vesting_; emit VestingCreated(_currentVestingId, vesting_.beneficiary, vesting_.vestingToken); @@ -373,7 +409,9 @@ abstract contract AVesting is Initializable { uint256 vestingStartTime_, uint256 timestampUpTo_ ) internal view virtual returns (uint256 vestedAmount_) { - Schedule storage _schedule = _schedules[scheduleId_]; + AVestingStorage storage $ = _getAVestingStorage(); + + Schedule storage _schedule = $.schedules[scheduleId_]; BaseSchedule storage _baseData = _schedule.scheduleData; if (vestingStartTime_ > timestampUpTo_) { @@ -469,4 +507,13 @@ abstract contract AVesting is Initializable { } } } + + /** + * @dev Returns a pointer to the storage namespace + */ + function _getAVestingStorage() private pure returns (AVestingStorage storage $) { + assembly { + $.slot := A_VESTING_STORAGE + } + } } diff --git a/contracts/mock/contracts-registry/ContractsRegistryMock.sol b/contracts/mock/contracts-registry/ContractsRegistryMock.sol index ba5b0b4e..3e984ce4 100644 --- a/contracts/mock/contracts-registry/ContractsRegistryMock.sol +++ b/contracts/mock/contracts-registry/ContractsRegistryMock.sol @@ -2,7 +2,7 @@ // solhint-disable pragma solidity ^0.8.22; -import {OwnableContractsRegistry} from "../../contracts-registry/presets/OwnableContractsRegistry.sol"; +import {OwnableContractsRegistry} from "../../presets/contracts-registry/OwnableContractsRegistry.sol"; contract ContractsRegistryMock is OwnableContractsRegistry { string public constant DEPENDANT_NAME = "DEPENDANT"; diff --git a/contracts/mock/contracts-registry/pools/ContractsRegistryPoolMock.sol b/contracts/mock/contracts-registry/pools/ContractsRegistryPoolMock.sol index f8c4a590..5e02aa30 100644 --- a/contracts/mock/contracts-registry/pools/ContractsRegistryPoolMock.sol +++ b/contracts/mock/contracts-registry/pools/ContractsRegistryPoolMock.sol @@ -2,7 +2,7 @@ // solhint-disable pragma solidity ^0.8.22; -import {OwnableContractsRegistry} from "../../../contracts-registry/presets/OwnableContractsRegistry.sol"; +import {OwnableContractsRegistry} from "../../../presets/contracts-registry/OwnableContractsRegistry.sol"; contract ContractsRegistryPoolMock is OwnableContractsRegistry { string public constant POOL_CONTRACTS_REGISTRY_NAME = "POOL_CONTRACTS_REGISTRY"; diff --git a/contracts/mock/contracts-registry/pools/PoolContractsRegistryMock.sol b/contracts/mock/contracts-registry/pools/PoolContractsRegistryMock.sol index c1913e6c..2477c358 100644 --- a/contracts/mock/contracts-registry/pools/PoolContractsRegistryMock.sol +++ b/contracts/mock/contracts-registry/pools/PoolContractsRegistryMock.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.22; import {ContractsRegistryPoolMock} from "./ContractsRegistryPoolMock.sol"; -import {AOwnablePoolContractsRegistry} from "../../../contracts-registry/pools/presets/AOwnablePoolContractsRegistry.sol"; +import {AOwnablePoolContractsRegistry} from "../../../presets/contracts-registry/pools/AOwnablePoolContractsRegistry.sol"; contract PoolContractsRegistryMock is AOwnablePoolContractsRegistry { string public constant POOL_1_NAME = "POOL_1"; diff --git a/contracts/mock/contracts-registry/pools/pool-factory/PoolFactoryMock.sol b/contracts/mock/contracts-registry/pools/pool-factory/PoolFactoryMock.sol index d67fb0a3..09c12855 100644 --- a/contracts/mock/contracts-registry/pools/pool-factory/PoolFactoryMock.sol +++ b/contracts/mock/contracts-registry/pools/pool-factory/PoolFactoryMock.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.22; import {ContractsRegistryPoolMock} from "../ContractsRegistryPoolMock.sol"; import {PoolContractsRegistryMock} from "../PoolContractsRegistryMock.sol"; -import {APoolFactory} from "../../../../contracts-registry/pools/pool-factory/APoolFactory.sol"; +import {APoolFactory} from "../../../../contracts-registry/pools/APoolFactory.sol"; contract PoolFactoryMock is APoolFactory { address public poolContractsRegistry; diff --git a/contracts/mock/contracts-registry/pools/presets/MultiOwnablePoolContractsRegistryMock.sol b/contracts/mock/contracts-registry/pools/presets/MultiOwnablePoolContractsRegistryMock.sol index b53835e9..4b0d7045 100644 --- a/contracts/mock/contracts-registry/pools/presets/MultiOwnablePoolContractsRegistryMock.sol +++ b/contracts/mock/contracts-registry/pools/presets/MultiOwnablePoolContractsRegistryMock.sol @@ -2,7 +2,7 @@ // solhint-disable pragma solidity ^0.8.21; -import {AMultiOwnablePoolContractsRegistry} from "../../../../contracts-registry/pools/presets/AMultiOwnablePoolContractsRegistry.sol"; +import {AMultiOwnablePoolContractsRegistry} from "../../../../presets/contracts-registry/pools/AMultiOwnablePoolContractsRegistry.sol"; contract MultiOwnablePoolContractsRegistryMock is AMultiOwnablePoolContractsRegistry { function addProxyPool(string memory name_, address poolAddress_) public override { diff --git a/contracts/mock/diamond/InitializableStorageMock.sol b/contracts/mock/diamond/InitializableStorageMock.sol new file mode 100644 index 00000000..1c0e3688 --- /dev/null +++ b/contracts/mock/diamond/InitializableStorageMock.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +// solhint-disable +pragma solidity ^0.8.21; + +import {ADiamondStorage} from "../../diamond/ADiamondStorage.sol"; +import {AInitializableStorage} from "../../diamond/utils/AInitializableStorage.sol"; + +contract InitializableStorageMock is ADiamondStorage, AInitializableStorage { + function __mockOnlyInitializing_init() public onlyInitializing(DIAMOND_STORAGE_SLOT) {} + + function __mockInitializer_init() public initializer(DIAMOND_STORAGE_SLOT) { + __mockOnlyInitializing_init(); + } + + function __mock_reinitializer( + uint64 version_ + ) public reinitializer(DIAMOND_STORAGE_SLOT, version_) { + __mockOnlyInitializing_init(); + } + + function disableInitializers() public { + _disableInitializers(DIAMOND_STORAGE_SLOT); + } + + function invalidDisableInitializers() public initializer(DIAMOND_STORAGE_SLOT) { + _disableInitializers(DIAMOND_STORAGE_SLOT); + } + + function invalidReinitializer(uint64 version_) public initializer(DIAMOND_STORAGE_SLOT) { + __mock_reinitializer(version_); + } +} diff --git a/contracts/mock/diamond/OwnableDiamondMock.sol b/contracts/mock/diamond/OwnableDiamondMock.sol index 8661454f..311b2e23 100644 --- a/contracts/mock/diamond/OwnableDiamondMock.sol +++ b/contracts/mock/diamond/OwnableDiamondMock.sol @@ -2,15 +2,15 @@ // solhint-disable pragma solidity ^0.8.21; -import {OwnableDiamond} from "../../diamond/presets/OwnableDiamond.sol"; +import {OwnableDiamond} from "../../presets/diamond/OwnableDiamond.sol"; contract OwnableDiamondMock is OwnableDiamond { function __OwnableDiamondDirect_init() external { - __DiamondOwnable_init(); + __Ownable_init(msg.sender); } - function __OwnableDiamondMock_init() external initializer(DIAMOND_OWNABLE_STORAGE_SLOT) { - __DiamondOwnable_init(); + function __OwnableDiamondMock_init() external initializer { + __Ownable_init(msg.sender); } function diamondCutShort(Facet[] memory facets_) public { diff --git a/contracts/mock/diamond/access/DiamondAccessControlMock.sol b/contracts/mock/diamond/access/DiamondAccessControlMock.sol deleted file mode 100644 index df6e291b..00000000 --- a/contracts/mock/diamond/access/DiamondAccessControlMock.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: MIT -// solhint-disable -pragma solidity ^0.8.21; - -import {ADiamondAccessControl} from "../../../diamond/access/access-control/ADiamondAccessControl.sol"; - -contract DiamondAccessControlMock is ADiamondAccessControl { - bytes32 public constant AGENT_ROLE = bytes32(uint256(0x01)); - - function __DiamondAccessControlDirect_init() external { - __ADiamondAccessControl_init(); - } - - function __DiamondAccessControlMock_init() - external - initializer(DIAMOND_ACCESS_CONTROL_STORAGE_SLOT) - { - __ADiamondAccessControl_init(); - } - - function setRoleAdmin( - bytes32 role_, - bytes32 adminRole_ - ) external onlyRole(DEFAULT_ADMIN_ROLE) { - _setRoleAdmin(role_, adminRole_); - } -} diff --git a/contracts/mock/diamond/tokens/DiamondERC20Mock.sol b/contracts/mock/diamond/tokens/DiamondERC20Mock.sol deleted file mode 100644 index 7302ea30..00000000 --- a/contracts/mock/diamond/tokens/DiamondERC20Mock.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: MIT -// solhint-disable -pragma solidity ^0.8.21; - -import {DiamondERC20} from "../../../diamond/tokens/ERC20/DiamondERC20.sol"; - -contract DiamondERC20Mock is DiamondERC20 { - constructor() { - _disableInitializers(DIAMOND_ERC20_STORAGE_SLOT); - } - - function __DiamondERC20Direct_init(string memory name_, string memory symbol_) external { - __DiamondERC20_init(name_, symbol_); - } - - function __DiamondERC20Mock_init( - string memory name_, - string memory symbol_ - ) external initializer(DIAMOND_ERC20_STORAGE_SLOT) { - __DiamondERC20_init(name_, symbol_); - } - - function __DiamondERC20Mock_disableInit() external initializer(DIAMOND_ERC20_STORAGE_SLOT) { - _disableInitializers(DIAMOND_ERC20_STORAGE_SLOT); - } - - function __DiamondERC20Mock_reinitInit( - string memory name_, - string memory symbol_, - uint64 version_ - ) external initializer(DIAMOND_ERC20_STORAGE_SLOT) { - __DiamondERC20Mock_reinit(name_, symbol_, version_); - } - - function mint(address to_, uint256 amount_) external { - _mint(to_, amount_); - } - - function burn(address from_, uint256 amount_) external { - _burn(from_, amount_); - } - - function transferMock(address from_, address to_, uint256 amount_) external { - _transfer(from_, to_, amount_); - } - - function approveMock(address owner_, address spender_, uint256 amount_) external { - _approve(owner_, spender_, amount_); - } - - function disableInitializers() external { - _disableInitializers(DIAMOND_ERC20_STORAGE_SLOT); - } - - function enableInitializers(uint64 version_) external { - _getInitializableStorage() - .initializableStorage[DIAMOND_ERC20_STORAGE_SLOT] - .initialized = version_; - } - - function getInitializedVersion() external view returns (uint64) { - return _getInitializedVersion(DIAMOND_ERC20_STORAGE_SLOT); - } - - function __DiamondERC20Mock_reinit( - string memory name_, - string memory symbol_, - uint64 version_ - ) public reinitializer(DIAMOND_ERC20_STORAGE_SLOT, version_) { - __DiamondERC20_init(name_, symbol_); - } -} diff --git a/contracts/mock/diamond/tokens/DiamondERC721Mock.sol b/contracts/mock/diamond/tokens/DiamondERC721Mock.sol deleted file mode 100644 index f191fc15..00000000 --- a/contracts/mock/diamond/tokens/DiamondERC721Mock.sol +++ /dev/null @@ -1,120 +0,0 @@ -// SPDX-License-Identifier: MIT -// solhint-disable -pragma solidity ^0.8.21; - -import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; - -import {DiamondERC721} from "../../../diamond/tokens/ERC721/DiamondERC721.sol"; - -contract DiamondERC721Mock is DiamondERC721 { - string internal baseUri; - bool internal replaceOwner; - - constructor() { - _disableInitializers(DIAMOND_ERC721_STORAGE_SLOT); - } - - function __DiamondERC721Direct_init(string memory name_, string memory symbol_) external { - __DiamondERC721_init(name_, symbol_); - } - - function __DiamondERC721Mock_init( - string memory name_, - string memory symbol_ - ) external initializer(DIAMOND_ERC721_STORAGE_SLOT) { - __DiamondERC721_init(name_, symbol_); - } - - function __DiamondERC721Mock_disableInit() external initializer(DIAMOND_ERC721_STORAGE_SLOT) { - _disableInitializers(DIAMOND_ERC721_STORAGE_SLOT); - } - - function __DiamondERC721Mock_reinitInit( - string memory name_, - string memory symbol_, - uint64 version_ - ) external initializer(DIAMOND_ERC721_STORAGE_SLOT) { - __DiamondERC721Mock_reinit(name_, symbol_, version_); - } - - function toggleReplaceOwner() external { - replaceOwner = !replaceOwner; - } - - function setBaseURI(string memory baseUri_) external { - baseUri = baseUri_; - } - - function mint(address to_, uint256 tokenId_) external { - _safeMint(to_, tokenId_); - } - - function burn(uint256 tokenId_) external { - _burn(tokenId_); - } - - function transferFromMock(address from_, address to_, uint256 tokenId_) external { - _transfer(from_, to_, tokenId_); - } - - function safeTransferFromMock(address from_, address to_, uint256 tokenId_) external { - safeTransferFrom(from_, to_, tokenId_); - } - - function update(uint256 batchSize_) external { - _update(address(this), 1, batchSize_); - } - - function disableInitializers() external { - _disableInitializers(DIAMOND_ERC721_STORAGE_SLOT); - } - - function enableInitializers(uint64 version_) external { - _getInitializableStorage() - .initializableStorage[DIAMOND_ERC721_STORAGE_SLOT] - .initialized = version_; - } - - function getInitializedVersion() external view returns (uint64) { - return _getInitializedVersion(DIAMOND_ERC721_STORAGE_SLOT); - } - - function __DiamondERC721Mock_reinit( - string memory name_, - string memory symbol_, - uint64 version_ - ) public reinitializer(DIAMOND_ERC721_STORAGE_SLOT, version_) { - __DiamondERC721_init(name_, symbol_); - } - - function _update( - address to_, - uint256 tokenId_, - uint256 batchSize_ - ) internal override returns (address) { - if (replaceOwner) { - _getErc721Storage().owners[tokenId_] = address(this); - return address(this); - } else { - return super._update(to_, tokenId_, batchSize_); - } - } - - function _baseURI() internal view override returns (string memory) { - super._baseURI(); - return baseUri; - } -} - -contract NonERC721Receiver is IERC721Receiver { - error RevertingOnERC721Received(); - - function onERC721Received( - address, - address, - uint256, - bytes calldata - ) external pure override returns (bytes4) { - revert RevertingOnERC721Received(); - } -} diff --git a/contracts/mock/diamond/tokens/DiamondERC721NotReceiverMock.sol b/contracts/mock/diamond/tokens/DiamondERC721NotReceiverMock.sol deleted file mode 100644 index bc2b7b52..00000000 --- a/contracts/mock/diamond/tokens/DiamondERC721NotReceiverMock.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -// solhint-disable -pragma solidity ^0.8.21; - -import {DiamondERC721Mock} from "./DiamondERC721Mock.sol"; - -contract DiamondERC721NotReceiverMock is DiamondERC721Mock { - function mockMint(address to_, uint256 tokenId_) external { - _mint(to_, tokenId_); - } - - function _checkOnERC721Received( - address, - address, - uint256, - bytes memory - ) internal pure override returns (bool) { - return false; - } -} diff --git a/contracts/mock/finance/compound-rate-keeper/CompoundRateKeeperMock.sol b/contracts/mock/finance/compound-rate-keeper/CompoundRateKeeperMock.sol index 9b3646c5..8b8d9ce5 100644 --- a/contracts/mock/finance/compound-rate-keeper/CompoundRateKeeperMock.sol +++ b/contracts/mock/finance/compound-rate-keeper/CompoundRateKeeperMock.sol @@ -2,9 +2,19 @@ // solhint-disable pragma solidity ^0.8.21; -import {OwnableCompoundRateKeeper} from "../../../finance/compound-rate-keeper/presets/OwnableCompoundRateKeeper.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + +import {ACompoundRateKeeper} from "../../../finance/compound-rate-keeper/ACompoundRateKeeper.sol"; + +contract CompoundRateKeeperMock is ACompoundRateKeeper, OwnableUpgradeable { + function __CompoundRateKeeperMock_init( + uint256 capitalizationRate_, + uint64 capitalizationPeriod_ + ) public initializer { + __Ownable_init(msg.sender); + __ACompoundRateKeeper_init(capitalizationRate_, capitalizationPeriod_); + } -contract CompoundRateKeeperMock is OwnableCompoundRateKeeper { function mockInit(uint256 capitalizationRate_, uint64 capitalizationPeriod_) external { __ACompoundRateKeeper_init(capitalizationRate_, capitalizationPeriod_); } @@ -12,8 +22,16 @@ contract CompoundRateKeeperMock is OwnableCompoundRateKeeper { function setCapitalizationRateAndPeriod( uint256 capitalizationRate_, uint64 capitalizationPeriod_ - ) external onlyOwner { + ) external { _setCapitalizationRate(capitalizationRate_); _setCapitalizationPeriod(capitalizationPeriod_); } + + function setCapitalizationRate(uint256 capitalizationRate_) external { + _setCapitalizationRate(capitalizationRate_); + } + + function setCapitalizationPeriod(uint64 capitalizationPeriod_) external { + _setCapitalizationPeriod(capitalizationPeriod_); + } } diff --git a/contracts/oracles/AUniswapV2Oracle.sol b/contracts/oracles/AUniswapV2Oracle.sol index 4fc5d06a..5550316d 100644 --- a/contracts/oracles/AUniswapV2Oracle.sol +++ b/contracts/oracles/AUniswapV2Oracle.sol @@ -32,13 +32,17 @@ abstract contract AUniswapV2Oracle is Initializable { uint256 refs; } - IUniswapV2Factory public uniswapV2Factory; - - uint256 public timeWindow; + struct AUniswapV2OracleStorage { + IUniswapV2Factory uniswapV2Factory; + uint256 timeWindow; + EnumerableSet.AddressSet pairs; + mapping(address tokenIn => address[] path) paths; + mapping(address pair => PairInfo pairInfo) pairInfos; + } - EnumerableSet.AddressSet private _pairs; - mapping(address => address[]) private _paths; - mapping(address => PairInfo) private _pairInfos; + // bytes32(uint256(keccak256("solarity.contract.AUniswapV2Oracle")) - 1) + bytes32 private constant A_UNISWAP_V2_ORACLE_STORAGE = + 0x2fdb993a50a5a16d800fe20fee85d9cea7844b76e3162c1018adbd8cba58fed0; error InvalidPath(address tokenIn, uint256 pathLength); error PathAlreadyRegistered(address tokenIn); @@ -54,7 +58,9 @@ abstract contract AUniswapV2Oracle is Initializable { address uniswapV2Factory_, uint256 timeWindow_ ) internal onlyInitializing { - uniswapV2Factory = IUniswapV2Factory(uniswapV2Factory_); + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + + $.uniswapV2Factory = IUniswapV2Factory(uniswapV2Factory_); _setTimeWindow(timeWindow_); } @@ -65,12 +71,14 @@ abstract contract AUniswapV2Oracle is Initializable { * May be called at any time. The time window automatically adjusts */ function updatePrices() public virtual { - uint256 pairsLength_ = _pairs.length(); + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + + uint256 pairsLength_ = $.pairs.length(); for (uint256 i = 0; i < pairsLength_; i++) { - address pair_ = _pairs.at(i); + address pair_ = $.pairs.at(i); - PairInfo storage pairInfo = _pairInfos[pair_]; + PairInfo storage pairInfo = $.pairInfos[pair_]; uint256[] storage pairTimestamps = pairInfo.blockTimestamps; ( @@ -98,7 +106,9 @@ abstract contract AUniswapV2Oracle is Initializable { * @return The output token address */ function getPrice(address tokenIn_, uint256 amount_) public view returns (uint256, address) { - address[] storage path = _paths[tokenIn_]; + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + + address[] storage path = $.paths[tokenIn_]; uint256 pathLength_ = path.length; if (pathLength_ < 2) revert InvalidPath(tokenIn_, pathLength_); @@ -107,7 +117,7 @@ abstract contract AUniswapV2Oracle is Initializable { for (uint256 i = 0; i < pathLength_ - 1; i++) { (address currentToken_, address nextToken_) = (path[i], path[i + 1]); - address pair_ = uniswapV2Factory.getPair(currentToken_, nextToken_); + address pair_ = $.uniswapV2Factory.getPair(currentToken_, nextToken_); uint256 price_ = _getPrice(pair_, currentToken_); amount_ = price_.mulDiv(amount_, 2 ** 112); @@ -122,7 +132,9 @@ abstract contract AUniswapV2Oracle is Initializable { * @return the route of the provided token */ function getPath(address tokenIn_) public view returns (address[] memory) { - return _paths[tokenIn_]; + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + + return $.paths[tokenIn_]; } /** @@ -130,7 +142,9 @@ abstract contract AUniswapV2Oracle is Initializable { * @return the array of pairs */ function getPairs() public view returns (address[] memory) { - return _pairs.values(); + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + + return $.pairs.values(); } /** @@ -139,7 +153,9 @@ abstract contract AUniswapV2Oracle is Initializable { * @return the number of oracle observations */ function getPairRounds(address pair_) public view returns (uint256) { - return _pairInfos[pair_].blockTimestamps.length; + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + + return $.pairInfos[pair_].blockTimestamps.length; } /** @@ -154,7 +170,9 @@ abstract contract AUniswapV2Oracle is Initializable { address pair_, uint256 round_ ) public view returns (uint256, uint256, uint256) { - PairInfo storage _pairInfo = _pairInfos[pair_]; + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + + PairInfo storage _pairInfo = $.pairInfos[pair_]; return ( _pairInfo.prices0Cumulative[round_], @@ -163,6 +181,20 @@ abstract contract AUniswapV2Oracle is Initializable { ); } + /** + * @notice Returns the uniswapV2Factory address + */ + function getUniswapV2Factory() public view returns (IUniswapV2Factory) { + return _getAUniswapV2OracleStorage().uniswapV2Factory; + } + + /** + * @notice Returns the timeWindow + */ + function getTimeWindow() public view returns (uint256) { + return _getAUniswapV2OracleStorage().timeWindow; + } + /** * @notice The function to set the time window of TWAP * @param newTimeWindow_ the new time window value in seconds @@ -170,7 +202,9 @@ abstract contract AUniswapV2Oracle is Initializable { function _setTimeWindow(uint256 newTimeWindow_) internal { if (newTimeWindow_ == 0) revert TimeWindowIsZero(); - timeWindow = newTimeWindow_; + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + + $.timeWindow = newTimeWindow_; } /** @@ -178,6 +212,8 @@ abstract contract AUniswapV2Oracle is Initializable { * @param paths_ the array of token paths to add */ function _addPaths(address[][] memory paths_) internal { + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + uint256 numberOfPaths_ = paths_.length; for (uint256 i = 0; i < numberOfPaths_; i++) { @@ -185,18 +221,18 @@ abstract contract AUniswapV2Oracle is Initializable { address tokenIn_ = paths_[i][0]; if (pathLength_ < 2) revert InvalidPath(tokenIn_, pathLength_); - if (_paths[tokenIn_].length != 0) revert PathAlreadyRegistered(tokenIn_); + if ($.paths[tokenIn_].length != 0) revert PathAlreadyRegistered(tokenIn_); for (uint256 j = 0; j < pathLength_ - 1; j++) { (bool exists_, address pair_) = _pairExists(paths_[i][j], paths_[i][j + 1]); if (!exists_) revert PairDoesNotExist(paths_[i][j], paths_[i][j + 1]); - _pairs.add(pair_); - _pairInfos[pair_].refs++; + $.pairs.add(pair_); + $.pairInfos[pair_].refs++; } - _paths[tokenIn_] = paths_[i]; + $.paths[tokenIn_] = paths_[i]; } updatePrices(); @@ -207,33 +243,35 @@ abstract contract AUniswapV2Oracle is Initializable { * @param tokenIns_ The array of token addresses to remove */ function _removePaths(address[] memory tokenIns_) internal { + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + uint256 numberOfPaths_ = tokenIns_.length; for (uint256 i = 0; i < numberOfPaths_; i++) { address tokenIn_ = tokenIns_[i]; - uint256 pathLength_ = _paths[tokenIn_].length; + uint256 pathLength_ = $.paths[tokenIn_].length; if (pathLength_ == 0) { continue; } for (uint256 j = 0; j < pathLength_ - 1; j++) { - address pair_ = uniswapV2Factory.getPair( - _paths[tokenIn_][j], - _paths[tokenIn_][j + 1] + address pair_ = $.uniswapV2Factory.getPair( + $.paths[tokenIn_][j], + $.paths[tokenIn_][j + 1] ); - PairInfo storage _pairInfo = _pairInfos[pair_]; + PairInfo storage _pairInfo = $.pairInfos[pair_]; /// @dev can't underflow _pairInfo.refs--; if (_pairInfo.refs == 0) { - _pairs.remove(pair_); + $.pairs.remove(pair_); } } - delete _paths[tokenIn_]; + delete $.paths[tokenIn_]; } } @@ -241,12 +279,14 @@ abstract contract AUniswapV2Oracle is Initializable { * @notice The private function to get the price of a token inside a pair */ function _getPrice(address pair_, address expectedToken_) private view returns (uint256) { - PairInfo storage pairInfo = _pairInfos[pair_]; + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + + PairInfo storage pairInfo = $.pairInfos[pair_]; unchecked { /// @dev pairInfo.blockTimestamps can't be empty uint256 index_ = pairInfo.blockTimestamps.lowerBound( - (uint32(block.timestamp) - timeWindow) % 2 ** 32 + (uint32(block.timestamp) - $.timeWindow) % 2 ** 32 ); index_ = index_ == 0 ? index_ : index_ - 1; @@ -278,7 +318,9 @@ abstract contract AUniswapV2Oracle is Initializable { * @notice The private function to check the existence of a pair */ function _pairExists(address token1_, address token2_) private view returns (bool, address) { - address pair_ = uniswapV2Factory.getPair(token1_, token2_); + AUniswapV2OracleStorage storage $ = _getAUniswapV2OracleStorage(); + + address pair_ = $.uniswapV2Factory.getPair(token1_, token2_); return (pair_ != address(0), pair_); } @@ -313,4 +355,17 @@ abstract contract AUniswapV2Oracle is Initializable { } } } + + /** + * @dev Returns a pointer to the storage namespace + */ + function _getAUniswapV2OracleStorage() + private + pure + returns (AUniswapV2OracleStorage storage $) + { + assembly { + $.slot := A_UNISWAP_V2_ORACLE_STORAGE + } + } } diff --git a/contracts/contracts-registry/presets/MultiOwnableContractsRegistry.sol b/contracts/presets/contracts-registry/MultiOwnableContractsRegistry.sol similarity index 98% rename from contracts/contracts-registry/presets/MultiOwnableContractsRegistry.sol rename to contracts/presets/contracts-registry/MultiOwnableContractsRegistry.sol index c341f25c..6d3305f8 100644 --- a/contracts/contracts-registry/presets/MultiOwnableContractsRegistry.sol +++ b/contracts/presets/contracts-registry/MultiOwnableContractsRegistry.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.22; -import {AContractsRegistry} from "../AContractsRegistry.sol"; +import {AContractsRegistry} from "../../contracts-registry/AContractsRegistry.sol"; import {AMultiOwnable} from "../../access/AMultiOwnable.sol"; /** diff --git a/contracts/contracts-registry/presets/OwnableContractsRegistry.sol b/contracts/presets/contracts-registry/OwnableContractsRegistry.sol similarity index 98% rename from contracts/contracts-registry/presets/OwnableContractsRegistry.sol rename to contracts/presets/contracts-registry/OwnableContractsRegistry.sol index c092e443..2f1981fa 100644 --- a/contracts/contracts-registry/presets/OwnableContractsRegistry.sol +++ b/contracts/presets/contracts-registry/OwnableContractsRegistry.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.22; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -import {AContractsRegistry} from "../AContractsRegistry.sol"; +import {AContractsRegistry} from "../../contracts-registry/AContractsRegistry.sol"; /** * @notice The Ownable preset of ContractsRegistry diff --git a/contracts/contracts-registry/pools/presets/AMultiOwnablePoolContractsRegistry.sol b/contracts/presets/contracts-registry/pools/AMultiOwnablePoolContractsRegistry.sol similarity index 95% rename from contracts/contracts-registry/pools/presets/AMultiOwnablePoolContractsRegistry.sol rename to contracts/presets/contracts-registry/pools/AMultiOwnablePoolContractsRegistry.sol index 787fd6fb..adb3ac22 100644 --- a/contracts/contracts-registry/pools/presets/AMultiOwnablePoolContractsRegistry.sol +++ b/contracts/presets/contracts-registry/pools/AMultiOwnablePoolContractsRegistry.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.21; -import {APoolContractsRegistry} from "../APoolContractsRegistry.sol"; +import {APoolContractsRegistry} from "../../../contracts-registry/pools/APoolContractsRegistry.sol"; import {AMultiOwnable} from "../../../access/AMultiOwnable.sol"; /** diff --git a/contracts/contracts-registry/pools/presets/AOwnablePoolContractsRegistry.sol b/contracts/presets/contracts-registry/pools/AOwnablePoolContractsRegistry.sol similarity index 95% rename from contracts/contracts-registry/pools/presets/AOwnablePoolContractsRegistry.sol rename to contracts/presets/contracts-registry/pools/AOwnablePoolContractsRegistry.sol index 1887152d..452d9728 100644 --- a/contracts/contracts-registry/pools/presets/AOwnablePoolContractsRegistry.sol +++ b/contracts/presets/contracts-registry/pools/AOwnablePoolContractsRegistry.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.21; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -import {APoolContractsRegistry} from "../APoolContractsRegistry.sol"; +import {APoolContractsRegistry} from "../../../contracts-registry/pools/APoolContractsRegistry.sol"; /** * @notice The Ownable preset of PoolContractsRegistry diff --git a/contracts/diamond/presets/OwnableDiamond.sol b/contracts/presets/diamond/OwnableDiamond.sol similarity index 83% rename from contracts/diamond/presets/OwnableDiamond.sol rename to contracts/presets/diamond/OwnableDiamond.sol index 3f0dc44f..96f54c3d 100644 --- a/contracts/diamond/presets/OwnableDiamond.sol +++ b/contracts/presets/diamond/OwnableDiamond.sol @@ -1,15 +1,16 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.21; -import {Diamond} from "../Diamond.sol"; -import {DiamondOwnable} from "../access/ownable/DiamondOwnable.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; + +import {Diamond} from "../../diamond/Diamond.sol"; /** * @notice The Diamond standard module * * The Ownable preset of Diamond proxy */ -contract OwnableDiamond is Diamond, DiamondOwnable { +contract OwnableDiamond is Diamond, OwnableUpgradeable { /** * @notice The function to manipulate the Diamond contract, as defined in [EIP-2535](https://eips.ethereum.org/EIPS/eip-2535) * @param facets_ the array of actions to be executed against the Diamond diff --git a/contracts/tokens/ASBT.sol b/contracts/tokens/ASBT.sol index 6691a805..c4eb49f4 100644 --- a/contracts/tokens/ASBT.sol +++ b/contracts/tokens/ASBT.sol @@ -20,14 +20,18 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { using Strings for uint256; using EnumerableSet for EnumerableSet.UintSet; - string private _name; - string private _symbol; - - mapping(uint256 => address) private _tokenOwners; - mapping(address => EnumerableSet.UintSet) private _balances; + struct ASBTStorage { + string name; + string symbol; + mapping(uint256 tokenId => address owner) tokenOwners; + mapping(address owner => EnumerableSet.UintSet balances) balances; + string baseURI; + mapping(uint256 tokenId => string tokenURI) tokenURIs; + } - string private _baseURI; - mapping(uint256 => string) private _tokenURIs; + // bytes32(uint256(keccak256("solarity.contract.ASBT")) - 1) + bytes32 private constant A_SBT_STORAGE = + 0x5a40b9c2fd292e4e0de2167f20d990524d7ad1b1bbf797f218a97c33c5ea76fb; error ReceiverIsZeroAddress(); error TokenAlreadyExists(uint256 tokenId); @@ -39,8 +43,10 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { * @param symbol_ the symbol of the contract (can't be changed) */ function __ASBT_init(string memory name_, string memory symbol_) internal onlyInitializing { - _name = name_; - _symbol = symbol_; + ASBTStorage storage $ = _getASBTStorage(); + + $.name = name_; + $.symbol = symbol_; } /** @@ -48,7 +54,9 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { * @return the name of the contract */ function name() public view virtual override returns (string memory) { - return _name; + ASBTStorage storage $ = _getASBTStorage(); + + return $.name; } /** @@ -56,7 +64,9 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { * @return the symbol of the contract */ function symbol() public view virtual override returns (string memory) { - return _symbol; + ASBTStorage storage $ = _getASBTStorage(); + + return $.symbol; } /** @@ -74,7 +84,9 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { * @return the user's balance */ function balanceOf(address owner_) public view virtual override returns (uint256) { - return _balances[owner_].length(); + ASBTStorage storage $ = _getASBTStorage(); + + return $.balances[owner_].length(); } /** @@ -87,7 +99,9 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { address owner_, uint256 index_ ) public view virtual override returns (uint256) { - return _balances[owner_].at(index_); + ASBTStorage storage $ = _getASBTStorage(); + + return $.balances[owner_].at(index_); } /** @@ -96,7 +110,9 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { * @return the array of tokens the user owns */ function tokensOf(address owner_) public view virtual override returns (uint256[] memory) { - return _balances[owner_].values(); + ASBTStorage storage $ = _getASBTStorage(); + + return $.balances[owner_].values(); } /** @@ -113,7 +129,9 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { * @return the base URI */ function baseURI() public view virtual override returns (string memory) { - return _baseURI; + ASBTStorage storage $ = _getASBTStorage(); + + return $.baseURI; } /** @@ -127,7 +145,9 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { * @return the URI of the token */ function tokenURI(uint256 tokenId_) public view virtual override returns (string memory) { - string memory tokenURI_ = _tokenURIs[tokenId_]; + ASBTStorage storage $ = _getASBTStorage(); + + string memory tokenURI_ = $.tokenURIs[tokenId_]; if (bytes(tokenURI_).length != 0) { return tokenURI_; @@ -165,8 +185,10 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { _beforeTokenAction(to_, tokenId_); - _balances[to_].add(tokenId_); - _tokenOwners[tokenId_] = to_; + ASBTStorage storage $ = _getASBTStorage(); + + $.balances[to_].add(tokenId_); + $.tokenOwners[tokenId_] = to_; emit Transfer(address(0), to_, tokenId_); } @@ -182,10 +204,12 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { _beforeTokenAction(address(0), tokenId_); - _balances[owner_].remove(tokenId_); - delete _tokenOwners[tokenId_]; + ASBTStorage storage $ = _getASBTStorage(); + + $.balances[owner_].remove(tokenId_); + delete $.tokenOwners[tokenId_]; - delete _tokenURIs[tokenId_]; + delete $.tokenURIs[tokenId_]; emit Transfer(owner_, address(0), tokenId_); } @@ -198,7 +222,9 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { function _setTokenURI(uint256 tokenId_, string memory tokenURI_) internal virtual { if (!tokenExists(tokenId_)) revert TokenDoesNotExist(tokenId_); - _tokenURIs[tokenId_] = tokenURI_; + ASBTStorage storage $ = _getASBTStorage(); + + $.tokenURIs[tokenId_] = tokenURI_; } /** @@ -206,7 +232,9 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { * @param baseURI_ the URI to set */ function _setBaseURI(string memory baseURI_) internal virtual { - _baseURI = baseURI_; + ASBTStorage storage $ = _getASBTStorage(); + + $.baseURI = baseURI_; } /** @@ -215,7 +243,18 @@ abstract contract ASBT is ISBT, ERC165Upgradeable { * @return address of an owner or `address(0)` if token does not exist */ function _ownerOf(uint256 tokenId_) internal view virtual returns (address) { - return _tokenOwners[tokenId_]; + ASBTStorage storage $ = _getASBTStorage(); + + return $.tokenOwners[tokenId_]; + } + + /** + * @dev Returns a pointer to the storage namespace + */ + function _getASBTStorage() private pure returns (ASBTStorage storage $) { + assembly { + $.slot := A_SBT_STORAGE + } } /** diff --git a/contracts/utils/ABlockGuard.sol b/contracts/utils/ABlockGuard.sol index 1e40f94a..7c70c587 100644 --- a/contracts/utils/ABlockGuard.sol +++ b/contracts/utils/ABlockGuard.sol @@ -22,7 +22,13 @@ pragma solidity ^0.8.21; * ``` */ abstract contract ABlockGuard { - mapping(string => mapping(address => uint256)) private _lockedInBlocks; + struct ABlockGuardStorage { + mapping(string resource => mapping(address key => uint256 block)) lockedInBlocks; + } + + // bytes32(uint256(keccak256("solarity.contract.ABlockGuard")) - 1) + bytes32 private constant A_BLOCK_GUARD_STORAGE = + 0x06ea6e036a07a5850b5065c6817e5fe3c9f293357867b6a3fbe568a6a46097e6; error BlockGuardLocked(string resource, address key); @@ -48,7 +54,9 @@ abstract contract ABlockGuard { * @param key_ the key of the resource (the caller) */ function _lockBlock(string memory resource_, address key_) internal { - _lockedInBlocks[resource_][key_] = _getBlockNumber(); + ABlockGuardStorage storage $ = _getABlockGuardStorage(); + + $.lockedInBlocks[resource_][key_] = _getBlockNumber(); } /** @@ -57,7 +65,9 @@ abstract contract ABlockGuard { * @param key_ the key of the resource (the caller) */ function _checkBlock(string memory resource_, address key_) internal view { - if (_lockedInBlocks[resource_][key_] == _getBlockNumber()) + ABlockGuardStorage storage $ = _getABlockGuardStorage(); + + if ($.lockedInBlocks[resource_][key_] == _getBlockNumber()) revert BlockGuardLocked(resource_, key_); } @@ -71,7 +81,9 @@ abstract contract ABlockGuard { string memory resource_, address key_ ) internal view returns (uint256 block_) { - return _lockedInBlocks[resource_][key_]; + ABlockGuardStorage storage $ = _getABlockGuardStorage(); + + return $.lockedInBlocks[resource_][key_]; } /** @@ -83,4 +95,13 @@ abstract contract ABlockGuard { function _getBlockNumber() internal view virtual returns (uint256 block_) { return block.number; } + + /** + * @dev Returns a pointer to the storage namespace + */ + function _getABlockGuardStorage() private pure returns (ABlockGuardStorage storage $) { + assembly { + $.slot := A_BLOCK_GUARD_STORAGE + } + } } diff --git a/package-lock.json b/package-lock.json index 2bc47db6..553329c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@solarity/solidity-lib", - "version": "3.0.0-rc.3", + "version": "3.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@solarity/solidity-lib", - "version": "3.0.0-rc.3", + "version": "3.0.0", "license": "MIT", "dependencies": { "@openzeppelin/contracts": "5.2.0", @@ -54,13 +54,15 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/code-frame": { "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", @@ -75,6 +77,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -84,6 +87,7 @@ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" @@ -94,6 +98,7 @@ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -106,6 +111,7 @@ "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", "dev": true, + "license": "MPL-2.0", "bin": { "rlp": "bin/rlp" }, @@ -118,6 +124,7 @@ "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@ethereumjs/rlp": "^4.0.1", "ethereum-cryptography": "^2.0.0", @@ -132,6 +139,7 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -144,6 +152,7 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" }, @@ -156,6 +165,7 @@ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dev": true, + "license": "MIT", "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -170,6 +180,7 @@ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -183,6 +194,7 @@ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dev": true, + "license": "MIT", "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -191,9 +203,9 @@ } }, "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", "dev": true, "funding": [ { @@ -205,22 +217,23 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", "dev": true, "funding": [ { @@ -232,20 +245,21 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" } }, "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", "dev": true, "funding": [ { @@ -257,18 +271,19 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", "dev": true, "funding": [ { @@ -280,18 +295,19 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" } }, "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", "dev": true, "funding": [ { @@ -303,14 +319,15 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0" + "@ethersproject/bytes": "^5.8.0" } }, "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.8.0.tgz", + "integrity": "sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q==", "dev": true, "funding": [ { @@ -322,15 +339,16 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/properties": "^5.8.0" } }, "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", "dev": true, "funding": [ { @@ -342,16 +360,17 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", "bn.js": "^5.2.1" } }, "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", "dev": true, "funding": [ { @@ -363,14 +382,15 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", "dev": true, "funding": [ { @@ -382,14 +402,15 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0" } }, "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.8.0.tgz", + "integrity": "sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ==", "dev": true, "funding": [ { @@ -401,23 +422,24 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^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/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" + "@ethersproject/abi": "^5.8.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0" } }, "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", "dev": true, "funding": [ { @@ -429,22 +451,23 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz", + "integrity": "sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==", "dev": true, "funding": [ { @@ -456,25 +479,26 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" } }, "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz", + "integrity": "sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==", "dev": true, "funding": [ { @@ -486,18 +510,19 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/pbkdf2": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", "aes-js": "3.0.0", "scrypt-js": "3.0.1" } @@ -506,12 +531,13 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", "dev": true, "funding": [ { @@ -523,15 +549,16 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", "js-sha3": "0.8.0" } }, "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", "dev": true, "funding": [ { @@ -542,12 +569,13 @@ "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } - ] + ], + "license": "MIT" }, "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", "dev": true, "funding": [ { @@ -559,14 +587,15 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz", + "integrity": "sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==", "dev": true, "funding": [ { @@ -578,15 +607,16 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/sha2": "^5.8.0" } }, "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", "dev": true, "funding": [ { @@ -598,14 +628,15 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.8.0.tgz", + "integrity": "sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw==", "dev": true, "funding": [ { @@ -617,40 +648,42 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/basex": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0", "bech32": "1.1.4", - "ws": "7.4.6" + "ws": "8.18.0" } }, "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -662,9 +695,9 @@ } }, "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.8.0.tgz", + "integrity": "sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A==", "dev": true, "funding": [ { @@ -676,15 +709,16 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", "dev": true, "funding": [ { @@ -696,15 +730,16 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.8.0.tgz", + "integrity": "sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A==", "dev": true, "funding": [ { @@ -716,16 +751,17 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", "hash.js": "1.1.7" } }, "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", "dev": true, "funding": [ { @@ -737,19 +773,20 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", "bn.js": "^5.2.1", - "elliptic": "6.5.4", + "elliptic": "6.6.1", "hash.js": "1.1.7" } }, "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz", + "integrity": "sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==", "dev": true, "funding": [ { @@ -761,19 +798,20 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/sha2": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", "dev": true, "funding": [ { @@ -785,16 +823,17 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", "dev": true, "funding": [ { @@ -806,22 +845,23 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" } }, "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz", + "integrity": "sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==", "dev": true, "funding": [ { @@ -833,16 +873,17 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" } }, "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz", + "integrity": "sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==", "dev": true, "funding": [ { @@ -854,28 +895,29 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^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/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/hdnode": "^5.8.0", + "@ethersproject/json-wallets": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/random": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/wordlists": "^5.8.0" } }, "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", "dev": true, "funding": [ { @@ -887,18 +929,19 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz", + "integrity": "sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==", "dev": true, "funding": [ { @@ -910,12 +953,13 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" } }, "node_modules/@fastify/busboy": { @@ -923,6 +967,7 @@ "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -931,13 +976,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@iden3/js-crypto/-/js-crypto-1.1.0.tgz", "integrity": "sha512-MbL7OpOxBoCybAPoorxrp+fwjDVESyDe6giIWxErjEIJy0Q2n1DU4VmKh4vDoCyhJx/RdVgT8Dkb59lKwISqsw==", - "dev": true + "dev": true, + "license": "AGPL-3.0" }, "node_modules/@iden3/js-merkletree": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@iden3/js-merkletree/-/js-merkletree-1.3.1.tgz", "integrity": "sha512-sP0ezoDutKtzYolbeGKwg/iYYcoNSZwigLPuwca2Fmh/E2NYj3LDBlMQixpGNZnkCA+1zLjmKzZHu58xSweoEA==", "dev": true, + "license": "MIT or Apache-2.0", "peerDependencies": { "@iden3/js-crypto": "1.1.0", "idb-keyval": "^6.2.0" @@ -948,6 +995,7 @@ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -965,6 +1013,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -977,6 +1026,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -988,13 +1038,15 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -1012,6 +1064,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1027,6 +1080,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1044,6 +1098,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -1052,13 +1107,15 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1069,6 +1126,7 @@ "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", "dev": true, + "license": "ISC", "dependencies": { "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^6.2.1", @@ -1085,6 +1143,7 @@ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1093,13 +1152,15 @@ "version": "4.12.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -1115,6 +1176,7 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.2" }, @@ -1127,6 +1189,7 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" }, @@ -1144,13 +1207,15 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1164,6 +1229,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -1173,6 +1239,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1182,82 +1249,90 @@ } }, "node_modules/@nomicfoundation/edr": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.7.0.tgz", - "integrity": "sha512-+Zyu7TE47TGNcPhOfWLPA/zISs32WDMXrhSWdWYyPHDVn/Uux5TVuOeScKb0BR/R8EJ+leR8COUF/EGxvDOVKg==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.8.0.tgz", + "integrity": "sha512-dwWRrghSVBQDpt0wP+6RXD8BMz2i/9TI34TcmZqeEAZuCLei3U9KZRgGTKVAM1rMRvrpf5ROfPqrWNetKVUTag==", "dev": true, + "license": "MIT", "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.7.0", - "@nomicfoundation/edr-darwin-x64": "0.7.0", - "@nomicfoundation/edr-linux-arm64-gnu": "0.7.0", - "@nomicfoundation/edr-linux-arm64-musl": "0.7.0", - "@nomicfoundation/edr-linux-x64-gnu": "0.7.0", - "@nomicfoundation/edr-linux-x64-musl": "0.7.0", - "@nomicfoundation/edr-win32-x64-msvc": "0.7.0" + "@nomicfoundation/edr-darwin-arm64": "0.8.0", + "@nomicfoundation/edr-darwin-x64": "0.8.0", + "@nomicfoundation/edr-linux-arm64-gnu": "0.8.0", + "@nomicfoundation/edr-linux-arm64-musl": "0.8.0", + "@nomicfoundation/edr-linux-x64-gnu": "0.8.0", + "@nomicfoundation/edr-linux-x64-musl": "0.8.0", + "@nomicfoundation/edr-win32-x64-msvc": "0.8.0" }, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.7.0.tgz", - "integrity": "sha512-vAH20oh4GaSB/iQFTRcoO8jLc0CLd9XuLY9I7vtcqZWAiM4U1J4Y8cu67PWmtxbvUQOqXR7S6FtAr8/AlWm14g==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.8.0.tgz", + "integrity": "sha512-sKTmOu/P5YYhxT0ThN2Pe3hmCE/5Ag6K/eYoiavjLWbR7HEb5ZwPu2rC3DpuUk1H+UKJqt7o4/xIgJxqw9wu6A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.7.0.tgz", - "integrity": "sha512-WHDdIrPvLlgXQr2eKypBM5xOZAwdxhDAEQIvEMQL8tEEm2qYW2bliUlssBPrs8E3bdivFbe1HizImslMAfU3+g==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.8.0.tgz", + "integrity": "sha512-8ymEtWw1xf1Id1cc42XIeE+9wyo3Dpn9OD/X8GiaMz9R70Ebmj2g+FrbETu8o6UM+aL28sBZQCiCzjlft2yWAg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.7.0.tgz", - "integrity": "sha512-WXpJB54ukz1no7gxCPXVEw9pgl/9UZ/WO3l1ctyv/T7vOygjqA4SUd6kppTs6MNXAuTiisPtvJ/fmvHiMBLrsw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.8.0.tgz", + "integrity": "sha512-h/wWzS2EyQuycz+x/SjMRbyA+QMCCVmotRsgM1WycPARvVZWIVfwRRsKoXKdCftsb3S8NTprqBdJlOmsFyETFA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.7.0.tgz", - "integrity": "sha512-1iZYOcEgc+zJI7JQrlAFziuy9sBz1WgnIx3HIIu0J7lBRZ/AXeHHgATb+4InqxtEx9O3W8A0s7f11SyFqJL4Aw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.8.0.tgz", + "integrity": "sha512-gnWxDgdkka0O9GpPX/gZT3REeKYV28Guyg13+Vj/bbLpmK1HmGh6Kx+fMhWv+Ht/wEmGDBGMCW1wdyT/CftJaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.7.0.tgz", - "integrity": "sha512-wSjC94WcR5MM8sg9w3OsAmT6+bbmChJw6uJKoXR3qscps/jdhjzJWzfgT0XGRq3XMUfimyafW2RWOyfX3ouhrQ==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.8.0.tgz", + "integrity": "sha512-DTMiAkgAx+nyxcxKyxFZk1HPakXXUCgrmei7r5G7kngiggiGp/AUuBBWFHi8xvl2y04GYhro5Wp+KprnLVoAPA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.7.0.tgz", - "integrity": "sha512-Us22+AZ7wkG1mZwxqE4S4ZcuwkEA5VrUiBOJSvKHGOgy6vFvB/Euh5Lkp4GovwjrtiXuvyGO2UmtkzymZKDxZw==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.8.0.tgz", + "integrity": "sha512-iTITWe0Zj8cNqS0xTblmxPbHVWwEtMiDC+Yxwr64d7QBn/1W0ilFQ16J8gB6RVVFU3GpfNyoeg3tUoMpSnrm6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.7.0.tgz", - "integrity": "sha512-HAry0heTsWkzReVtjHwoIq3BgFCvXpVhJ5qPmTnegZGsr/KxqvMmHyDMifzKao4bycU8yrpTSyOiAJt27RWjzQ==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.8.0.tgz", + "integrity": "sha512-mNRDyd/C3j7RMcwapifzv2K57sfA5xOw8g2U84ZDvgSrXVXLC99ZPxn9kmolb+dz8VMm9FONTZz9ESS6v8DTnA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18" } @@ -1267,6 +1342,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", "dev": true, + "license": "MIT", "dependencies": { "@nomicfoundation/ethereumjs-util": "9.0.4" } @@ -1276,6 +1352,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", "dev": true, + "license": "MPL-2.0", "bin": { "rlp": "bin/rlp.cjs" }, @@ -1288,6 +1365,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-rlp": "5.0.4", @@ -1311,6 +1389,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@nomicfoundation/ethereumjs-rlp": "5.0.4", "ethereum-cryptography": "0.1.3" @@ -1332,6 +1411,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.8.tgz", "integrity": "sha512-Z5PiCXH4xhNLASROlSUOADfhfpfhYO6D7Hn9xp8PddmHey0jq704cr6kfU8TRrQ4PUZbpfsZadPj+pCfZdjPIg==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai-as-promised": "^7.1.3", "chai-as-promised": "^7.1.1", @@ -1350,6 +1430,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz", "integrity": "sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "lodash.isequal": "^4.5.0" @@ -1364,6 +1445,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz", "integrity": "sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA==", "dev": true, + "license": "MIT", "dependencies": { "ethereumjs-util": "^7.1.4" }, @@ -1376,6 +1458,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz", "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" }, @@ -1394,6 +1477,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz", "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -1404,6 +1488,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz", "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -1414,6 +1499,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz", "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -1424,6 +1510,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz", "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -1434,6 +1521,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz", "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -1444,6 +1532,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz", "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -1454,6 +1543,7 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz", "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -1462,12 +1552,14 @@ "node_modules/@openzeppelin/contracts": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.2.0.tgz", - "integrity": "sha512-bxjNie5z89W1Ea0NZLZluFh8PrFNn9DH8DQlujEok2yjsOlraUPKID5p1Wk3qdNbf6XkQ1Os2RvfiHrrXLHWKA==" + "integrity": "sha512-bxjNie5z89W1Ea0NZLZluFh8PrFNn9DH8DQlujEok2yjsOlraUPKID5p1Wk3qdNbf6XkQ1Os2RvfiHrrXLHWKA==", + "license": "MIT" }, "node_modules/@openzeppelin/contracts-upgradeable": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.2.0.tgz", "integrity": "sha512-mZIu9oa4tQTlGiOJHk6D3LdJlqFqF6oNOSn6S6UVJtzfs9UsY9/dhMEbAVTwElxUtJnjpf6yA062+oBp+eOyPg==", + "license": "MIT", "peerDependencies": { "@openzeppelin/contracts": "5.2.0" } @@ -1477,6 +1569,7 @@ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -1487,6 +1580,7 @@ "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.22.0" } @@ -1496,6 +1590,7 @@ "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "4.2.10" }, @@ -1507,13 +1602,15 @@ "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@pnpm/npm-conf": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dev": true, + "license": "MIT", "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", @@ -1528,6 +1625,7 @@ "resolved": "https://registry.npmjs.org/@prettier/sync/-/sync-0.3.0.tgz", "integrity": "sha512-3dcmCyAxIcxy036h1I7MQU/uEEBq8oLwf1CE3xeze+MPlgkdlb/+w6rGR/1dhp6Hqi17fRS6nvwnOzkESxEkOw==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/prettier/prettier-synchronized?sponsor=1" }, @@ -1540,6 +1638,7 @@ "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", "dev": true, + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -1549,6 +1648,7 @@ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", "dev": true, + "license": "MIT", "dependencies": { "@noble/curves": "~1.2.0", "@noble/hashes": "~1.3.2", @@ -1563,6 +1663,7 @@ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "~1.3.0", "@scure/base": "~1.1.0" @@ -1576,6 +1677,7 @@ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -1591,13 +1693,15 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sentry/hub": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -1611,13 +1715,15 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sentry/minimal": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -1631,13 +1737,15 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sentry/node": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -1657,13 +1765,15 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sentry/tracing": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", "dev": true, + "license": "MIT", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -1679,13 +1789,15 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sentry/types": { "version": "5.30.0", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=6" } @@ -1695,6 +1807,7 @@ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" @@ -1707,13 +1820,15 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sindresorhus/is": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -1722,10 +1837,11 @@ } }, "node_modules/@solarity/hardhat-markup": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@solarity/hardhat-markup/-/hardhat-markup-1.0.9.tgz", - "integrity": "sha512-ddjAnoSKyJD4aoyj2L0GOe4bbRdggvMe6FP80mK8+huzaUefKlaIhQ7ub8QQ8c8S+KJlnkKcx1OLKm7PI44hmA==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@solarity/hardhat-markup/-/hardhat-markup-1.0.10.tgz", + "integrity": "sha512-MdikFHPh3iTtuWxNGJWfPTkVX4qHsWx7SM4RCz+GMw16T9fqxdekHkr+opXtrbWna+64MZc0hogEgyCfTPmwyg==", "dev": true, + "license": "MIT", "dependencies": { "json2md": "2.0.2", "lodash": "4.17.21", @@ -1742,6 +1858,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.1.tgz", "integrity": "sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -1756,13 +1873,15 @@ "version": "0.19.0", "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.19.0.tgz", "integrity": "sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -1774,31 +1893,36 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@typechain/ethers-v6": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.15", "ts-essentials": "^7.0.1" @@ -1814,6 +1938,7 @@ "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", "dev": true, + "license": "MIT", "dependencies": { "fs-extra": "^9.1.0" }, @@ -1829,6 +1954,7 @@ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1837,13 +1963,15 @@ "version": "4.3.20", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/chai-as-promised": { "version": "7.1.8", "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", "dev": true, + "license": "MIT", "dependencies": { "@types/chai": "*" } @@ -1853,6 +1981,7 @@ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimatch": "*", "@types/node": "*" @@ -1862,31 +1991,36 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mocha": { "version": "10.0.10", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "22.13.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz", - "integrity": "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==", + "version": "22.13.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz", + "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~6.20.0" } @@ -1896,6 +2030,7 @@ "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1904,13 +2039,15 @@ "version": "2.7.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/secp256k1": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -1919,6 +2056,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@uniswap/lib/-/lib-1.1.1.tgz", "integrity": "sha512-2yK7sLpKIT91TiS5sewHtOa7YuM8IuBXVl4GZv2jZFys4D2sY7K5vZh6MqD25TPA95Od+0YzCVq6cTF2IKrOmg==", + "license": "GPL-3.0-or-later", "engines": { "node": ">=10" } @@ -1927,6 +2065,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.1.tgz", "integrity": "sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q==", + "license": "GPL-3.0-or-later", "engines": { "node": ">=10" } @@ -1935,6 +2074,7 @@ "version": "1.1.0-beta.0", "resolved": "https://registry.npmjs.org/@uniswap/v2-periphery/-/v2-periphery-1.1.0-beta.0.tgz", "integrity": "sha512-6dkwAMKza8nzqYiXEr2D86dgW3TTavUvCR0w2Tu33bAbM8Ah43LKAzH7oKKPRT5VJQaMi1jtkGs1E8JPor1n5g==", + "license": "GPL-3.0-or-later", "dependencies": { "@uniswap/lib": "1.1.1", "@uniswap/v2-core": "1.0.0" @@ -1947,6 +2087,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.0.tgz", "integrity": "sha512-BJiXrBGnN8mti7saW49MXwxDBRFiWemGetE58q8zgfnPPzQKq55ADltEILqOt6VFZ22kVeVKbF8gVd8aY3l7pA==", + "license": "GPL-3.0-or-later", "engines": { "node": ">=10" } @@ -1955,6 +2096,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.1.tgz", "integrity": "sha512-7pVk4hEm00j9tc71Y9+ssYpO6ytkeI0y7WE9P6UcmNzhxPePwyAxImuhVsTqWK9YFvzgtvzJHi64pBl4jUzKMQ==", + "license": "BUSL-1.1", "engines": { "node": ">=10" } @@ -1963,6 +2105,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.4.4.tgz", "integrity": "sha512-S4+m+wh8HbWSO3DKk4LwUCPZJTpCugIsHrWR86m/OrUyvSqGDTXKFfc2sMuGXCZrD1ZqO3rhQsKgdWg3Hbb2Kw==", + "license": "GPL-2.0-or-later", "dependencies": { "@openzeppelin/contracts": "3.4.2-solc-0.7", "@uniswap/lib": "^4.0.1-alpha", @@ -1977,12 +2120,14 @@ "node_modules/@uniswap/v3-periphery/node_modules/@openzeppelin/contracts": { "version": "3.4.2-solc-0.7", "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-3.4.2-solc-0.7.tgz", - "integrity": "sha512-W6QmqgkADuFcTLzHL8vVoNBtkwjvQRpYIAom7KiUNoLKghyx3FgH0GBjt8NRvigV1ZmMOBllvE1By1C+bi8WpA==" + "integrity": "sha512-W6QmqgkADuFcTLzHL8vVoNBtkwjvQRpYIAom7KiUNoLKghyx3FgH0GBjt8NRvigV1ZmMOBllvE1By1C+bi8WpA==", + "license": "MIT" }, "node_modules/@uniswap/v3-periphery/node_modules/@uniswap/lib": { "version": "4.0.1-alpha", "resolved": "https://registry.npmjs.org/@uniswap/lib/-/lib-4.0.1-alpha.tgz", "integrity": "sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA==", + "license": "GPL-3.0-or-later", "engines": { "node": ">=10" } @@ -1991,13 +2136,15 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/abitype": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.0.tgz", "integrity": "sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/wevm" }, @@ -2015,10 +2162,11 @@ } }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2031,6 +2179,7 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -2043,6 +2192,7 @@ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.3.0" } @@ -2051,13 +2201,15 @@ "version": "4.0.0-beta.5", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -2070,6 +2222,7 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -2083,6 +2236,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2099,6 +2253,7 @@ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, + "license": "BSD-3-Clause OR MIT", "optional": true, "engines": { "node": ">=0.4.2" @@ -2109,6 +2264,7 @@ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.1.0" } @@ -2118,6 +2274,7 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2127,6 +2284,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -2142,6 +2300,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2151,6 +2310,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2166,6 +2326,7 @@ "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.2.tgz", "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=16" } @@ -2175,6 +2336,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2187,19 +2349,22 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/array-back": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2209,6 +2374,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2218,6 +2384,7 @@ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -2226,13 +2393,15 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2241,28 +2410,32 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 4.0.0" } }, "node_modules/axios": { - "version": "1.7.9", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", - "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz", + "integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==", "dev": true, + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2273,19 +2446,22 @@ "version": "1.6.7", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base-x": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", - "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", + "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" } @@ -2293,19 +2469,22 @@ "node_modules/base64-sol": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/base64-sol/-/base64-sol-1.0.1.tgz", - "integrity": "sha512-ld3cCNMeXt4uJXmLZBHFGMvVpK9KsLVEhPpFRXnvSVAqABKbuNZg/+dsq3NuM+wxFLb/UrVkz7m1ciWmkMfTbg==" + "integrity": "sha512-ld3cCNMeXt4uJXmLZBHFGMvVpK9KsLVEhPpFRXnvSVAqABKbuNZg/+dsq3NuM+wxFLb/UrVkz7m1ciWmkMfTbg==", + "license": "MIT" }, "node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -2315,6 +2494,7 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2328,6 +2508,7 @@ "integrity": "sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-addon-api": "^3.0.0", "node-gyp-build": "^4.2.2", @@ -2342,6 +2523,7 @@ "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", "integrity": "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==", "dev": true, + "license": "ISC", "dependencies": { "blake2b-wasm": "^2.4.0", "nanoassert": "^2.0.0" @@ -2352,6 +2534,7 @@ "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", "dev": true, + "license": "MIT", "dependencies": { "b4a": "^1.0.1", "nanoassert": "^2.0.0" @@ -2361,19 +2544,22 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bn.js": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -2396,6 +2582,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -2408,6 +2595,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2417,6 +2605,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -2428,25 +2617,29 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/brotli-wasm": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brotli-wasm/-/brotli-wasm-2.0.1.tgz", "integrity": "sha512-+3USgYsC7bzb5yU0/p2HnnynZl0ak0E6uoIm4UW4Aby/8s8HFCq6NCfrrf1E9c3O8OCSzq3oYO1tUVqIi61Nww==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, + "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -2461,6 +2654,7 @@ "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dev": true, + "license": "MIT", "dependencies": { "base-x": "^3.0.2" } @@ -2470,6 +2664,7 @@ "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dev": true, + "license": "MIT", "dependencies": { "bs58": "^4.0.0", "create-hash": "^1.1.0", @@ -2480,25 +2675,29 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-reverse": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -2508,6 +2707,7 @@ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" } @@ -2517,6 +2717,7 @@ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", @@ -2535,6 +2736,7 @@ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -2548,6 +2750,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2557,6 +2760,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2569,6 +2773,7 @@ "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, + "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -2587,6 +2792,7 @@ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", "dev": true, + "license": "WTFPL", "dependencies": { "check-error": "^1.0.2" }, @@ -2599,6 +2805,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2615,6 +2822,7 @@ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -2624,6 +2832,7 @@ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -2636,6 +2845,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, + "license": "MIT", "dependencies": { "readdirp": "^4.0.1" }, @@ -2650,13 +2860,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cipher-base": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" @@ -2670,6 +2882,7 @@ "resolved": "https://registry.npmjs.org/circomlibjs/-/circomlibjs-0.1.7.tgz", "integrity": "sha512-GRAUoAlKAsiiTa+PA725G9RmEmJJRc8tRFxw/zKktUxlQISGznT4hH4ESvW8FNTsrGg/nNd06sGP/Wlx0LUHVg==", "dev": true, + "license": "GPL-3.0", "dependencies": { "blake-hash": "^2.0.0", "blake2b": "^2.1.3", @@ -2678,9 +2891,9 @@ } }, "node_modules/circomlibjs/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz", + "integrity": "sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==", "dev": true, "funding": [ { @@ -2692,37 +2905,38 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" + "@ethersproject/abi": "5.8.0", + "@ethersproject/abstract-provider": "5.8.0", + "@ethersproject/abstract-signer": "5.8.0", + "@ethersproject/address": "5.8.0", + "@ethersproject/base64": "5.8.0", + "@ethersproject/basex": "5.8.0", + "@ethersproject/bignumber": "5.8.0", + "@ethersproject/bytes": "5.8.0", + "@ethersproject/constants": "5.8.0", + "@ethersproject/contracts": "5.8.0", + "@ethersproject/hash": "5.8.0", + "@ethersproject/hdnode": "5.8.0", + "@ethersproject/json-wallets": "5.8.0", + "@ethersproject/keccak256": "5.8.0", + "@ethersproject/logger": "5.8.0", + "@ethersproject/networks": "5.8.0", + "@ethersproject/pbkdf2": "5.8.0", + "@ethersproject/properties": "5.8.0", + "@ethersproject/providers": "5.8.0", + "@ethersproject/random": "5.8.0", + "@ethersproject/rlp": "5.8.0", + "@ethersproject/sha2": "5.8.0", + "@ethersproject/signing-key": "5.8.0", + "@ethersproject/solidity": "5.8.0", + "@ethersproject/strings": "5.8.0", + "@ethersproject/transactions": "5.8.0", + "@ethersproject/units": "5.8.0", + "@ethersproject/wallet": "5.8.0", + "@ethersproject/web": "5.8.0", + "@ethersproject/wordlists": "5.8.0" } }, "node_modules/clean-stack": { @@ -2730,6 +2944,7 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2739,6 +2954,7 @@ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -2751,6 +2967,7 @@ "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -2766,6 +2983,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -2777,6 +2995,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2788,13 +3007,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2806,13 +3027,15 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/command-line-args": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -2828,6 +3051,7 @@ "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^4.0.2", "chalk": "^2.4.2", @@ -2843,6 +3067,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -2855,6 +3080,7 @@ "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2864,6 +3090,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2878,6 +3105,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -2886,13 +3114,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/command-line-usage/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -2902,6 +3132,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2911,6 +3142,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -2923,6 +3155,7 @@ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2932,6 +3165,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } @@ -2940,13 +3174,15 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, + "license": "MIT", "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -2957,16 +3193,18 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/core-js": { - "version": "3.40.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.40.0.tgz", - "integrity": "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==", + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.41.0.tgz", + "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -2977,6 +3215,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, + "license": "MIT", "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", @@ -3003,6 +3242,7 @@ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -3016,6 +3256,7 @@ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -3029,13 +3270,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3050,6 +3293,7 @@ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": "*" } @@ -3058,7 +3302,8 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/death": { "version": "1.1.0", @@ -3071,6 +3316,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -3088,6 +3334,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3100,6 +3347,7 @@ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -3115,6 +3363,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3127,6 +3376,7 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, + "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -3139,6 +3389,7 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -3147,13 +3398,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -3163,6 +3416,7 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -3172,6 +3426,7 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3181,6 +3436,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -3202,6 +3458,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -3220,6 +3477,7 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -3232,6 +3490,7 @@ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -3245,13 +3504,15 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -3266,19 +3527,22 @@ "version": "4.12.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/enquirer": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -3292,6 +3556,7 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3301,6 +3566,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -3310,6 +3576,7 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3319,6 +3586,7 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -3328,6 +3596,7 @@ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -3340,6 +3609,7 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -3355,6 +3625,7 @@ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3364,6 +3635,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3376,6 +3648,7 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^2.7.1", "estraverse": "^1.9.1", @@ -3398,6 +3671,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -3420,6 +3694,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -3429,6 +3704,7 @@ "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "^1.4.0" } @@ -3438,6 +3714,7 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -3450,6 +3727,7 @@ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -3474,6 +3752,7 @@ "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", "deprecated": "This library has been deprecated and usage is discouraged.", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" @@ -3484,6 +3763,7 @@ "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3492,13 +3772,15 @@ "version": "4.12.1", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -3514,6 +3796,7 @@ "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -3540,6 +3823,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", @@ -3558,6 +3842,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } @@ -3566,13 +3851,15 @@ "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ethjs-unit": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" @@ -3586,13 +3873,15 @@ "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ethjs-util": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "dev": true, + "license": "MIT", "dependencies": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" @@ -3607,6 +3896,7 @@ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, + "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -3616,19 +3906,22 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3644,13 +3937,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-uri": { "version": "3.0.6", @@ -3666,13 +3961,15 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", - "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -3682,6 +3979,7 @@ "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.63.tgz", "integrity": "sha512-dBgdsfGks58b66JnUZeZpGxdMIDQ4QsD3VYlRJyFVrKQHb2kJy4R2gufx5oetrTxXPT+aEjg0dOvOLg1N0on4A==", "dev": true, + "license": "GPL-3.0", "dependencies": { "wasmbuilder": "0.0.16", "wasmcurves": "0.2.2", @@ -3693,6 +3991,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3705,6 +4004,7 @@ "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -3717,6 +4017,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -3733,6 +4034,7 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -3748,6 +4050,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -3762,6 +4065,7 @@ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -3778,6 +4082,7 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -3793,6 +4098,7 @@ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.17" } @@ -3801,13 +4107,15 @@ "version": "1.19.3", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -3822,7 +4130,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -3830,6 +4139,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3843,6 +4153,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3852,6 +4163,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -3861,6 +4173,7 @@ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -3870,6 +4183,7 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -3894,6 +4208,7 @@ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -3907,6 +4222,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3919,6 +4235,7 @@ "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", "dev": true, + "license": "ISC", "dependencies": { "chalk": "^2.4.2", "node-emoji": "^1.10.0" @@ -3932,6 +4249,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -3944,6 +4262,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -3958,6 +4277,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -3966,13 +4286,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -3982,6 +4304,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -3991,6 +4314,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -4003,6 +4327,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -4023,6 +4348,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4035,6 +4361,7 @@ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dev": true, + "license": "MIT", "dependencies": { "min-document": "^2.19.0", "process": "^0.11.10" @@ -4045,6 +4372,7 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, + "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" }, @@ -4057,6 +4385,7 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, + "license": "MIT", "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -4071,6 +4400,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4083,6 +4413,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "dev": true, + "license": "MIT", "dependencies": { "@types/glob": "^7.1.1", "array-union": "^2.1.0", @@ -4102,6 +4433,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4113,6 +4445,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4133,6 +4466,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4145,6 +4479,7 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4157,6 +4492,7 @@ "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -4181,13 +4517,15 @@ "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==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -4209,19 +4547,21 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/hardhat": { - "version": "2.22.18", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.18.tgz", - "integrity": "sha512-2+kUz39gvMo56s75cfLBhiFedkQf+gXdrwCcz4R/5wW0oBdwiyfj2q9BIkMoaA0WIGYYMU2I1Cc4ucTunhfjzw==", + "version": "2.22.19", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.19.tgz", + "integrity": "sha512-jptJR5o6MCgNbhd7eKa3mrteR+Ggq1exmE5RUL5ydQEVKcZm0sss5laa86yZ0ixIavIvF4zzS7TdGDuyopj0sQ==", "dev": true, + "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.7.0", + "@nomicfoundation/edr": "^0.8.0", "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-tx": "5.0.4", "@nomicfoundation/ethereumjs-util": "9.0.4", @@ -4285,6 +4625,7 @@ "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz", "integrity": "sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "cli-table3": "^0.6.0", @@ -4299,6 +4640,7 @@ "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-2.2.2.tgz", "integrity": "sha512-xlg3d00wrgUvP2S5tw3Zf6nO7OyS5crK3P6/ZP69i24pz4grM+6oFHGW/eJPSGqiDWBYX+gKp9XoqP4rwRXrdQ==", "dev": true, + "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -4325,6 +4667,7 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -4337,6 +4680,7 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" }, @@ -4349,6 +4693,7 @@ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dev": true, + "license": "MIT", "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -4363,6 +4708,7 @@ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -4376,6 +4722,7 @@ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dev": true, + "license": "MIT", "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -4393,7 +4740,8 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/hardhat/node_modules/@scure/bip32": { "version": "1.1.5", @@ -4406,6 +4754,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@noble/secp256k1": "~1.7.0", @@ -4423,6 +4772,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@scure/base": "~1.1.0" @@ -4433,6 +4783,7 @@ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "1.2.0", "@noble/secp256k1": "1.7.1", @@ -4445,6 +4796,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -4459,6 +4811,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -4468,6 +4821,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -4477,6 +4831,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -4498,6 +4853,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4507,6 +4863,7 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -4519,6 +4876,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -4534,6 +4892,7 @@ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -4548,6 +4907,7 @@ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -4558,6 +4918,7 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -4570,6 +4931,7 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } @@ -4578,13 +4940,15 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, + "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -4595,13 +4959,15 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -4618,6 +4984,7 @@ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -4631,6 +4998,7 @@ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -4644,6 +5012,7 @@ "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, + "license": "MIT", "bin": { "husky": "bin.js" }, @@ -4659,6 +5028,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -4671,6 +5041,7 @@ "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==", "dev": true, + "license": "Apache-2.0", "peer": true }, "node_modules/ignore": { @@ -4678,6 +5049,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -4686,13 +5058,15 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4709,6 +5083,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4717,7 +5092,8 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/indento/-/indento-1.1.14.tgz", "integrity": "sha512-K4cK97v4M/ucCAbe3LUpg994folYL0WnEiCFxHXAIowKLbBb/Ahiazkz3Ao5gRar4i9pDr3imcpq4suOu0FbNw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/inflight": { "version": "1.0.6", @@ -4725,6 +5101,7 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4734,19 +5111,22 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -4756,6 +5136,7 @@ "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "dev": true, + "license": "MIT", "dependencies": { "fp-ts": "^1.0.0" } @@ -4764,13 +5145,15 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -4783,6 +5166,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4792,6 +5176,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4801,6 +5186,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -4813,6 +5199,7 @@ "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.5.0", "npm": ">=3" @@ -4823,6 +5210,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4832,6 +5220,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4841,6 +5230,7 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4852,7 +5242,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isows": { "version": "1.0.3", @@ -4865,6 +5256,7 @@ "url": "https://github.com/sponsors/wagmi-dev" } ], + "license": "MIT", "peerDependencies": { "ws": "*" } @@ -4874,6 +5266,7 @@ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -4888,19 +5281,22 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4912,25 +5308,29 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stream-stringify": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", "dev": true, + "license": "MIT", "engines": { "node": ">=7.10.1" } @@ -4940,6 +5340,7 @@ "resolved": "https://registry.npmjs.org/json2md/-/json2md-2.0.2.tgz", "integrity": "sha512-bPXMyPSZRsN2Xh5tNWA4RjREnYmDK2GFO8eYOTbHSfVPfrFaqzIqFWN3gdf1bya65cm9Mf2PBSwvM7sWGEeuVA==", "dev": true, + "license": "MIT", "dependencies": { "indento": "^1.1.13" } @@ -4949,6 +5350,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -4961,6 +5363,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -4973,6 +5376,7 @@ "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -4983,6 +5387,7 @@ "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -4996,13 +5401,15 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -5012,6 +5419,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5021,6 +5429,7 @@ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", "dev": true, + "license": "MIT", "dependencies": { "package-json": "^8.1.0" }, @@ -5036,6 +5445,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -5048,13 +5458,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -5069,32 +5481,37 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -5111,6 +5528,7 @@ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, + "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } @@ -5120,6 +5538,7 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -5131,25 +5550,29 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/markdown-table": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", "dev": true, + "license": "MIT", "dependencies": { "repeat-string": "^1.0.0" }, @@ -5163,6 +5586,7 @@ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5172,6 +5596,7 @@ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -5192,6 +5617,7 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -5201,6 +5627,7 @@ "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.4.1.tgz", "integrity": "sha512-W2VSHeGTdAnWtedee+pgGn7SHvncMdINnMeHAaXrfarSaMNLff/pm7RCr/QXYxN6XzJFgJZY+28ejO0lAosW4A==", "dev": true, + "license": "MIT", "dependencies": { "buffer-reverse": "^1.0.1", "crypto-js": "^4.2.0", @@ -5214,13 +5641,15 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5234,6 +5663,7 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5243,6 +5673,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -5255,6 +5686,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -5275,19 +5707,22 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5303,6 +5738,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5312,6 +5748,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -5321,6 +5758,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -5333,6 +5771,7 @@ "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", "dev": true, + "license": "MIT", "dependencies": { "obliterator": "^2.0.0" } @@ -5342,6 +5781,7 @@ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -5377,6 +5817,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5402,6 +5843,7 @@ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5421,6 +5863,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5433,6 +5876,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -5445,6 +5889,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5460,6 +5905,7 @@ "resolved": "https://registry.npmjs.org/mock-local-storage/-/mock-local-storage-1.1.24.tgz", "integrity": "sha512-NEfmw+yEK9oe6xCfOnTaJ6Dz+L3eu6vsZopJlxflXYxr7Mg3EV+S0NXKUQlY9AAeDEdaPZDSUGq1Gi6kLSa5PA==", "dev": true, + "license": "MIT", "dependencies": { "core-js": "^3.30.2", "global": "^4.3.2" @@ -5469,31 +5915,36 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nanoassert": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.21" } @@ -5503,6 +5954,7 @@ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "dev": true, + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -5514,6 +5966,7 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "dev": true, + "license": "ISC", "dependencies": { "abbrev": "1" }, @@ -5526,6 +5979,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5535,6 +5989,7 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -5547,6 +6002,7 @@ "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" @@ -5560,19 +6016,22 @@ "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/obliterator": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -5582,6 +6041,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -5598,13 +6058,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5614,6 +6076,7 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" } @@ -5623,6 +6086,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5638,6 +6102,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -5653,6 +6118,7 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -5668,6 +6134,7 @@ "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", "dev": true, + "license": "MIT", "dependencies": { "got": "^12.1.0", "registry-auth-token": "^5.0.1", @@ -5685,13 +6152,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/package-json/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5704,6 +6173,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -5716,6 +6186,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5734,6 +6205,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5743,6 +6215,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5752,6 +6225,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5760,13 +6234,15 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -5783,6 +6259,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5792,6 +6269,7 @@ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -5801,6 +6279,7 @@ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, + "license": "MIT", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -5816,13 +6295,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -5835,6 +6316,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5844,6 +6326,7 @@ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -5858,10 +6341,11 @@ } }, "node_modules/prettier": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.2.tgz", - "integrity": "sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -5877,6 +6361,7 @@ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, + "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -5889,6 +6374,7 @@ "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.2.tgz", "integrity": "sha512-VVD/4XlDjSzyPWWCPW8JEleFa8JNKFYac5kNlMjVXemQyQZKfpekPMhFZSePuXB6L+RixlFvWe20iacGjFYrLw==", "dev": true, + "license": "MIT", "dependencies": { "@solidity-parser/parser": "^0.19.0", "semver": "^7.6.3" @@ -5905,6 +6391,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5917,6 +6404,7 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -5925,19 +6413,22 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5960,13 +6451,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -5979,6 +6472,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -5988,6 +6482,7 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -6003,6 +6498,7 @@ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -6018,6 +6514,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6027,6 +6524,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6041,6 +6539,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.18.0" }, @@ -6066,6 +6565,7 @@ "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, + "license": "MIT", "dependencies": { "minimatch": "^3.0.5" }, @@ -6078,6 +6578,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6088,6 +6589,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6100,6 +6602,7 @@ "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6109,6 +6612,7 @@ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", "dev": true, + "license": "MIT", "dependencies": { "@pnpm/npm-conf": "^2.1.0" }, @@ -6121,6 +6625,7 @@ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "dev": true, + "license": "MIT", "dependencies": { "rc": "1.2.8" }, @@ -6136,6 +6641,7 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -6145,6 +6651,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6154,6 +6661,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6163,6 +6671,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, + "license": "MIT", "dependencies": { "path-parse": "^1.0.6" }, @@ -6174,13 +6683,15 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6190,6 +6701,7 @@ "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" }, @@ -6201,10 +6713,11 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -6215,6 +6728,7 @@ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -6225,6 +6739,7 @@ "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "dev": true, + "license": "MPL-2.0", "dependencies": { "bn.js": "^5.2.0" }, @@ -6251,6 +6766,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -6273,19 +6789,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sc-istanbul": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "abbrev": "1.0.x", "async": "1.x", @@ -6311,6 +6830,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -6320,6 +6840,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6331,6 +6852,7 @@ "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "inflight": "^1.0.4", "inherits": "2", @@ -6347,6 +6869,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6356,6 +6879,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -6369,6 +6893,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -6382,6 +6907,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6393,13 +6919,15 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sc-istanbul/node_modules/supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^1.0.0" }, @@ -6412,6 +6940,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -6423,7 +6952,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/secp256k1": { "version": "4.0.4", @@ -6431,6 +6961,7 @@ "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "elliptic": "^6.5.7", "node-addon-api": "^5.0.0", @@ -6440,38 +6971,19 @@ "node": ">=18.0.0" } }, - "node_modules/secp256k1/node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true - }, - "node_modules/secp256k1/node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/secp256k1/node_modules/node-addon-api": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -6481,6 +6993,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -6489,19 +7002,22 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, + "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -6515,6 +7031,7 @@ "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "charenc": ">= 0.0.1", "crypt": ">= 0.0.1" @@ -6528,6 +7045,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6540,6 +7058,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6549,6 +7068,7 @@ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -6566,6 +7086,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6577,6 +7098,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6597,6 +7119,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6609,6 +7132,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -6621,6 +7145,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6630,6 +7155,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -6647,6 +7173,7 @@ "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", "dev": true, + "license": "MIT", "dependencies": { "command-exists": "^1.2.8", "commander": "^8.1.0", @@ -6668,6 +7195,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -6677,6 +7205,7 @@ "resolved": "https://registry.npmjs.org/solhint/-/solhint-5.0.5.tgz", "integrity": "sha512-WrnG6T+/UduuzSWsSOAbfq1ywLUDwNea3Gd5hg6PS+pLUm8lz2ECNr0beX609clBxmDeZ3676AiA9nPDljmbJQ==", "dev": true, + "license": "MIT", "dependencies": { "@solidity-parser/parser": "^0.19.0", "ajv": "^6.12.6", @@ -6709,6 +7238,7 @@ "resolved": "https://registry.npmjs.org/solhint-plugin-prettier/-/solhint-plugin-prettier-0.1.0.tgz", "integrity": "sha512-SDOTSM6tZxZ6hamrzl3GUgzF77FM6jZplgL2plFBclj/OjKP8Z3eIPojKU73gRr0MvOS8ACZILn8a5g0VTz/Gw==", "dev": true, + "license": "MIT", "dependencies": { "@prettier/sync": "^0.3.0", "prettier-linter-helpers": "^1.0.0" @@ -6723,6 +7253,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -6733,6 +7264,7 @@ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6752,6 +7284,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6764,6 +7297,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, + "license": "MIT", "optional": true, "bin": { "prettier": "bin-prettier.js" @@ -6780,6 +7314,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -6791,13 +7326,15 @@ "version": "0.4.59", "resolved": "https://registry.npmjs.org/solidity-ast/-/solidity-ast-0.4.59.tgz", "integrity": "sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/solidity-coverage": { "version": "0.8.14", "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.14.tgz", "integrity": "sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA==", "dev": true, + "license": "ISC", "dependencies": { "@ethersproject/abi": "^5.0.9", "@solidity-parser/parser": "^0.19.0", @@ -6831,6 +7368,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -6843,6 +7381,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -6857,6 +7396,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -6865,13 +7405,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/solidity-coverage/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -6881,6 +7423,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -6895,6 +7438,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6904,6 +7448,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -6913,6 +7458,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -6925,6 +7471,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -6937,6 +7484,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -6959,6 +7507,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -6969,6 +7518,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -6977,13 +7527,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stacktrace-parser": { "version": "0.1.11", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.7.1" }, @@ -6996,6 +7548,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -7005,6 +7558,7 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -7014,6 +7568,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -7022,13 +7577,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true + "dev": true, + "license": "WTFPL OR MIT" }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7044,6 +7601,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7058,6 +7616,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7071,6 +7630,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7083,6 +7643,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7092,6 +7653,7 @@ "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", "dev": true, + "license": "MIT", "dependencies": { "is-hex-prefixed": "1.0.0" }, @@ -7105,6 +7667,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -7117,6 +7680,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7129,6 +7693,7 @@ "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -7145,6 +7710,7 @@ "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^4.0.1", "deep-extend": "~0.6.0", @@ -7160,6 +7726,7 @@ "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7169,6 +7736,7 @@ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7178,6 +7746,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -7193,19 +7762,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", "dev": true, + "license": "MIT", "dependencies": { "fdir": "^6.4.3", "picomatch": "^4.0.2" @@ -7222,6 +7794,7 @@ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", "dev": true, + "license": "MIT", "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -7236,6 +7809,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7248,6 +7822,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -7260,6 +7835,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -7272,6 +7848,7 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } @@ -7281,6 +7858,7 @@ "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } @@ -7290,6 +7868,7 @@ "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", "dev": true, + "license": "ISC", "dependencies": { "chalk": "^4.1.0", "command-line-args": "^5.1.1", @@ -7305,6 +7884,7 @@ "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", "dev": true, + "license": "MIT", "peerDependencies": { "typescript": ">=3.7.0" } @@ -7314,6 +7894,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -7357,6 +7938,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -7366,6 +7948,7 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, + "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -7379,31 +7962,36 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tsort": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true + "dev": true, + "license": "Unlicense" }, "node_modules/tweetnacl-util": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true + "dev": true, + "license": "Unlicense" }, "node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "~1.1.2" }, @@ -7416,6 +8004,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7425,6 +8014,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -7437,6 +8027,7 @@ "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/prettier": "^2.1.1", "debug": "^4.3.1", @@ -7461,6 +8052,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7471,6 +8063,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -7486,6 +8079,7 @@ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7506,6 +8100,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -7515,6 +8110,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7527,6 +8123,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -7539,6 +8136,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -7554,15 +8152,17 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7576,6 +8176,7 @@ "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7585,6 +8186,7 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -7594,10 +8196,11 @@ } }, "node_modules/undici": { - "version": "5.28.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz", - "integrity": "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", "dev": true, + "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -7609,13 +8212,15 @@ "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -7625,6 +8230,7 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -7634,6 +8240,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -7642,19 +8249,22 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -7663,7 +8273,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/viem": { "version": "2.7.14", @@ -7676,6 +8287,7 @@ "url": "https://github.com/sponsors/wevm" } ], + "license": "MIT", "dependencies": { "@adraffy/ens-normalize": "1.10.0", "@noble/curves": "1.2.0", @@ -7699,13 +8311,15 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/viem/node_modules/ws": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -7726,13 +8340,15 @@ "version": "0.0.16", "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.16.tgz", "integrity": "sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==", - "dev": true + "dev": true, + "license": "GPL-3.0" }, "node_modules/wasmcurves": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.2.2.tgz", "integrity": "sha512-JRY908NkmKjFl4ytnTu5ED6AwPD+8VJ9oc94kdq7h5bIwbj0L4TDJ69mG+2aLs2SoCmGfqIesMWTEJjtYsoQXQ==", "dev": true, + "license": "GPL-3.0", "dependencies": { "wasmbuilder": "0.0.16" } @@ -7741,13 +8357,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/web3-utils": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "@ethereumjs/util": "^8.1.0", "bn.js": "^5.2.1", @@ -7767,6 +8385,7 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -7779,6 +8398,7 @@ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" }, @@ -7791,6 +8411,7 @@ "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", "dev": true, + "license": "MIT", "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -7805,6 +8426,7 @@ "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -7818,6 +8440,7 @@ "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", "dev": true, + "license": "MIT", "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -7830,6 +8453,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7845,6 +8469,7 @@ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.0.0" }, @@ -7857,6 +8482,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -7865,13 +8491,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wordwrapjs": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, + "license": "MIT", "dependencies": { "reduce-flatten": "^2.0.0", "typical": "^5.2.0" @@ -7885,6 +8513,7 @@ "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7893,13 +8522,15 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7918,6 +8549,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7934,13 +8566,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ws": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -7962,6 +8596,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -7971,6 +8606,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -7989,6 +8625,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -7998,6 +8635,7 @@ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -8013,6 +8651,7 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -8022,6 +8661,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index f0631d1b..7fbb21ea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@solarity/solidity-lib", - "version": "3.0.0-rc.3", + "version": "3.0.0", "license": "MIT", "author": "Distributed Lab", "readme": "README.md", diff --git a/test/contracts-registry/pools/PoolContractsRegistry.test.ts b/test/contracts-registry/pools/PoolContractsRegistry.test.ts index dd6942d7..ef061429 100644 --- a/test/contracts-registry/pools/PoolContractsRegistry.test.ts +++ b/test/contracts-registry/pools/PoolContractsRegistry.test.ts @@ -51,6 +51,8 @@ describe("PoolContractsRegistry", () => { await contractsRegistry.injectDependencies(await contractsRegistry.POOL_CONTRACTS_REGISTRY_NAME()); + expect(await poolContractsRegistry.getContractsRegistry()).to.equal(await contractsRegistry.getAddress()); + NAME_1 = await poolContractsRegistry.POOL_1_NAME(); NAME_2 = await poolContractsRegistry.POOL_2_NAME(); diff --git a/test/contracts-registry/pools/pool-factory/PoolFactory.test.ts b/test/contracts-registry/pools/pool-factory/PoolFactory.test.ts index 9cca3fdb..819f60de 100644 --- a/test/contracts-registry/pools/pool-factory/PoolFactory.test.ts +++ b/test/contracts-registry/pools/pool-factory/PoolFactory.test.ts @@ -7,7 +7,6 @@ import { Reverter } from "@/test/helpers/reverter"; import { PoolFactoryMock, - BeaconProxy, PoolContractsRegistryMock, ContractsRegistryPoolMock, PoolMock, @@ -66,6 +65,8 @@ describe("PoolFactory", () => { NAME_1 = await poolContractsRegistry.POOL_1_NAME(); NAME_2 = await poolContractsRegistry.POOL_2_NAME(); + expect(await poolFactory.getContractsRegistry()).to.equal(await contractsRegistry.getAddress()); + await reverter.snapshot(); }); @@ -97,10 +98,8 @@ describe("PoolFactory", () => { expect(await poolContractsRegistry.countPools(NAME_2)).to.equal(0n); const PoolMock = await ethers.getContractFactory("PoolMock"); - const BeaconProxy = await ethers.getContractFactory("BeaconProxy"); const pool = PoolMock.attach((await poolContractsRegistry.listPools(NAME_1, 0, 1))[0]); - const beaconProxy = BeaconProxy.attach(await pool.getAddress()); expect(await pool.token()).not.to.equal(ethers.ZeroAddress); }); diff --git a/test/diamond/Diamond.test.ts b/test/diamond/Diamond.test.ts index aef9d779..cf37cd12 100644 --- a/test/diamond/Diamond.test.ts +++ b/test/diamond/Diamond.test.ts @@ -33,7 +33,7 @@ describe("Diamond", () => { describe("access", () => { it("should initialize only once", async () => { await expect(diamond.__OwnableDiamondMock_init()) - .to.be.revertedWithCustomError(diamond, "AlreadyInitialized") + .to.be.revertedWithCustomError(diamond, "InvalidInitialization") .withArgs(); }); @@ -63,20 +63,20 @@ describe("Diamond", () => { it("should not transfer ownership from non-owner", async () => { await expect(diamond.connect(SECOND).transferOwnership(SECOND.address)) - .to.be.revertedWithCustomError(diamond, "CallerNotOwner") - .withArgs(SECOND.address, OWNER.address); + .to.be.revertedWithCustomError(diamond, "OwnableUnauthorizedAccount") + .withArgs(SECOND.address); }); it("should not renounce ownership from non-owner", async () => { await expect(diamond.connect(SECOND).renounceOwnership()) - .to.be.revertedWithCustomError(diamond, "CallerNotOwner") - .withArgs(SECOND.address, OWNER.address); + .to.be.revertedWithCustomError(diamond, "OwnableUnauthorizedAccount") + .withArgs(SECOND.address); }); it("should not transfer ownership to zero address", async () => { await expect(diamond.transferOwnership(ethers.ZeroAddress)) - .to.be.revertedWithCustomError(diamond, "InvalidOwner") - .withArgs(); + .to.be.revertedWithCustomError(diamond, "OwnableInvalidOwner") + .withArgs(ethers.ZeroAddress); }); }); @@ -185,12 +185,12 @@ describe("Diamond", () => { it("only owner should add facets", async () => { await expect(diamond.connect(SECOND).diamondCutShort(facets)) - .to.be.revertedWithCustomError(diamond, "CallerNotOwner") - .withArgs(SECOND.address, OWNER.address); + .to.be.revertedWithCustomError(diamond, "OwnableUnauthorizedAccount") + .withArgs(SECOND.address); await expect(diamond.connect(SECOND).diamondCutLong(facets, ethers.ZeroAddress, ethers.ZeroHash)) - .to.be.revertedWithCustomError(diamond, "CallerNotOwner") - .withArgs(SECOND.address, OWNER.address); + .to.be.revertedWithCustomError(diamond, "OwnableUnauthorizedAccount") + .withArgs(SECOND.address); }); it("should not add duplicate selectors", async () => { @@ -273,12 +273,12 @@ describe("Diamond", () => { it("only owner should remove facets", async () => { await expect(diamond.connect(SECOND).diamondCutShort(facets)) - .to.be.revertedWithCustomError(diamond, "CallerNotOwner") - .withArgs(SECOND.address, OWNER.address); + .to.be.revertedWithCustomError(diamond, "OwnableUnauthorizedAccount") + .withArgs(SECOND.address); await expect(diamond.connect(SECOND).diamondCutLong(facets, ethers.ZeroAddress, ethers.ZeroHash)) - .to.be.revertedWithCustomError(diamond, "CallerNotOwner") - .withArgs(SECOND.address, OWNER.address); + .to.be.revertedWithCustomError(diamond, "OwnableUnauthorizedAccount") + .withArgs(SECOND.address); }); }); @@ -375,12 +375,12 @@ describe("Diamond", () => { it("only owner should replace facets", async () => { await expect(diamond.connect(SECOND).diamondCutShort(facets)) - .to.be.revertedWithCustomError(diamond, "CallerNotOwner") - .withArgs(SECOND.address, OWNER.address); + .to.be.revertedWithCustomError(diamond, "OwnableUnauthorizedAccount") + .withArgs(SECOND.address); await expect(diamond.connect(SECOND).diamondCutLong(facets, ethers.ZeroAddress, ethers.ZeroHash)) - .to.be.revertedWithCustomError(diamond, "CallerNotOwner") - .withArgs(SECOND.address, OWNER.address); + .to.be.revertedWithCustomError(diamond, "OwnableUnauthorizedAccount") + .withArgs(SECOND.address); }); }); diff --git a/test/diamond/DiamondAccessControl.ts b/test/diamond/DiamondAccessControl.ts deleted file mode 100644 index d2bb815e..00000000 --- a/test/diamond/DiamondAccessControl.ts +++ /dev/null @@ -1,163 +0,0 @@ -import { ethers } from "hardhat"; -import { expect } from "chai"; -import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; - -import { Reverter } from "@/test/helpers/reverter"; -import { getSelectors, FacetAction } from "@/test/helpers/diamond-helper"; - -import { OwnableDiamondMock, Diamond, DiamondAccessControlMock } from "@ethers-v6"; - -describe("DiamondAccessControl", () => { - const reverter = new Reverter(); - - const ADMIN_ROLE = ethers.ZeroHash; - const AGENT_ROLE = "0x0000000000000000000000000000000000000000000000000000000000000001"; - - let OWNER: SignerWithAddress; - let SECOND: SignerWithAddress; - let THIRD: SignerWithAddress; - - let access: DiamondAccessControlMock; - let diamond: OwnableDiamondMock; - - before("setup", async () => { - [OWNER, SECOND, THIRD] = await ethers.getSigners(); - - const OwnableDiamond = await ethers.getContractFactory("OwnableDiamondMock"); - const DiamondAccessControlMock = await ethers.getContractFactory("DiamondAccessControlMock"); - - diamond = await OwnableDiamond.deploy(); - access = await DiamondAccessControlMock.deploy(); - - await diamond.__OwnableDiamondMock_init(); - - const facets: Diamond.FacetStruct[] = [ - { - facetAddress: await access.getAddress(), - action: FacetAction.Add, - functionSelectors: getSelectors(access.interface), - }, - ]; - - await diamond.diamondCutShort(facets); - - access = DiamondAccessControlMock.attach(await diamond.getAddress()); - - await access.__DiamondAccessControlMock_init(); - - await reverter.snapshot(); - }); - - afterEach(reverter.revert); - - describe("access", () => { - it("should initialize only once", async () => { - await expect(access.__DiamondAccessControlMock_init()) - .to.be.revertedWithCustomError(diamond, "AlreadyInitialized") - .withArgs(); - }); - - it("should initialize only by top level contract", async () => { - await expect(access.__DiamondAccessControlDirect_init()) - .to.be.revertedWithCustomError(diamond, "NotInitializing") - .withArgs(); - }); - }); - - describe("DiamondAccessControl functions", () => { - describe("grantRole", async () => { - it("should not grant role if not admin", async () => { - await expect(access.connect(SECOND).grantRole(AGENT_ROLE, SECOND)) - .to.be.revertedWithCustomError(access, "RoleNotGranted") - .withArgs(await access.getRoleAdmin(AGENT_ROLE), SECOND); - }); - - it("should not grant role if it's granted", async () => { - await access.grantRole(AGENT_ROLE, SECOND); - - await expect(access.grantRole(AGENT_ROLE, SECOND)) - .to.be.revertedWithCustomError(access, "RoleAlreadyGranted") - .withArgs(AGENT_ROLE, SECOND); - }); - - it("should grant role if all conditions are met", async () => { - await access.grantRole(AGENT_ROLE, SECOND); - - expect(await access.hasRole(AGENT_ROLE, SECOND)).to.be.true; - }); - }); - - describe("revokeRole", async () => { - beforeEach(async () => { - await access.grantRole(AGENT_ROLE, SECOND); - }); - - it("should not revoke role if not admin", async () => { - await expect(access.connect(SECOND).revokeRole(AGENT_ROLE, SECOND)) - .to.be.revertedWithCustomError(access, "RoleNotGranted") - .withArgs(await access.getRoleAdmin(AGENT_ROLE), SECOND); - }); - - it("should not revoke role if it's not granted", async () => { - await access.revokeRole(AGENT_ROLE, SECOND); - - await expect(access.revokeRole(AGENT_ROLE, SECOND)) - .to.be.revertedWithCustomError(access, "RoleNotGranted") - .withArgs(AGENT_ROLE, SECOND); - }); - - it("should revoke role if all conditions are met", async () => { - await access.revokeRole(AGENT_ROLE, SECOND); - - expect(await access.hasRole(AGENT_ROLE, SECOND)).to.be.false; - }); - }); - - describe("renounceRole", async () => { - beforeEach(async () => { - await access.grantRole(AGENT_ROLE, SECOND); - }); - - it("should not renounce role if not self", async () => { - await expect(access.renounceRole(AGENT_ROLE, SECOND)) - .to.be.revertedWithCustomError(access, "UnauthorizedAccount") - .withArgs(OWNER); - }); - - it("should renounce role if all conditions are met", async () => { - await access.connect(SECOND).renounceRole(AGENT_ROLE, SECOND); - - expect(await access.hasRole(AGENT_ROLE, SECOND)).to.be.false; - }); - }); - - describe("setAdminRole", async () => { - beforeEach(async () => { - await access.grantRole(AGENT_ROLE, SECOND); - await access.setRoleAdmin(AGENT_ROLE, AGENT_ROLE); - }); - - it("should not grant role if not admin", async () => { - await expect(access.grantRole(AGENT_ROLE, THIRD)) - .to.be.revertedWithCustomError(access, "RoleNotGranted") - .withArgs(await access.getRoleAdmin(AGENT_ROLE), OWNER); - - it("should grant role if all conditions are met", async () => { - await access.connect(SECOND).grantRole(AGENT_ROLE, THIRD); - - expect(await access.hasRole(AGENT_ROLE, THIRD)).to.be.true; - }); - }); - }); - - describe("getters", () => { - it("should return base data", async () => { - expect(await access.DEFAULT_ADMIN_ROLE()).to.equal(ADMIN_ROLE); - expect(await access.AGENT_ROLE()).to.equal(AGENT_ROLE); - expect(await access.hasRole(ADMIN_ROLE, OWNER)).to.be.true; - expect(await access.hasRole(ADMIN_ROLE, SECOND)).to.be.false; - expect(await access.getRoleAdmin(AGENT_ROLE)).to.equal(ADMIN_ROLE); - }); - }); - }); -}); diff --git a/test/diamond/DiamondERC20.test.ts b/test/diamond/DiamondERC20.test.ts deleted file mode 100644 index 4c479428..00000000 --- a/test/diamond/DiamondERC20.test.ts +++ /dev/null @@ -1,248 +0,0 @@ -import { ethers } from "hardhat"; -import { expect } from "chai"; - -import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; - -import { Reverter } from "@/test/helpers/reverter"; -import { getSelectors, FacetAction } from "@/test/helpers/diamond-helper"; -import { wei } from "@/scripts/utils/utils"; - -import { OwnableDiamondMock, DiamondERC20Mock, Diamond } from "@ethers-v6"; - -describe("DiamondERC20 and InitializableStorage", () => { - const reverter = new Reverter(); - - let OWNER: SignerWithAddress; - let SECOND: SignerWithAddress; - - let erc20: DiamondERC20Mock; - let diamond: OwnableDiamondMock; - - before("setup", async () => { - [OWNER, SECOND] = await ethers.getSigners(); - - const OwnableDiamond = await ethers.getContractFactory("OwnableDiamondMock"); - const DiamondERC20Mock = await ethers.getContractFactory("DiamondERC20Mock"); - - diamond = await OwnableDiamond.deploy(); - erc20 = await DiamondERC20Mock.deploy(); - - const facets: Diamond.FacetStruct[] = [ - { - facetAddress: await erc20.getAddress(), - action: FacetAction.Add, - functionSelectors: getSelectors(erc20.interface), - }, - ]; - - await diamond.__OwnableDiamondMock_init(); - await diamond.diamondCutShort(facets); - - erc20 = DiamondERC20Mock.attach(await diamond.getAddress()); - - await erc20.__DiamondERC20Mock_init("Mock Token", "MT"); - - await reverter.snapshot(); - }); - - afterEach(reverter.revert); - - describe("access", () => { - it("should initialize only once", async () => { - await expect(erc20.__DiamondERC20Mock_init("Mock Token", "MT")) - .to.be.revertedWithCustomError(erc20, "AlreadyInitialized") - .withArgs(); - }); - - it("should initialize only by top level contract", async () => { - await expect(erc20.__DiamondERC20Direct_init("Mock Token", "MT")) - .to.be.revertedWithCustomError(erc20, "NotInitializing") - .withArgs(); - }); - - it("should reinitialize contract correctly", async () => { - await erc20.enableInitializers(1); - - let tx = erc20.__DiamondERC20Mock_reinit("Mock Token 2", "MT2", 2); - await expect(tx) - .to.emit(erc20, "Initialized") - .withArgs(await erc20.DIAMOND_ERC20_STORAGE_SLOT(), 2); - expect(await erc20.getInitializedVersion()).to.be.equal(2); - - tx = erc20.__DiamondERC20Mock_reinit("Mock Token 5", "MT5", 5); - await expect(tx) - .to.emit(erc20, "Initialized") - .withArgs(await erc20.DIAMOND_ERC20_STORAGE_SLOT(), 5); - expect(await erc20.getInitializedVersion()).to.be.equal(5); - - await expect(erc20.__DiamondERC20Mock_reinit("Mock Token 4", "MT4", 4)) - .to.be.revertedWithCustomError(erc20, "InvalidInitialization") - .withArgs(); - - expect(await erc20.getInitializedVersion()).to.be.equal(5); - - await expect(erc20.__DiamondERC20Mock_reinit("Mock Token 5", "MT5", 5)) - .to.be.revertedWithCustomError(erc20, "InvalidInitialization") - .withArgs(); - }); - - it("should not allow to reinitialize within the initializer", async () => { - const DiamondERC20Mock = await ethers.getContractFactory("DiamondERC20Mock"); - const contract = await DiamondERC20Mock.deploy(); - - await contract.enableInitializers(0); - - await expect(contract.__DiamondERC20Mock_reinitInit("Mock Token", "MTT", 2)) - .to.be.revertedWithCustomError(erc20, "InvalidInitialization") - .withArgs(); - }); - - it("should disable implementation initialization", async () => { - const DiamondERC20Mock = await ethers.getContractFactory("DiamondERC20Mock"); - const contract = await DiamondERC20Mock.deploy(); - - const deploymentTx = contract.deploymentTransaction(); - - expect(deploymentTx) - .to.emit(contract, "Initialized") - .withArgs(await erc20.DIAMOND_ERC20_STORAGE_SLOT()); - - await contract.enableInitializers(1); - - let disableTx = contract.disableInitializers(); - await expect(disableTx) - .to.emit(contract, "Initialized") - .withArgs(await erc20.DIAMOND_ERC20_STORAGE_SLOT(), 2n ** 64n - 1n); - - await expect(contract.__DiamondERC20Mock_reinit("Mock Token", "MTT", 2)) - .to.be.revertedWithCustomError(erc20, "InvalidInitialization") - .withArgs(); - - disableTx = contract.disableInitializers(); - await expect(disableTx).to.not.emit(contract, "Initialized"); - }); - - it("should not allow to disable initialization within the initializer", async () => { - const DiamondERC20Mock = await ethers.getContractFactory("DiamondERC20Mock"); - const contract = await DiamondERC20Mock.deploy(); - - await contract.enableInitializers(0); - - await expect(contract.__DiamondERC20Mock_disableInit()) - .to.be.revertedWithCustomError(erc20, "InvalidInitialization") - .withArgs(); - }); - }); - - describe("DiamondERC20 functions", () => { - it("should transfer tokens", async () => { - await erc20.mint(OWNER.address, wei("100")); - await erc20.transfer(SECOND.address, wei("50")); - - expect(await erc20.balanceOf(OWNER.address)).to.equal(wei("50")); - expect(await erc20.balanceOf(SECOND.address)).to.equal(wei("50")); - }); - - it("should not transfer tokens to/from zero address", async () => { - await expect(erc20.transferMock(SECOND.address, ethers.ZeroAddress, wei("100"))) - .to.be.revertedWithCustomError(erc20, "ReceiverIsZeroAddress") - .withArgs(); - - await expect(erc20.transferMock(ethers.ZeroAddress, SECOND.address, wei("100"))) - .to.be.revertedWithCustomError(erc20, "SenderIsZeroAddress") - .withArgs(); - }); - - it("should not transfer tokens if balance is insufficient", async () => { - await expect(erc20.transfer(SECOND.address, wei("100"))) - .to.be.revertedWithCustomError(erc20, "InsufficientBalance") - .withArgs(OWNER.address, erc20.balanceOf(OWNER.address), wei("100")); - }); - - it("should mint tokens", async () => { - await erc20.mint(OWNER.address, wei("100")); - - expect(await erc20.balanceOf(OWNER.address)).to.equal(wei("100")); - }); - - it("should not mint tokens to zero address", async () => { - await expect(erc20.mint(ethers.ZeroAddress, wei("100"))) - .to.be.revertedWithCustomError(erc20, "ReceiverIsZeroAddress") - .withArgs(); - }); - - it("should burn tokens", async () => { - await erc20.mint(OWNER.address, wei("100")); - await erc20.burn(OWNER.address, wei("50")); - - expect(await erc20.balanceOf(OWNER.address)).to.equal(wei("50")); - }); - - it("should not burn tokens from zero address", async () => { - await expect(erc20.burn(ethers.ZeroAddress, wei("100"))) - .to.be.revertedWithCustomError(erc20, "SenderIsZeroAddress") - .withArgs(); - }); - - it("should not burn tokens if balance is insufficient", async () => { - await expect(erc20.burn(OWNER.address, wei("100"))) - .to.be.revertedWithCustomError(erc20, "InsufficientBalance") - .withArgs(OWNER.address, erc20.balanceOf(OWNER.address), wei("100")); - }); - - it("should approve tokens", async () => { - await erc20.approve(SECOND.address, wei("100")); - - expect(await erc20.allowance(OWNER.address, SECOND.address)).to.equal(wei("100")); - }); - - it("should not approve tokens to/from zero address", async () => { - await expect(erc20.approveMock(OWNER.address, ethers.ZeroAddress, wei("100"))) - .to.be.revertedWithCustomError(erc20, "SpenderIsZeroAddress") - .withArgs(); - - await expect(erc20.approveMock(ethers.ZeroAddress, OWNER.address, wei("100"))) - .to.be.revertedWithCustomError(erc20, "ApproverIsZeroAddress") - .withArgs(); - }); - - it("should transfer tokens from address", async () => { - await erc20.mint(OWNER.address, wei("100")); - await erc20.approve(SECOND.address, wei("100")); - await erc20.connect(SECOND).transferFrom(OWNER.address, SECOND.address, wei("50")); - - expect(await erc20.balanceOf(OWNER.address)).to.equal(wei("50")); - expect(await erc20.balanceOf(SECOND.address)).to.equal(wei("50")); - }); - - it("should not transfer tokens from address if balance is insufficient", async () => { - await erc20.mint(OWNER.address, wei("100")); - await erc20.approve(SECOND.address, wei("100")); - - await expect(erc20.connect(SECOND).transferFrom(OWNER.address, SECOND.address, wei("110"))) - .to.be.revertedWithCustomError(erc20, "InsufficientAllowance") - .withArgs(SECOND.address, await erc20.allowance(OWNER.address, SECOND.address), wei("110")); - }); - - it("should not spend allowance if allowance is infinite type(uint256).max", async () => { - await erc20.mint(OWNER.address, wei("100")); - await erc20.approve(SECOND, ethers.MaxUint256); - await erc20.connect(SECOND).transferFrom(OWNER.address, SECOND.address, wei("100")); - - expect(await erc20.allowance(OWNER.address, SECOND.address)).to.equal(ethers.MaxUint256); - }); - }); - - describe("getters", () => { - it("should return base data", async () => { - expect(await erc20.name()).to.equal("Mock Token"); - expect(await erc20.symbol()).to.equal("MT"); - expect(await erc20.decimals()).to.equal(18); - - await erc20.mint(OWNER.address, wei("100")); - - expect(await erc20.balanceOf(OWNER.address)).to.equal(wei("100")); - expect(await erc20.totalSupply()).to.equal(wei("100")); - }); - }); -}); diff --git a/test/diamond/DiamondERC721.test.ts b/test/diamond/DiamondERC721.test.ts deleted file mode 100644 index 444cb1dc..00000000 --- a/test/diamond/DiamondERC721.test.ts +++ /dev/null @@ -1,440 +0,0 @@ -import { ethers } from "hardhat"; -import { expect } from "chai"; - -import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; - -import { Reverter } from "@/test/helpers/reverter"; -import { getSelectors, FacetAction } from "@/test/helpers/diamond-helper"; - -import { OwnableDiamondMock, DiamondERC721Mock, Diamond, DiamondERC721NotReceiverMock } from "@ethers-v6"; - -describe("DiamondERC721 and InitializableStorage", () => { - const reverter = new Reverter(); - - let OWNER: SignerWithAddress; - let SECOND: SignerWithAddress; - let THIRD: SignerWithAddress; - - let erc721: DiamondERC721Mock; - let diamond: OwnableDiamondMock; - let notReceiverMock: DiamondERC721NotReceiverMock; - - before("setup", async () => { - [OWNER, SECOND, THIRD] = await ethers.getSigners(); - - const OwnableDiamond = await ethers.getContractFactory("OwnableDiamondMock"); - const DiamondERC721Mock = await ethers.getContractFactory("DiamondERC721Mock"); - const DiamondERC721NotReceiverMock = await ethers.getContractFactory("DiamondERC721NotReceiverMock"); - - diamond = await OwnableDiamond.deploy(); - const diamond2 = await OwnableDiamond.deploy(); - erc721 = await DiamondERC721Mock.deploy(); - notReceiverMock = await DiamondERC721NotReceiverMock.deploy(); - - const facets: Diamond.FacetStruct[] = [ - { - facetAddress: await erc721.getAddress(), - action: FacetAction.Add, - functionSelectors: getSelectors(erc721.interface), - }, - ]; - - const facets2: Diamond.FacetStruct[] = [ - { - facetAddress: await notReceiverMock.getAddress(), - action: FacetAction.Add, - functionSelectors: getSelectors(notReceiverMock.interface), - }, - ]; - - await diamond.__OwnableDiamondMock_init(); - await diamond.diamondCutShort(facets); - - await diamond2.__OwnableDiamondMock_init(); - await diamond2.diamondCutShort(facets2); - - erc721 = DiamondERC721Mock.attach(await diamond.getAddress()); - notReceiverMock = DiamondERC721NotReceiverMock.attach(await diamond2.getAddress()); - - await erc721.__DiamondERC721Mock_init("Mock Token", "MT"); - await notReceiverMock.__DiamondERC721Mock_init("Mock Token", "MT"); - - await reverter.snapshot(); - }); - - afterEach(reverter.revert); - - describe("access", () => { - it("should initialize only once", async () => { - await expect(erc721.__DiamondERC721Mock_init("Mock Token", "MT")) - .to.be.revertedWithCustomError(erc721, "AlreadyInitialized") - .withArgs(); - }); - - it("should initialize only by top level contract", async () => { - await expect(erc721.__DiamondERC721Direct_init("Mock Token", "MT")) - .to.be.revertedWithCustomError(erc721, "NotInitializing") - .withArgs(); - }); - - it("should reinitialize contract correctly", async () => { - await erc721.enableInitializers(1); - - let tx = erc721.__DiamondERC721Mock_reinit("Mock Token 2", "MT2", 2); - await expect(tx) - .to.emit(erc721, "Initialized") - .withArgs(await erc721.DIAMOND_ERC721_STORAGE_SLOT(), 2); - expect(await erc721.getInitializedVersion()).to.be.equal(2); - - tx = erc721.__DiamondERC721Mock_reinit("Mock Token 4", "MT4", 4); - await expect(tx) - .to.emit(erc721, "Initialized") - .withArgs(await erc721.DIAMOND_ERC721_STORAGE_SLOT(), 4); - expect(await erc721.getInitializedVersion()).to.be.equal(4); - - await expect(erc721.__DiamondERC721Mock_reinit("Mock Token 3", "MT3", 3)) - .to.be.revertedWithCustomError(erc721, "InvalidInitialization") - .withArgs(); - - expect(await erc721.getInitializedVersion()).to.be.equal(4); - - await expect(erc721.__DiamondERC721Mock_reinit("Mock Token 4", "MT4", 4)) - .to.be.revertedWithCustomError(erc721, "InvalidInitialization") - .withArgs(); - }); - - it("should not allow to reinitialize within the initializer", async () => { - const DiamondERC721Mock = await ethers.getContractFactory("DiamondERC721Mock"); - const contract = await DiamondERC721Mock.deploy(); - - await contract.enableInitializers(0); - - await expect(contract.__DiamondERC721Mock_reinitInit("Mock Token", "MTT", 2)) - .to.be.revertedWithCustomError(erc721, "InvalidInitialization") - .withArgs(); - }); - - it("should disable implementation initialization", async () => { - const DiamondERC721Mock = await ethers.getContractFactory("DiamondERC721Mock"); - const contract = await DiamondERC721Mock.deploy(); - - const deploymentTx = contract.deploymentTransaction(); - - expect(deploymentTx) - .to.emit(contract, "Initialized") - .withArgs(await erc721.DIAMOND_ERC721_STORAGE_SLOT()); - - await contract.enableInitializers(1); - - let disableTx = contract.disableInitializers(); - await expect(disableTx) - .to.emit(contract, "Initialized") - .withArgs(await erc721.DIAMOND_ERC721_STORAGE_SLOT(), 2n ** 64n - 1n); - - await expect(contract.__DiamondERC721Mock_reinit("Mock Token", "MTT", 2)) - .to.be.revertedWithCustomError(erc721, "InvalidInitialization") - .withArgs(); - - disableTx = contract.disableInitializers(); - await expect(disableTx).to.not.emit(contract, "Initialized"); - }); - - it("should not allow to disable initialization within the initializer", async () => { - const DiamondERC721Mock = await ethers.getContractFactory("DiamondERC721Mock"); - const contract = await DiamondERC721Mock.deploy(); - - await contract.enableInitializers(0); - - await expect(contract.__DiamondERC721Mock_disableInit()) - .to.be.revertedWithCustomError(erc721, "InvalidInitialization") - .withArgs(); - }); - }); - - describe("getters", () => { - it("should return base data", async () => { - expect(await erc721.name()).to.equal("Mock Token"); - expect(await erc721.symbol()).to.equal("MT"); - - await erc721.mint(OWNER.address, 1); - - expect(await erc721.balanceOf(OWNER.address)).to.equal(1); - expect(await erc721.totalSupply()).to.equal(1); - - expect(await erc721.tokenOfOwnerByIndex(OWNER.address, 0)).to.equal(1); - expect(await erc721.tokenByIndex(0)).to.equal(1); - expect(await erc721.ownerOf(1)).to.equal(OWNER.address); - - await expect(erc721.tokenOfOwnerByIndex(OWNER.address, 10)) - .to.be.revertedWithCustomError(erc721, "OwnerIndexOutOfBounds") - .withArgs(OWNER.address, 10); - - await expect(erc721.tokenByIndex(10)).to.be.revertedWithCustomError(erc721, "IndexOutOfBounds").withArgs(10); - - expect(await erc721.tokenURI(1)).to.equal(""); - await erc721.setBaseURI("https://example.com/"); - expect(await erc721.tokenURI(1)).to.equal("https://example.com/1"); - - await expect(erc721.tokenURI(10)).to.be.revertedWithCustomError(erc721, "NonexistentToken").withArgs(10); - }); - - it("should support all necessary interfaces", async () => { - // IERC721 - expect(await erc721.supportsInterface("0x80ac58cd")).to.be.true; - // IERC721Metadata - expect(await erc721.supportsInterface("0x5b5e139f")).to.be.true; - // IERC721Enumerable - expect(await erc721.supportsInterface("0x780e9d63")).to.be.true; - // IERC165 - expect(await erc721.supportsInterface("0x01ffc9a7")).to.be.true; - }); - }); - - describe("DiamondERC721 functions", () => { - describe("mint", () => { - it("should mint tokens", async () => { - const tx = erc721.mint(OWNER.address, 1); - - await expect(tx).to.emit(erc721, "Transfer").withArgs(ethers.ZeroAddress, OWNER.address, 1); - - expect(await erc721.balanceOf(OWNER.address)).to.equal(1); - }); - - it("should not mint tokens to zero address", async () => { - await expect(erc721.mint(ethers.ZeroAddress, 1)).to.be.revertedWithCustomError(erc721, "ReceiverIsZeroAddress"); - }); - - it("should not mint tokens if it's alredy minted", async () => { - await erc721.mint(OWNER.address, 1); - await expect(erc721.mint(OWNER.address, 1)) - .to.be.revertedWithCustomError(erc721, "TokenAlreadyMinted") - .withArgs(1); - }); - - it("should not mint tokens if token is minted after `_update` hook", async () => { - await erc721.toggleReplaceOwner(); - - await expect(erc721.mint(OWNER.address, 1)) - .to.be.revertedWithCustomError(erc721, "TokenAlreadyMinted") - .withArgs(1); - }); - - it("should not mint token if the receiver is a contract and doesn't implement onERC721Received correctly", async () => { - const contract1 = await (await ethers.getContractFactory("DiamondERC721Mock")).deploy(); - - await expect(erc721.mint(await contract1.getAddress(), 1)) - .to.be.revertedWithCustomError(erc721, "NonERC721Receiver") - .withArgs(await contract1.getAddress()); - - await expect(notReceiverMock.mint(await contract1.getAddress(), 1)) - .to.be.revertedWithCustomError(notReceiverMock, "NonERC721Receiver") - .withArgs(await contract1.getAddress()); - - const contract2 = await (await ethers.getContractFactory("NonERC721Receiver")).deploy(); - - await expect(erc721.mint(await contract2.getAddress(), 1)).to.be.revertedWithCustomError( - contract2, - "RevertingOnERC721Received", - ); - }); - }); - - describe("burn", () => { - it("should burn tokens", async () => { - await erc721.mint(OWNER.address, 1); - - expect(await erc721.balanceOf(OWNER.address)).to.equal(1); - - const tx = erc721.burn(1); - - await expect(tx).to.emit(erc721, "Transfer").withArgs(OWNER.address, ethers.ZeroAddress, 1); - - expect(await erc721.balanceOf(OWNER.address)).to.equal(0); - }); - - it("should not burn a not minted token", async () => { - await expect(erc721.burn(1)).to.be.revertedWithCustomError(erc721, "NonexistentToken").withArgs(1); - }); - }); - - describe("update hook", () => { - it("update hook should only accept one token", async () => { - expect(await erc721.update(1)).not.to.be.reverted; - }); - - it("update hook should not accept more than one token", async () => { - await expect(erc721.update(2)).to.be.revertedWithCustomError(erc721, "ConsecutiveTransfersNotSupported"); - }); - }); - - describe("transfer/safeTransfer", () => { - it("should transfer tokens", async () => { - await erc721.mint(OWNER.address, 1); - - expect(await erc721.balanceOf(OWNER.address)).to.equal(1); - expect(await erc721.balanceOf(SECOND.address)).to.equal(0); - - const tx = erc721.transferFrom(OWNER.address, SECOND, 1); - - await expect(tx).to.emit(erc721, "Transfer").withArgs(OWNER.address, SECOND.address, 1); - - expect(await erc721.balanceOf(OWNER.address)).to.equal(0); - expect(await erc721.balanceOf(SECOND.address)).to.equal(1); - }); - - it("should safely transfer tokens", async () => { - await erc721.mint(OWNER.address, 1); - await erc721.mint(OWNER.address, 2); - - expect(await erc721.balanceOf(OWNER.address)).to.equal(2); - expect(await erc721.balanceOf(SECOND.address)).to.equal(0); - - const tx = erc721.safeTransferFromMock(OWNER.address, SECOND, 1); - - await expect(tx).to.emit(erc721, "Transfer").withArgs(OWNER.address, SECOND.address, 1); - - expect(await erc721.balanceOf(OWNER.address)).to.equal(1); - expect(await erc721.balanceOf(SECOND.address)).to.equal(1); - }); - - it("should safely transfer tokens to the contract if it implements onERC721Received correctly", async () => { - await erc721.mint(OWNER.address, 1); - - expect(await erc721.balanceOf(OWNER.address)).to.equal(1); - expect(await erc721.balanceOf(SECOND.address)).to.equal(0); - - const receiver = await (await ethers.getContractFactory("ERC721HolderMock")).deploy(); - const tx = erc721.safeTransferFromMock(OWNER.address, await receiver.getAddress(), 1); - - await expect(tx) - .to.emit(erc721, "Transfer") - .withArgs(OWNER.address, await receiver.getAddress(), 1); - - expect(await erc721.balanceOf(OWNER.address)).to.equal(0); - expect(await erc721.balanceOf(await receiver.getAddress())).to.equal(1); - }); - - it("should not transfer tokens when caller is not an owner or not approved", async () => { - await erc721.mint(OWNER.address, 1); - - await expect(erc721.connect(SECOND).transferFrom(OWNER.address, SECOND.address, 1)) - .to.be.revertedWithCustomError(erc721, "InvalidSpender") - .withArgs(SECOND.address, 1); - - await expect(erc721.connect(SECOND).safeTransferFromMock(OWNER.address, SECOND.address, 1)) - .to.be.revertedWithCustomError(erc721, "InvalidSpender") - .withArgs(SECOND.address, 1); - }); - - it("should not transfer tokens when call is not an owner", async () => { - await erc721.mint(OWNER.address, 1); - - await expect(erc721.transferFromMock(SECOND.address, OWNER.address, 1)) - .to.be.revertedWithCustomError(erc721, "UnauthorizedAccount") - .withArgs(SECOND.address); - }); - - it("should not transfer tokens to zero address", async () => { - await erc721.mint(OWNER.address, 1); - - await expect(erc721.transferFromMock(OWNER.address, ethers.ZeroAddress, 1)).to.be.revertedWithCustomError( - erc721, - "ReceiverIsZeroAddress", - ); - }); - - it("should not transfer tokens if owner is changed after `_update` hook", async () => { - await erc721.mint(OWNER.address, 1); - - await erc721.toggleReplaceOwner(); - - await expect(erc721.transferFromMock(OWNER.address, SECOND.address, 1)).to.be.revertedWithCustomError( - erc721, - "UnauthorizedAccount", - ); - }); - - it("should not transfer token if the receiver is a contract and doesn't implement onERC721Received", async () => { - await notReceiverMock.mockMint(OWNER.address, 1); - - const contract = await (await ethers.getContractFactory("DiamondERC721Mock")).deploy(); - - await expect(notReceiverMock.safeTransferFromMock(OWNER.address, await contract.getAddress(), 1)) - .to.be.revertedWithCustomError(notReceiverMock, "NonERC721Receiver") - .withArgs(await contract.getAddress()); - }); - - it("should not transfer incorrect token", async () => { - await expect(erc721.transferFromMock(OWNER.address, SECOND.address, 1)) - .to.be.revertedWithCustomError(erc721, "NonexistentToken") - .withArgs(1); - }); - }); - - describe("approve/approveAll", () => { - it("should approve tokens", async () => { - await erc721.mint(OWNER.address, 1); - - const tx = erc721.approve(SECOND.address, 1); - - await expect(tx).to.emit(erc721, "Approval").withArgs(OWNER.address, SECOND.address, 1); - - expect(await erc721.getApproved(1)).to.equal(SECOND.address); - expect(await erc721.connect(SECOND).transferFrom(OWNER.address, THIRD.address, 1)).not.to.be.reverted; - - await erc721.mint(OWNER.address, 2); - await erc721.mint(OWNER.address, 3); - await erc721.setApprovalForAll(SECOND.address, true); - - await erc721.connect(SECOND).approve(THIRD.address, 3); - - expect(await erc721.getApproved(3)).to.equal(THIRD.address); - expect(await erc721.connect(THIRD).transferFrom(OWNER.address, SECOND.address, 3)).not.to.be.reverted; - }); - - it("should not approve incorrect token", async () => { - await expect(erc721.approve(OWNER.address, 1)) - .to.be.revertedWithCustomError(erc721, "NonexistentToken") - .withArgs(1); - }); - - it("should not approve token if caller is not an owner", async () => { - await erc721.mint(OWNER.address, 1); - await expect(erc721.connect(SECOND).approve(THIRD.address, 1)) - .to.be.revertedWithCustomError(erc721, "InvalidApprover") - .withArgs(SECOND.address, OWNER.address); - }); - - it("should not approve token if spender and caller are the same", async () => { - await erc721.mint(OWNER.address, 1); - - await expect(erc721.approve(OWNER.address, 1)) - .to.be.revertedWithCustomError(erc721, "ApprovalToCurrentOwner") - .withArgs(OWNER.address, 1); - }); - - it("should approve all tokens", async () => { - await erc721.mint(OWNER.address, 1); - await erc721.mint(OWNER.address, 2); - await erc721.mint(OWNER.address, 3); - const tx = erc721.setApprovalForAll(SECOND.address, true); - - await expect(tx).to.emit(erc721, "ApprovalForAll").withArgs(OWNER.address, SECOND.address, true); - - expect(await erc721.isApprovedForAll(OWNER.address, SECOND.address)).to.be.true; - - expect(await erc721.connect(SECOND).transferFrom(OWNER.address, THIRD.address, 1)).not.to.be.reverted; - }); - - it("should not approve all tokens if owner the same as operator", async () => { - await erc721.mint(OWNER.address, 1); - await erc721.mint(OWNER.address, 2); - await erc721.mint(OWNER.address, 3); - - await expect(erc721.setApprovalForAll(OWNER.address, true)) - .to.be.revertedWithCustomError(erc721, "ApproveToCaller") - .withArgs(OWNER.address); - }); - }); - }); -}); diff --git a/test/diamond/InitializableStorage.test.ts b/test/diamond/InitializableStorage.test.ts new file mode 100644 index 00000000..6449eb39 --- /dev/null +++ b/test/diamond/InitializableStorage.test.ts @@ -0,0 +1,78 @@ +import { ethers } from "hardhat"; +import { expect } from "chai"; + +import { Reverter } from "@/test/helpers/reverter"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { InitializableStorageMock, InitializableStorageMock__factory } from "@/generated-types/ethers"; + +describe("InitializableStorage", () => { + const reverter = new Reverter(); + + let OWNER: SignerWithAddress; + let SECOND: SignerWithAddress; + + let Mock: InitializableStorageMock__factory; + let mock: InitializableStorageMock; + + before("setup", async () => { + [OWNER, SECOND] = await ethers.getSigners(); + + Mock = await ethers.getContractFactory("InitializableStorageMock"); + mock = await Mock.deploy(); + + await mock.__mockInitializer_init(); + + await reverter.snapshot(); + }); + + afterEach(reverter.revert); + + describe("init", () => { + it("should initialize only once", async () => { + await expect(mock.__mockInitializer_init()).to.be.revertedWithCustomError(mock, "AlreadyInitialized").withArgs(); + }); + + it("should not initialize", async () => { + await expect(mock.__mockOnlyInitializing_init()) + .to.be.revertedWithCustomError(mock, "NotInitializing") + .withArgs(); + }); + + it("should reinitialize", async () => { + const newVersion = 2; + + await expect(mock.__mock_reinitializer(newVersion)).to.not.be.reverted; + }); + + it("should not reinitialize", async () => { + const invalidVersion = 1; + + await expect(mock.__mock_reinitializer(invalidVersion)) + .to.be.revertedWithCustomError(mock, "InvalidInitialization") + .withArgs(); + + const newMock = await Mock.deploy(); + const validVersion = 2; + + await expect(newMock.invalidReinitializer(validVersion)) + .to.be.revertedWithCustomError(mock, "InvalidInitialization") + .withArgs(); + }); + + it("should disable initialization correctly", async () => { + const newMock = await Mock.deploy(); + + await expect(newMock.invalidDisableInitializers()) + .to.be.revertedWithCustomError(newMock, "InvalidInitialization") + .withArgs(); + + await newMock.disableInitializers(); + + await expect(newMock.__mockInitializer_init()) + .to.be.revertedWithCustomError(newMock, "AlreadyInitialized") + .withArgs(); + + await newMock.disableInitializers(); + }); + }); +}); diff --git a/test/finance/compound-rate-keeper/CompoundRateKeeper.test.ts b/test/finance/compound-rate-keeper/CompoundRateKeeper.test.ts index 347441af..d844b6d9 100644 --- a/test/finance/compound-rate-keeper/CompoundRateKeeper.test.ts +++ b/test/finance/compound-rate-keeper/CompoundRateKeeper.test.ts @@ -24,7 +24,7 @@ describe("CompoundRateKeeper", () => { const CompoundRateKeeperMock = await ethers.getContractFactory("CompoundRateKeeperMock"); keeper = await CompoundRateKeeperMock.deploy(); - await keeper.__OwnableCompoundRateKeeper_init(precision(1), 31536000); + await keeper.__CompoundRateKeeperMock_init(precision(1), 31536000); await reverter.snapshot(); }); @@ -34,20 +34,10 @@ describe("CompoundRateKeeper", () => { describe("access", () => { it("should not initialize twice", async () => { await expect(keeper.mockInit(precision(1), 31536000)).to.be.revertedWithCustomError(keeper, "NotInitializing"); - await expect(keeper.__OwnableCompoundRateKeeper_init(precision(1), 31536000)) + await expect(keeper.__CompoundRateKeeperMock_init(precision(1), 31536000)) .to.be.revertedWithCustomError(keeper, "InvalidInitialization") .withArgs(); }); - - it("only owner should call these functions", async () => { - await expect(keeper.connect(SECOND).setCapitalizationRate(precision(1))) - .to.be.revertedWithCustomError(keeper, "OwnableUnauthorizedAccount") - .withArgs(SECOND); - - await expect(keeper.connect(SECOND).setCapitalizationPeriod(31536000)) - .to.be.revertedWithCustomError(keeper, "OwnableUnauthorizedAccount") - .withArgs(SECOND); - }); }); describe("setCapitalizationRate()", () => { diff --git a/test/finance/vesting/Vesting.test.ts b/test/finance/vesting/Vesting.test.ts index c20d1315..27dd391a 100644 --- a/test/finance/vesting/Vesting.test.ts +++ b/test/finance/vesting/Vesting.test.ts @@ -71,7 +71,7 @@ describe("Vesting", () => { await expect(tx).to.emit(vesting, "ScheduleCreated").withArgs(1); - expect(await vesting.scheduleId()).to.equal(1); + expect(await vesting.getScheduleId()).to.equal(1); expect(await vesting.getSchedule(1)).to.deep.equal([Object.values(baseSchedule), LINEAR_EXPONENT]); }); @@ -83,7 +83,7 @@ describe("Vesting", () => { await expect(tx).to.emit(vesting, "ScheduleCreated").withArgs(1); - expect(await vesting.scheduleId()).to.equal(1); + expect(await vesting.getScheduleId()).to.equal(1); expect(await vesting.getSchedule(1)).to.deep.equal([Object.values(baseSchedule), exponent]); }); @@ -174,7 +174,7 @@ describe("Vesting", () => { .to.emit(vesting, "VestingCreated") .withArgs(2, exponentialVesting.beneficiary, exponentialVesting.vestingToken); - expect(await vesting.vestingId()).to.equal(2); + expect(await vesting.getVestingId()).to.equal(2); expect(await vesting.getVesting(1)).to.deep.equal(Object.values(linearVesting)); expect(await vesting.getVesting(2)).to.deep.equal(Object.values(exponentialVesting)); diff --git a/test/oracles/UniswapV2Oracle.test.ts b/test/oracles/UniswapV2Oracle.test.ts index 4442b498..fc7544bd 100644 --- a/test/oracles/UniswapV2Oracle.test.ts +++ b/test/oracles/UniswapV2Oracle.test.ts @@ -48,8 +48,8 @@ describe("UniswapV2Oracle", () => { describe("init", () => { it("should set oracle correctly", async () => { - expect(await oracle.uniswapV2Factory()).to.equal(await uniswapV2Factory.getAddress()); - expect(await oracle.timeWindow()).to.equal(ORACLE_TIME_WINDOW); + expect(await oracle.getUniswapV2Factory()).to.equal(await uniswapV2Factory.getAddress()); + expect(await oracle.getTimeWindow()).to.equal(ORACLE_TIME_WINDOW); }); it("should not initialize twice", async () => { @@ -67,7 +67,7 @@ describe("UniswapV2Oracle", () => { it("should set timewindow correctly", async () => { await oracle.setTimeWindow(20); - expect(await oracle.timeWindow()).to.equal(20); + expect(await oracle.getTimeWindow()).to.equal(20); }); it("shouldn't set 0 timewindow", async () => {