diff --git a/.eslintrc b/.eslintrc index 08315a2f..ad215f61 100644 --- a/.eslintrc +++ b/.eslintrc @@ -22,7 +22,8 @@ "assert": false, "web3": false, "usePlugin": false, - "extendEnvironment": false + "extendEnvironment": false, + "BigInt": true }, "ignorePatterns": [ "types/**/*", @@ -34,7 +35,7 @@ "strict": ["error", "global"], // Code style "array-bracket-spacing": ["off"], - "camelcase": ["error", {"properties": "always", "ignoreImports": true}], + "camelcase": ["error", {"properties": "always", "allow": [".*__factory"]}], "comma-dangle": ["error", "always-multiline"], "comma-spacing": ["error", {"before": false, "after": true}], "dot-notation": ["error", {"allowKeywords": true, "allowPattern": ""}], diff --git a/.github/workflows/contracts_size.yml b/.github/workflows/contracts_size.yml index eed3bd0d..86c25e94 100644 --- a/.github/workflows/contracts_size.yml +++ b/.github/workflows/contracts_size.yml @@ -13,7 +13,7 @@ jobs: fetch-depth: 2 - uses: actions/setup-node@v2 with: - node-version: 16.x + node-version: 20.x - uses: actions/cache@v3 id: cache with: @@ -36,7 +36,7 @@ jobs: fetch-depth: 2 - uses: actions/setup-node@v2 with: - node-version: 16.x + node-version: 20.x - uses: actions/cache@v3 id: cache with: @@ -51,4 +51,4 @@ jobs: - uses: unstoppabledomains/solidity-sizer@v0.1.0 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - command: yarn compile:size \ No newline at end of file + command: yarn compile:size diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d8690428..26753d11 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: 16.x + node-version: 20.x - uses: actions/cache@v3 id: cache with: @@ -32,7 +32,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: 16.x + node-version: 20.x - uses: actions/cache@v3 id: cache with: @@ -58,7 +58,7 @@ jobs: fetch-depth: 2 - uses: actions/setup-node@v2 with: - node-version: 16.x + node-version: 20.x - uses: actions/cache@v3 id: cache with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a3b3a3ea..f45a5dcc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,7 +34,7 @@ jobs: - uses: actions/setup-node@v2 if: steps.latesttag.outputs.tag != env.PACKAGE_VERSION with: - node-version: 16.x + node-version: 20.x - uses: actions/cache@v3 id: cache diff --git a/.github/workflows/slither.yml b/.github/workflows/slither.yml index aa126efe..0a8240b6 100644 --- a/.github/workflows/slither.yml +++ b/.github/workflows/slither.yml @@ -15,7 +15,7 @@ jobs: uses: actions/checkout@v3 - uses: actions/setup-node@v2 with: - node-version: 16.x + node-version: 20.x - uses: actions/cache@v3 id: cache with: @@ -30,7 +30,7 @@ jobs: continue-on-error: true id: slither with: - node-version: 16 + node-version: 20 slither-args: "--ignore-compile --hardhat-artifacts-directory ./.artifacts --config-file .slither.json" sarif: results.sarif diff --git a/.node-version b/.node-version new file mode 100644 index 00000000..8b0beab1 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +20.11.0 diff --git a/.prettierrc b/.prettierrc index 6d740784..c1de0fc9 100644 --- a/.prettierrc +++ b/.prettierrc @@ -6,8 +6,7 @@ "files": "*.sol", "options": { "printWidth": 140, - "singleQuote": true, - "explicitTypes": "always" + "singleQuote": true } }, { diff --git a/CHANGELOG.md b/CHANGELOG.md index a95289ec..2ea50b0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## v0.9.10 + +- Migrated to `ethers@6`, updated other dependencies + ## v0.9.9 - Add `.clay` TLD diff --git a/contracts/IAddressReader.sol b/contracts/IAddressReader.sol index 8d29106c..cc83d66b 100644 --- a/contracts/IAddressReader.sol +++ b/contracts/IAddressReader.sol @@ -10,11 +10,7 @@ interface IAddressReader { * @param token Token * @param tokenId The token id to fetch records from. */ - function getAddress( - string calldata network, - string calldata token, - uint256 tokenId - ) external view returns (string memory); + function getAddress(string calldata network, string calldata token, uint256 tokenId) external view returns (string memory); /** * @dev Function to get address record key by network and token key @@ -22,11 +18,7 @@ interface IAddressReader { * @param token Token * @param tokenId The token id to fetch records from. */ - function getAddressKey( - string calldata network, - string calldata token, - uint256 tokenId - ) external view returns (string memory); + function getAddressKey(string calldata network, string calldata token, uint256 tokenId) external view returns (string memory); /** * @dev Function to get the list of address record keys by network and token diff --git a/contracts/IDataReader.sol b/contracts/IDataReader.sol index 9d4c96ce..08452028 100644 --- a/contracts/IDataReader.sol +++ b/contracts/IDataReader.sol @@ -9,58 +9,40 @@ interface IDataReader { * @param keys Keys to query values. * @param tokenId The token id to fetch. */ - function getData(string[] calldata keys, uint256 tokenId) - external - view - returns ( - address resolver, - address owner, - string[] memory values - ); + function getData( + string[] calldata keys, + uint256 tokenId + ) external view returns (address resolver, address owner, string[] memory values); /** * @dev Function to get resolver address, owner address and requested records for array of tokens. * @param keys Keys to query values. * @param tokenIds Array of token ids to fetch. */ - function getDataForMany(string[] calldata keys, uint256[] calldata tokenIds) - external - view - returns ( - address[] memory resolvers, - address[] memory owners, - string[][] memory values - ); + function getDataForMany( + string[] calldata keys, + uint256[] calldata tokenIds + ) external view returns (address[] memory resolvers, address[] memory owners, string[][] memory values); /** * @dev Function to get resolver address, owner address and requested records. * @param keyHashes Key hashes to query values. * @param tokenId The token id to fetch. */ - function getDataByHash(uint256[] calldata keyHashes, uint256 tokenId) - external - view - returns ( - address resolver, - address owner, - string[] memory keys, - string[] memory values - ); + function getDataByHash( + uint256[] calldata keyHashes, + uint256 tokenId + ) external view returns (address resolver, address owner, string[] memory keys, string[] memory values); /** * @dev Function to get resolver address, owner address and requested records for array of tokens. * @param keyHashes Key hashes to query values. * @param tokenIds Array of token ids to fetch. */ - function getDataByHashForMany(uint256[] calldata keyHashes, uint256[] calldata tokenIds) - external - view - returns ( - address[] memory resolvers, - address[] memory owners, - string[][] memory keys, - string[][] memory values - ); + function getDataByHashForMany( + uint256[] calldata keyHashes, + uint256[] calldata tokenIds + ) external view returns (address[] memory resolvers, address[] memory owners, string[][] memory keys, string[][] memory values); /** * @param tokenIds Array of token ids to fetch. diff --git a/contracts/IMintingManager.sol b/contracts/IMintingManager.sol index 42543fe4..9f95c082 100644 --- a/contracts/IMintingManager.sol +++ b/contracts/IMintingManager.sol @@ -82,11 +82,7 @@ interface IMintingManager is IERC1967 { * @param tld id of parent token * @param label SLD label to mint */ - function claimTo( - address to, - uint256 tld, - string calldata label - ) external; + function claimTo(address to, uint256 tld, string calldata label) external; /** * @dev Claims free domain. The fuction adds prefix to label. @@ -94,13 +90,7 @@ interface IMintingManager is IERC1967 { * @param tld id of parent token * @param label SLD label to mint */ - function claimToWithRecords( - address to, - uint256 tld, - string calldata label, - string[] calldata keys, - string[] calldata values - ) external; + function claimToWithRecords(address to, uint256 tld, string calldata label, string[] calldata keys, string[] calldata values) external; /** * @dev Purchases a SLD using native token. diff --git a/contracts/IRecordReader.sol b/contracts/IRecordReader.sol index 751781ff..c5a2b2b0 100644 --- a/contracts/IRecordReader.sol +++ b/contracts/IRecordReader.sol @@ -32,8 +32,8 @@ interface IRecordReader { * @param keyHashes The key to query the value of. * @param tokenId The token id to set. */ - function getManyByHash(uint256[] calldata keyHashes, uint256 tokenId) - external - view - returns (string[] memory keys, string[] memory values); + function getManyByHash( + uint256[] calldata keyHashes, + uint256 tokenId + ) external view returns (string[] memory keys, string[] memory values); } diff --git a/contracts/IRecordStorage.sol b/contracts/IRecordStorage.sol index c6ba6db0..cf937dce 100644 --- a/contracts/IRecordStorage.sol +++ b/contracts/IRecordStorage.sol @@ -18,11 +18,7 @@ interface IRecordStorage is IRecordReader { * @param value The value to set key to * @param tokenId ERC-721 token id to set */ - function set( - string calldata key, - string calldata value, - uint256 tokenId - ) external; + function set(string calldata key, string calldata value, uint256 tokenId) external; /** * @dev Set records by keys @@ -30,11 +26,7 @@ interface IRecordStorage is IRecordReader { * @param values Records values * @param tokenId ERC-721 token id of the domain */ - function setMany( - string[] memory keys, - string[] memory values, - uint256 tokenId - ) external; + function setMany(string[] memory keys, string[] memory values, uint256 tokenId) external; /** * @dev Set record by key hash @@ -42,11 +34,7 @@ interface IRecordStorage is IRecordReader { * @param value The value to set key to * @param tokenId ERC-721 token id to set */ - function setByHash( - uint256 keyHash, - string calldata value, - uint256 tokenId - ) external; + function setByHash(uint256 keyHash, string calldata value, uint256 tokenId) external; /** * @dev Set records by key hashes @@ -54,11 +42,7 @@ interface IRecordStorage is IRecordReader { * @param values Records values * @param tokenId ERC-721 token id of the domain */ - function setManyByHash( - uint256[] calldata keyHashes, - string[] calldata values, - uint256 tokenId - ) external; + function setManyByHash(uint256[] calldata keyHashes, string[] calldata values, uint256 tokenId) external; /** * @dev Reset all domain records and set new ones @@ -66,11 +50,7 @@ interface IRecordStorage is IRecordReader { * @param values New record values * @param tokenId ERC-721 token id of the domain */ - function reconfigure( - string[] memory keys, - string[] memory values, - uint256 tokenId - ) external; + function reconfigure(string[] memory keys, string[] memory values, uint256 tokenId) external; /** * @dev Function to reset all existing records on a domain. diff --git a/contracts/IRootRegistry.sol b/contracts/IRootRegistry.sol index 2e1cfc12..103dcf3b 100644 --- a/contracts/IRootRegistry.sol +++ b/contracts/IRootRegistry.sol @@ -19,10 +19,5 @@ interface IRootRegistry is IMintableERC721 { * @param keys New record keys * @param values New record values */ - function withdrawFromPolygon( - bytes calldata inputData, - uint256 tokenId, - string[] calldata keys, - string[] calldata values - ) external; + function withdrawFromPolygon(bytes calldata inputData, uint256 tokenId, string[] calldata keys, string[] calldata values) external; } diff --git a/contracts/MintingManager.sol b/contracts/MintingManager.sol index 8270ec7c..d0408f79 100644 --- a/contracts/MintingManager.sol +++ b/contracts/MintingManager.sol @@ -193,11 +193,7 @@ contract MintingManager is ERC2771Context, MinterRole, Blocklist, Pausable, IMin _issueWithRecords(_msgSender(), _buildLabels(tld, _freeSLDLabel(label)), empty, empty, 0, true); } - function claimTo( - address to, - uint256 tld, - string calldata label - ) external override onlyAllowedSLD(tld, label) whenNotPaused { + function claimTo(address to, uint256 tld, string calldata label) external override onlyAllowedSLD(tld, label) whenNotPaused { string[] memory empty; _issueWithRecords(to, _buildLabels(tld, _freeSLDLabel(label)), empty, empty, 0, true); } @@ -381,11 +377,7 @@ contract MintingManager is ERC2771Context, MinterRole, Blocklist, Pausable, IMin _block(tokenId); } - function _ensureAllowed( - uint256 tld, - string memory label, - uint64 expiry - ) private view { + function _ensureAllowed(uint256 tld, string memory label, uint64 expiry) private view { require(_isTld(tld), 'MintingManager: TLD_NOT_REGISTERED'); require(_expirableTlds[tld] == (expiry > 0), 'MintingManager: TLD_EXPIRABLE_MISMATCH'); diff --git a/contracts/ProxyReader.sol b/contracts/ProxyReader.sol index f88c2d6e..b324d53f 100644 --- a/contracts/ProxyReader.sol +++ b/contracts/ProxyReader.sol @@ -148,12 +148,10 @@ contract ProxyReader is ERC165Upgradeable, MulticallUpgradeable, Ownable, IRegis } } - function getManyByHash(uint256[] calldata keyHashes, uint256 tokenId) - external - view - override - returns (string[] memory keys, string[] memory values) - { + function getManyByHash( + uint256[] calldata keyHashes, + uint256 tokenId + ) external view override returns (string[] memory keys, string[] memory values) { keys = new string[](keyHashes.length); values = new string[](keyHashes.length); if (_useUns(tokenId)) { @@ -168,29 +166,17 @@ contract ProxyReader is ERC165Upgradeable, MulticallUpgradeable, Ownable, IRegis } } - function getData(string[] calldata keys, uint256 tokenId) - external - view - override - returns ( - address resolver, - address owner, - string[] memory values - ) - { + function getData( + string[] calldata keys, + uint256 tokenId + ) external view override returns (address resolver, address owner, string[] memory values) { return _getData(keys, tokenId); } - function getDataForMany(string[] calldata keys, uint256[] calldata tokenIds) - external - view - override - returns ( - address[] memory resolvers, - address[] memory owners, - string[][] memory values - ) - { + function getDataForMany( + string[] calldata keys, + uint256[] calldata tokenIds + ) external view override returns (address[] memory resolvers, address[] memory owners, string[][] memory values) { resolvers = new address[](tokenIds.length); owners = new address[](tokenIds.length); values = new string[][](tokenIds.length); @@ -200,30 +186,21 @@ contract ProxyReader is ERC165Upgradeable, MulticallUpgradeable, Ownable, IRegis } } - function getDataByHash(uint256[] calldata keyHashes, uint256 tokenId) - external - view - override - returns ( - address resolver, - address owner, - string[] memory keys, - string[] memory values - ) - { + function getDataByHash( + uint256[] calldata keyHashes, + uint256 tokenId + ) external view override returns (address resolver, address owner, string[] memory keys, string[] memory values) { return _getDataByHash(keyHashes, tokenId); } - function getDataByHashForMany(uint256[] calldata keyHashes, uint256[] calldata tokenIds) + function getDataByHashForMany( + uint256[] calldata keyHashes, + uint256[] calldata tokenIds + ) external view override - returns ( - address[] memory resolvers, - address[] memory owners, - string[][] memory keys, - string[][] memory values - ) + returns (address[] memory resolvers, address[] memory owners, string[][] memory keys, string[][] memory values) { resolvers = new address[](tokenIds.length); owners = new address[](tokenIds.length); @@ -350,15 +327,10 @@ contract ProxyReader is ERC165Upgradeable, MulticallUpgradeable, Ownable, IRegis } } - function _getData(string[] calldata keys, uint256 tokenId) - private - view - returns ( - address resolver, - address owner, - string[] memory values - ) - { + function _getData( + string[] calldata keys, + uint256 tokenId + ) private view returns (address resolver, address owner, string[] memory values) { values = new string[](keys.length); if (_useUns(tokenId)) { resolver = _unsRegistry.resolverOf(tokenId); @@ -375,16 +347,10 @@ contract ProxyReader is ERC165Upgradeable, MulticallUpgradeable, Ownable, IRegis } } - function _getDataByHash(uint256[] calldata keyHashes, uint256 tokenId) - private - view - returns ( - address resolver, - address owner, - string[] memory keys, - string[] memory values - ) - { + function _getDataByHash( + uint256[] calldata keyHashes, + uint256 tokenId + ) private view returns (address resolver, address owner, string[] memory keys, string[] memory values) { keys = new string[](keyHashes.length); values = new string[](keyHashes.length); if (_useUns(tokenId)) { diff --git a/contracts/RecordStorage.sol b/contracts/RecordStorage.sol index 95fb95eb..ec27b7b0 100644 --- a/contracts/RecordStorage.sol +++ b/contracts/RecordStorage.sol @@ -28,12 +28,10 @@ abstract contract RecordStorage is KeyStorage, IRecordStorage { (key, value) = _getByHash(keyHash, tokenId); } - function getManyByHash(uint256[] calldata keyHashes, uint256 tokenId) - external - view - override - returns (string[] memory keys, string[] memory values) - { + function getManyByHash( + uint256[] calldata keyHashes, + uint256 tokenId + ) external view override returns (string[] memory keys, string[] memory values) { keys = new string[](keyHashes.length); values = new string[](keyHashes.length); for (uint256 i = 0; i < keyHashes.length; i++) { @@ -45,50 +43,30 @@ abstract contract RecordStorage is KeyStorage, IRecordStorage { return _tokenPresets[tokenId] == 0 ? tokenId : _tokenPresets[tokenId]; } - function _set( - string calldata key, - string calldata value, - uint256 tokenId - ) internal { + function _set(string calldata key, string calldata value, uint256 tokenId) internal { uint256 keyHash = uint256(keccak256(abi.encodePacked(key))); _addKey(keyHash, key); _set(keyHash, key, value, tokenId); } - function _setMany( - string[] calldata keys, - string[] calldata values, - uint256 tokenId - ) internal { + function _setMany(string[] calldata keys, string[] calldata values, uint256 tokenId) internal { for (uint256 i = 0; i < keys.length; i++) { _set(keys[i], values[i], tokenId); } } - function _setByHash( - uint256 keyHash, - string calldata value, - uint256 tokenId - ) internal { + function _setByHash(uint256 keyHash, string calldata value, uint256 tokenId) internal { require(_existsKey(keyHash), 'RecordStorage: KEY_NOT_FOUND'); _set(keyHash, getKey(keyHash), value, tokenId); } - function _setManyByHash( - uint256[] calldata keyHashes, - string[] calldata values, - uint256 tokenId - ) internal { + function _setManyByHash(uint256[] calldata keyHashes, string[] calldata values, uint256 tokenId) internal { for (uint256 i = 0; i < keyHashes.length; i++) { _setByHash(keyHashes[i], values[i], tokenId); } } - function _reconfigure( - string[] calldata keys, - string[] calldata values, - uint256 tokenId - ) internal { + function _reconfigure(string[] calldata keys, string[] calldata values, uint256 tokenId) internal { _reset(tokenId); _setMany(keys, values, tokenId); } @@ -115,12 +93,7 @@ abstract contract RecordStorage is KeyStorage, IRecordStorage { return _records[_presetOf(tokenId)][keyHash]; } - function _set( - uint256 keyHash, - string memory key, - string memory value, - uint256 tokenId - ) private { + function _set(uint256 keyHash, string memory key, string memory value, uint256 tokenId) private { if (bytes(_records[_presetOf(tokenId)][keyHash]).length == 0) { emit NewKey(tokenId, key, key); } diff --git a/contracts/UNSRegistry.sol b/contracts/UNSRegistry.sol index e05daf71..4d7ad2a1 100644 --- a/contracts/UNSRegistry.sol +++ b/contracts/UNSRegistry.sol @@ -208,12 +208,7 @@ contract UNSRegistry is // This is the keccak-256 hash of "uns.cns_registry" subtracted by 1 bytes32 internal constant _CNS_REGISTRY_SLOT = 0x8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378; - function onERC721Received( - address, - address from, - uint256 tokenId, - bytes calldata data - ) external override returns (bytes4) { + function onERC721Received(address, address from, uint256 tokenId, bytes calldata data) external override returns (bytes4) { if (_msgSender() == StorageSlotUpgradeable.getAddressSlot(_CNS_REGISTRY_SLOT).value) { ICNSRegistry(_msgSender()).burn(tokenId); if (data.length > 0 && abi.decode(data, (bool))) { @@ -323,11 +318,7 @@ contract UNSRegistry is /** * @dev See {RootRegistry-mint(address,uint256,bytes)}. */ - function mint( - address user, - uint256 tokenId, - bytes calldata - ) external override onlyPredicate { + function mint(address user, uint256 tokenId, bytes calldata) external override onlyPredicate { _mint(user, tokenId); } @@ -415,12 +406,7 @@ contract UNSRegistry is return uint256(keccak256(abi.encodePacked(tokenId, keccak256(abi.encodePacked(label))))); } - function _mint( - address to, - uint256 tokenId, - string memory uri, - bool withReverse - ) internal { + function _mint(address to, uint256 tokenId, string memory uri, bool withReverse) internal { _mint(to, tokenId); emit NewURI(tokenId, uri); @@ -442,11 +428,7 @@ contract UNSRegistry is return super._msgData(); } - function _beforeTokenTransfer( - address from, - address to, - uint256 tokenId - ) internal override { + function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override { super._beforeTokenTransfer(from, to, tokenId); if (to == address(0)) { @@ -463,11 +445,7 @@ contract UNSRegistry is } } - function _setReverse( - address addr, - uint256 tokenId, - string memory uri - ) internal { + function _setReverse(address addr, uint256 tokenId, string memory uri) internal { if (bytes(_tokenNames[tokenId]).length == 0) { _tokenNames[tokenId] = uri; } @@ -475,11 +453,7 @@ contract UNSRegistry is emit SetReverse(addr, tokenId); } - function _safeSetReverse( - address addr, - uint256 tokenId, - string memory uri - ) internal { + function _safeSetReverse(address addr, uint256 tokenId, string memory uri) internal { if (address(0xdead) != addr && _reverses[addr] == 0) { _setReverse(addr, tokenId, uri); } diff --git a/contracts/cns/IMintingController.sol b/contracts/cns/IMintingController.sol index 0e92863f..8adaa884 100644 --- a/contracts/cns/IMintingController.sol +++ b/contracts/cns/IMintingController.sol @@ -8,28 +8,11 @@ interface IMintingController { function safeMintSLD(address to, string calldata label) external; - function safeMintSLD( - address to, - string calldata label, - bytes calldata data - ) external; + function safeMintSLD(address to, string calldata label, bytes calldata data) external; - function mintSLDWithResolver( - address to, - string memory label, - address resolver - ) external; + function mintSLDWithResolver(address to, string memory label, address resolver) external; - function safeMintSLDWithResolver( - address to, - string calldata label, - address resolver - ) external; + function safeMintSLDWithResolver(address to, string calldata label, address resolver) external; - function safeMintSLDWithResolver( - address to, - string calldata label, - address resolver, - bytes calldata data - ) external; + function safeMintSLDWithResolver(address to, string calldata label, address resolver, bytes calldata data) external; } diff --git a/contracts/cns/IResolver.sol b/contracts/cns/IResolver.sol index 019dd402..9ddcdaa6 100644 --- a/contracts/cns/IResolver.sol +++ b/contracts/cns/IResolver.sol @@ -4,11 +4,7 @@ pragma solidity ^0.8.0; interface IResolver { - function preconfigure( - string[] memory keys, - string[] memory values, - uint256 tokenId - ) external; + function preconfigure(string[] memory keys, string[] memory values, uint256 tokenId) external; function get(string calldata key, uint256 tokenId) external view returns (string memory); @@ -16,14 +12,10 @@ interface IResolver { function getByHash(uint256 keyHash, uint256 tokenId) external view returns (string memory key, string memory value); - function getManyByHash(uint256[] calldata keyHashes, uint256 tokenId) - external - view - returns (string[] memory keys, string[] memory values); - - function set( - string calldata key, - string calldata value, + function getManyByHash( + uint256[] calldata keyHashes, uint256 tokenId - ) external; + ) external view returns (string[] memory keys, string[] memory values); + + function set(string calldata key, string calldata value, uint256 tokenId) external; } diff --git a/contracts/custody/ENSCustody.sol b/contracts/custody/ENSCustody.sol index f1ac2b3d..fc0ea2ec 100644 --- a/contracts/custody/ENSCustody.sol +++ b/contracts/custody/ENSCustody.sol @@ -61,11 +61,7 @@ contract ENSCustody is _disableInitializers(); } - function initialize( - address controller, - address wrapper, - address registrar - ) public initializer { + function initialize(address controller, address wrapper, address registrar) public initializer { StorageSlotUpgradeable.getAddressSlot(_ENS_CONTROLLER_SLOT).value = controller; StorageSlotUpgradeable.getAddressSlot(_ENS_WRAPPER_SLOT).value = wrapper; StorageSlotUpgradeable.getAddressSlot(_ENS_BASE_REGISTRAR_SLOT).value = registrar; @@ -81,25 +77,16 @@ contract ENSCustody is StorageSlotUpgradeable.getAddressSlot(_ENS_BASE_REGISTRAR_SLOT).value = baseRegistrar; } - function supportsInterface(bytes4 interfaceId) - public - view - virtual - override(AccessControlUpgradeable, IERC165Upgradeable) - returns (bool) - { + function supportsInterface( + bytes4 interfaceId + ) public view virtual override(AccessControlUpgradeable, IERC165Upgradeable) returns (bool) { return interfaceId == type(IERC721ReceiverUpgradeable).interfaceId || interfaceId == type(IERC1155ReceiverUpgradeable).interfaceId || super.supportsInterface(interfaceId); } - function onERC721Received( - address, - address, - uint256 tokenId, - bytes calldata data - ) external returns (bytes4) { + function onERC721Received(address, address, uint256 tokenId, bytes calldata data) external returns (bytes4) { address registrar = StorageSlotUpgradeable.getAddressSlot(_ENS_BASE_REGISTRAR_SLOT).value; if (_msgSender() == registrar) { diff --git a/contracts/custody/ZilliqaRecover.sol b/contracts/custody/ZilliqaRecover.sol index 90435703..9878c71b 100644 --- a/contracts/custody/ZilliqaRecover.sol +++ b/contracts/custody/ZilliqaRecover.sol @@ -178,12 +178,7 @@ contract ZilliqaRecover is ContextUpgradeable, ERC2771RegistryContext, Forwarder return address(uint160(uint256(hash))); } - function onERC721Received( - address, - address, - uint256 tokenId, - bytes calldata - ) external view returns (bytes4) { + function onERC721Received(address, address, uint256 tokenId, bytes calldata) external view returns (bytes4) { if (_msgSender() != address(registry) || znsOwnerOf(tokenId) == address(0x00)) { revert UnknownTokenReceived(tokenId, _msgSender()); } @@ -203,11 +198,7 @@ contract ZilliqaRecover is ContextUpgradeable, ERC2771RegistryContext, Forwarder return super._msgData(); } - function _claim( - uint256 tokenId, - address _zilAddress, - address newOwnerAddress - ) private { + function _claim(uint256 tokenId, address _zilAddress, address newOwnerAddress) private { if (znsOwnerOf(tokenId) != _zilAddress) { revert TokenOwnedByOtherZilAddress(tokenId, znsOwnerOf(tokenId), _zilAddress); } diff --git a/contracts/history/ProxyReaderV04.sol b/contracts/history/ProxyReaderV04.sol index 5171d918..dd3476ac 100644 --- a/contracts/history/ProxyReaderV04.sol +++ b/contracts/history/ProxyReaderV04.sol @@ -130,12 +130,10 @@ contract ProxyReaderV04 is ERC165Upgradeable, MulticallUpgradeable, IRegistryRea } } - function getManyByHash(uint256[] calldata keyHashes, uint256 tokenId) - external - view - override - returns (string[] memory keys, string[] memory values) - { + function getManyByHash( + uint256[] calldata keyHashes, + uint256 tokenId + ) external view override returns (string[] memory keys, string[] memory values) { keys = new string[](keyHashes.length); values = new string[](keyHashes.length); if (_useUns(tokenId)) { @@ -150,29 +148,17 @@ contract ProxyReaderV04 is ERC165Upgradeable, MulticallUpgradeable, IRegistryRea } } - function getData(string[] calldata keys, uint256 tokenId) - external - view - override - returns ( - address resolver, - address owner, - string[] memory values - ) - { + function getData( + string[] calldata keys, + uint256 tokenId + ) external view override returns (address resolver, address owner, string[] memory values) { return _getData(keys, tokenId); } - function getDataForMany(string[] calldata keys, uint256[] calldata tokenIds) - external - view - override - returns ( - address[] memory resolvers, - address[] memory owners, - string[][] memory values - ) - { + function getDataForMany( + string[] calldata keys, + uint256[] calldata tokenIds + ) external view override returns (address[] memory resolvers, address[] memory owners, string[][] memory values) { resolvers = new address[](tokenIds.length); owners = new address[](tokenIds.length); values = new string[][](tokenIds.length); @@ -182,30 +168,21 @@ contract ProxyReaderV04 is ERC165Upgradeable, MulticallUpgradeable, IRegistryRea } } - function getDataByHash(uint256[] calldata keyHashes, uint256 tokenId) - external - view - override - returns ( - address resolver, - address owner, - string[] memory keys, - string[] memory values - ) - { + function getDataByHash( + uint256[] calldata keyHashes, + uint256 tokenId + ) external view override returns (address resolver, address owner, string[] memory keys, string[] memory values) { return _getDataByHash(keyHashes, tokenId); } - function getDataByHashForMany(uint256[] calldata keyHashes, uint256[] calldata tokenIds) + function getDataByHashForMany( + uint256[] calldata keyHashes, + uint256[] calldata tokenIds + ) external view override - returns ( - address[] memory resolvers, - address[] memory owners, - string[][] memory keys, - string[][] memory values - ) + returns (address[] memory resolvers, address[] memory owners, string[][] memory keys, string[][] memory values) { resolvers = new address[](tokenIds.length); owners = new address[](tokenIds.length); @@ -254,15 +231,10 @@ contract ProxyReaderV04 is ERC165Upgradeable, MulticallUpgradeable, IRegistryRea } } - function _getData(string[] calldata keys, uint256 tokenId) - private - view - returns ( - address resolver, - address owner, - string[] memory values - ) - { + function _getData( + string[] calldata keys, + uint256 tokenId + ) private view returns (address resolver, address owner, string[] memory values) { values = new string[](keys.length); if (_useUns(tokenId)) { resolver = _unsRegistry.resolverOf(tokenId); @@ -279,16 +251,10 @@ contract ProxyReaderV04 is ERC165Upgradeable, MulticallUpgradeable, IRegistryRea } } - function _getDataByHash(uint256[] calldata keyHashes, uint256 tokenId) - private - view - returns ( - address resolver, - address owner, - string[] memory keys, - string[] memory values - ) - { + function _getDataByHash( + uint256[] calldata keyHashes, + uint256 tokenId + ) private view returns (address resolver, address owner, string[] memory keys, string[] memory values) { keys = new string[](keyHashes.length); values = new string[](keyHashes.length); if (_useUns(tokenId)) { diff --git a/contracts/history/UNSRegistryV07.sol b/contracts/history/UNSRegistryV07.sol index d2750007..820afe01 100644 --- a/contracts/history/UNSRegistryV07.sol +++ b/contracts/history/UNSRegistryV07.sol @@ -176,12 +176,7 @@ contract UNSRegistryV07 is // This is the keccak-256 hash of "uns.cns_registry" subtracted by 1 bytes32 internal constant _CNS_REGISTRY_SLOT = 0x8ffb960699dc2ba88f34d0e41c029c3c36c95149679fe1d0153a9582bec92378; - function onERC721Received( - address, - address from, - uint256 tokenId, - bytes calldata data - ) external override returns (bytes4) { + function onERC721Received(address, address from, uint256 tokenId, bytes calldata data) external override returns (bytes4) { if (_msgSender() == StorageSlotUpgradeable.getAddressSlot(_CNS_REGISTRY_SLOT).value) { ICNSRegistry(_msgSender()).burn(tokenId); if (data.length > 0 && abi.decode(data, (bool))) { @@ -291,11 +286,7 @@ contract UNSRegistryV07 is /** * @dev See {RootRegistry-mint(address,uint256,bytes)}. */ - function mint( - address user, - uint256 tokenId, - bytes calldata - ) external override onlyPredicate { + function mint(address user, uint256 tokenId, bytes calldata) external override onlyPredicate { _mint(user, tokenId); } @@ -374,12 +365,7 @@ contract UNSRegistryV07 is return uint256(keccak256(abi.encodePacked(tokenId, keccak256(abi.encodePacked(label))))); } - function _mint( - address to, - uint256 tokenId, - string memory uri, - bool withReverse - ) internal { + function _mint(address to, uint256 tokenId, string memory uri, bool withReverse) internal { _mint(to, tokenId); emit NewURI(tokenId, uri); @@ -401,11 +387,7 @@ contract UNSRegistryV07 is return super._msgData(); } - function _beforeTokenTransfer( - address from, - address to, - uint256 tokenId - ) internal override { + function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override { super._beforeTokenTransfer(from, to, tokenId); // This prevents the upgraded token from being burned or withdrawn from L2 @@ -416,11 +398,7 @@ contract UNSRegistryV07 is } } - function _setReverse( - address addr, - uint256 tokenId, - string memory uri - ) internal { + function _setReverse(address addr, uint256 tokenId, string memory uri) internal { if (bytes(_tokenNames[tokenId]).length == 0) { _tokenNames[tokenId] = uri; } @@ -428,11 +406,7 @@ contract UNSRegistryV07 is emit SetReverse(addr, tokenId); } - function _safeSetReverse( - address addr, - uint256 tokenId, - string memory uri - ) internal { + function _safeSetReverse(address addr, uint256 tokenId, string memory uri) internal { if (address(0xdead) != addr && _reverses[addr] == 0) { _setReverse(addr, tokenId, uri); } diff --git a/contracts/metatx/BaseForwarder.sol b/contracts/metatx/BaseForwarder.sol index 5c49e210..3f6c9eef 100644 --- a/contracts/metatx/BaseForwarder.sol +++ b/contracts/metatx/BaseForwarder.sol @@ -12,11 +12,7 @@ abstract contract BaseForwarder is IForwarder { using ECDSAUpgradeable for bytes32; using SignatureCheckerUpgradeable for address; - function _verify( - ForwardRequest memory req, - address target, - bytes memory signature - ) internal view virtual returns (bool) { + function _verify(ForwardRequest memory req, address target, bytes memory signature) internal view virtual returns (bool) { uint256 nonce = this.nonceOf(req.tokenId); bytes32 hash = keccak256(abi.encodePacked(keccak256(req.data), target, req.nonce)).toEthSignedMessageHash(); @@ -41,9 +37,7 @@ abstract contract BaseForwarder is IForwarder { return _verifyCallResult(success, returndata, 'BaseForwarder: CALL_FAILED'); } - function _invalidateNonce( - uint256 /* tokenId */ - ) internal virtual {} + function _invalidateNonce(uint256 /* tokenId */) internal virtual {} function _buildData( address from, @@ -54,11 +48,7 @@ abstract contract BaseForwarder is IForwarder { return abi.encodePacked(data, from, tokenId); } - function _verifyCallResult( - bool success, - bytes memory returndata, - string memory errorMessage - ) private pure returns (bytes memory) { + function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns (bytes memory) { if (success) { return returndata; } else { diff --git a/contracts/metatx/BaseRoutingForwarder.sol b/contracts/metatx/BaseRoutingForwarder.sol index 111ff4df..ff4103fb 100644 --- a/contracts/metatx/BaseRoutingForwarder.sol +++ b/contracts/metatx/BaseRoutingForwarder.sol @@ -15,23 +15,15 @@ import './BaseForwarder.sol'; abstract contract BaseRoutingForwarder is BaseForwarder { mapping(bytes4 => bytes4) private _routes; - function _buildRouteData( - bytes4 selector, - bytes memory data, - bytes memory signature - ) internal view virtual returns (bytes memory); + function _buildRouteData(bytes4 selector, bytes memory data, bytes memory signature) internal view virtual returns (bytes memory); - function _verify( - ForwardRequest memory req, - address target, - bytes memory signature - ) internal view override returns (bool) { + function _verify(ForwardRequest memory req, address target, bytes memory signature) internal view override returns (bool) { return super._verify(req, target, signature) && _isKnownRoute(req.data); } function _buildData( - address, /* from */ - uint256, /* tokenId */ + address /* from */, + uint256 /* tokenId */, bytes memory data, bytes memory signature ) internal view override returns (bytes memory) { diff --git a/contracts/mocks/BaseRoutingForwarderMock.sol b/contracts/mocks/BaseRoutingForwarderMock.sol index 6712ae23..258ebed3 100644 --- a/contracts/mocks/BaseRoutingForwarderMock.sol +++ b/contracts/mocks/BaseRoutingForwarderMock.sol @@ -54,11 +54,7 @@ contract BaseRoutingForwarderMock is BaseRoutingForwarder { revert('mockFor'); } - function _buildRouteData( - bytes4 selector, - bytes memory data, - bytes memory signature - ) internal pure override returns (bytes memory) { + function _buildRouteData(bytes4 selector, bytes memory data, bytes memory signature) internal pure override returns (bytes memory) { if (selector == bytes4(keccak256('transferFromFor(address,address,uint256,bytes)'))) { (address p1, address p2, uint256 p3) = abi.decode(data, (address, address, uint256)); return abi.encodeWithSelector(selector, p1, p2, p3, signature); diff --git a/contracts/mocks/ERC1271Mock.sol b/contracts/mocks/ERC1271Mock.sol index 2dac4a74..3cf14631 100644 --- a/contracts/mocks/ERC1271Mock.sol +++ b/contracts/mocks/ERC1271Mock.sol @@ -4,6 +4,4 @@ pragma solidity ^0.8.0; // solhint-disable-next-line no-empty-blocks -contract ERC1271Mock { - -} +contract ERC1271Mock {} diff --git a/contracts/mocks/ERC20UnsafeMock.sol b/contracts/mocks/ERC20UnsafeMock.sol index 5354094d..71922946 100644 --- a/contracts/mocks/ERC20UnsafeMock.sol +++ b/contracts/mocks/ERC20UnsafeMock.sol @@ -11,11 +11,7 @@ contract ERC20UnsafeMock is ERC20Mock { return false; } - function transferFrom( - address from, - address to, - uint256 value - ) public virtual override returns (bool) { + function transferFrom(address from, address to, uint256 value) public virtual override returns (bool) { super.transferFrom(from, to, value); return false; } diff --git a/contracts/mocks/ERC721ReceiverMock.sol b/contracts/mocks/ERC721ReceiverMock.sol index 0f19b47f..1d1866d8 100644 --- a/contracts/mocks/ERC721ReceiverMock.sol +++ b/contracts/mocks/ERC721ReceiverMock.sol @@ -4,12 +4,7 @@ pragma solidity ^0.8.0; contract ERC721ReceiverMock { - function onERC721Received( - address, - address, - uint256, - bytes memory - ) public pure returns (bytes4) { + function onERC721Received(address, address, uint256, bytes memory) public pure returns (bytes4) { return 0x150b7a02; } } diff --git a/contracts/utils/Strings.sol b/contracts/utils/Strings.sol index ad0772f0..1f1cc27e 100644 --- a/contracts/utils/Strings.sol +++ b/contracts/utils/Strings.sol @@ -42,11 +42,7 @@ library Strings { * @param len The sub slice length. * @return The slice of the original slice. */ - function slice( - Slice memory self, - uint256 index, - uint256 len - ) internal pure returns (Slice memory) { + function slice(Slice memory self, uint256 index, uint256 len) internal pure returns (Slice memory) { return Slice(len, self._ptr + index); } } diff --git a/hardhat.config.ts b/hardhat.config.ts index fb5f7bd9..90612bee 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -34,14 +34,14 @@ declare module 'hardhat/types/config' { } import '@typechain/hardhat'; -import '@nomiclabs/hardhat-ethers'; -import '@nomiclabs/hardhat-waffle'; +import '@nomicfoundation/hardhat-ethers'; +import '@nomicfoundation/hardhat-verify'; +import '@nomicfoundation/hardhat-chai-matchers'; + import '@nomiclabs/hardhat-solhint'; -import '@nomiclabs/hardhat-etherscan'; import 'hardhat-tracer'; import '@openzeppelin/hardhat-upgrades'; -import '@openzeppelin/hardhat-defender'; // There are no type declarations for import 'solidity-coverage'; @@ -161,7 +161,7 @@ const config: HardhatUserConfig = { }, typechain: { outDir: 'types', - target: 'ethers-v5', + target: 'ethers-v6', }, gasReporter: { enabled: argv.enableGasReport, diff --git a/package.json b/package.json index 3788384b..3c4b01a8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uns", - "version": "0.9.9", + "version": "0.9.10", "description": "UNS contracts and tools", "repository": "https://github.com/unstoppabledomains/uns.git", "main": "./dist/index.js", @@ -16,7 +16,7 @@ "test": "yarn test:sol && yarn test:sandbox", "test:sol": "hardhat test --typecheck", "test:sandbox": "env HARDHAT_NETWORK=sandbox mocha --require ts-node/register --exit ./sandbox/**/*.test.ts", - "rebuild:sandbox": "env HARDHAT_NETWORK=sandbox DEBUG='UNS:*' ts-node ./sandbox/rebuild.ts", + "rebuild:sandbox": "env HARDHAT_NETWORK=sandbox DEBUG='UNS:*' ts-node --files ./sandbox/rebuild.ts", "lint": "yarn lint:ts && yarn lint:sol", "lint:fix": "yarn lint:ts:fix && yarn lint:sol:fix", "lint:ts": "eslint --ignore-path .gitignore .", @@ -39,16 +39,15 @@ "devDependencies": { "@ensdomains/ens-contracts": "^0.0.21", "@ethereumjs/tx": "^4.0.1", - "@nomiclabs/hardhat-ethers": "^2.2.1", - "@nomiclabs/hardhat-etherscan": "^3.1.0", - "@nomiclabs/hardhat-solhint": "^2.0.1", - "@nomiclabs/hardhat-waffle": "^2.0.1", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.6", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^1.1.0", + "@nomiclabs/hardhat-solhint": "^3.0.1", "@openzeppelin/contracts-upgradeable": "^4.7.3", - "@openzeppelin/hardhat-defender": "^1.8.1", - "@openzeppelin/hardhat-upgrades": "^1.20.0", - "@openzeppelin/upgrades-core": "^1.19.1", - "@typechain/ethers-v5": "^10.1.0", - "@typechain/hardhat": "^6.1.2", + "@openzeppelin/hardhat-upgrades": "^2.0.0", + "@openzeppelin/upgrades-core": "^1.32.5", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.1.0", "@types/bip39": "^3.0.0", "@types/chai": "^4.3.3", "@types/debug": "^4.1.7", @@ -71,26 +70,28 @@ "eslint-plugin-mocha-no-only": "^1.1.1", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", - "ethereum-waffle": "3.4.4", + "ethereumjs-block": "^1.7.1", + "ethereumjs-common": "^1.5.2", + "ethereumjs-tx": "^1.3.7", "ethereumjs-util": "^7.1.0", - "ethers": "^5.7.2", - "hardhat": "^2.11.2", + "ethers": "^6.1.0", + "hardhat": "~2.20.0", "hardhat-abi-exporter": "^2.2.1", - "hardhat-contract-sizer": "^2.6.1", - "hardhat-gas-reporter": "^1.0.9", - "hardhat-tracer": "^2.3.2", + "hardhat-contract-sizer": "~2.6.0", + "hardhat-gas-reporter": "^2.1.1", + "hardhat-tracer": "^2.8.1", "husky": "^8.0.1", "lodash.merge": "^4.6.2", "merkle-patricia-tree": "^4.0.0", "mocha": "^10.0.0", "prettier": "^2.3.0", - "prettier-plugin-solidity": "^1.0.0-beta.24", + "prettier-plugin-solidity": "^1.3.1", "solhint": "^3.3.7", "solidity-coverage": "^0.8.4", "tar": "^6.1.9", "ts-mocha": "^10.0.0", "ts-node": "^10.9.1", - "typechain": "^8.1.0", + "typechain": "^8.3.2", "typescript": "^4.7.4", "yargs": "^17.6.0" }, @@ -98,7 +99,7 @@ "@ensdomains/address-encoder": "^0.2.22", "bip39": "^3.0.0", "bip44-constants": "^243.0.0", - "ganache": "^7.4.0", + "ganache": "^7.9.1", "hdkey": "^2.0.1", "web3": "^1.7.4" }, diff --git a/sandbox/db.tgz b/sandbox/db.tgz index 616cd6df..29043b7d 100644 Binary files a/sandbox/db.tgz and b/sandbox/db.tgz differ diff --git a/sandbox/ganache-service.ts b/sandbox/ganache-service.ts index f4eb6171..c92fa57f 100644 --- a/sandbox/ganache-service.ts +++ b/sandbox/ganache-service.ts @@ -2,7 +2,7 @@ import { server, Server, EthereumProvider, ServerOptions } from 'ganache'; const DEFAULT_PORT = 7545; -export type ServerConfigOptions = ServerOptions<'ethereum'> & { +export type ServerConfigOptions = ServerOptions & { url: string; port?: number; hostname?: string; @@ -16,7 +16,7 @@ export class GanacheService { constructor (options: ServerConfigOptions) { this.options = this.validateAndTransformOptions(options); - this.server = server<'ethereum'>(this.options as ServerOptions<'ethereum'>); + this.server = server(this.options as ServerOptions); this.provider = this.server.provider; } diff --git a/sandbox/index.test.ts b/sandbox/index.test.ts index dde498c2..fce6cca0 100644 --- a/sandbox/index.test.ts +++ b/sandbox/index.test.ts @@ -1,11 +1,11 @@ // process.env.HARDHAT_NETWORK = 'sandbox'; import { assert, expect } from 'chai'; import { ethers, network } from 'hardhat'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { utils } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { AbiCoder } from 'ethers'; import { NameService, getNetworkConfig } from '../src/config'; import { MintingManager, UNSRegistry } from '../types/contracts'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; import { BUFFERED_REGISTRATION_COST, REGISTRATION_TIME, TLD, ZERO_ADDRESS } from '../test/helpers/constants'; import { CNSRegistry, @@ -37,7 +37,7 @@ describe('Sandbox', async () => { let sandbox: Sandbox; - const abiCoder = new utils.AbiCoder(); + const abiCoder = new AbiCoder(); before(async () => { sandbox = await Sandbox.start({ verbose: true }); @@ -50,18 +50,19 @@ describe('Sandbox', async () => { const { contracts: unsContracts } = getNetworkConfig(chainId, NameService.UNS); const { contracts: ensContracts } = getNetworkConfig(chainId, NameService.ENS); - unsRegistry = new UNSRegistry__factory(owner).attach(unsContracts.UNSRegistry.address); - cnsRegistry = new CNSRegistry__factory(owner).attach(unsContracts.CNSRegistry.address); - mintingManager = new MintingManager__factory(owner).attach(unsContracts.MintingManager.address); - mintingManager = new MintingManager__factory(owner).attach(unsContracts.MintingManager.address); - zilliqaRecover = new ZilliqaRecover__factory(owner).attach(unsContracts.ZilliqaRecover.address); + unsRegistry = UNSRegistry__factory.connect(unsContracts.UNSRegistry.address, owner); + cnsRegistry = CNSRegistry__factory.connect(unsContracts.CNSRegistry.address, owner); + mintingManager = MintingManager__factory.connect(unsContracts.MintingManager.address, owner); + mintingManager = MintingManager__factory.connect(unsContracts.MintingManager.address, owner); + zilliqaRecover = ZilliqaRecover__factory.connect(unsContracts.ZilliqaRecover.address, owner); predicateAddress = unsContracts.MintableERC721Predicate.address; - ethRegistrarController = new ETHRegistrarController__factory(owner).attach( + ethRegistrarController = ETHRegistrarController__factory.connect( ensContracts.ETHRegistrarController.address, + owner, ); - custody = new ENSCustody__factory(owner).attach(ensContracts.ENSCustody.address); + custody = ENSCustody__factory.connect(ensContracts.ENSCustody.address, owner); }); beforeEach(async () => { @@ -112,7 +113,7 @@ describe('Sandbox', async () => { await cnsRegistry['safeTransferFrom(address,address,uint256,bytes)']( owner.address, - unsRegistry.address, + await unsRegistry.getAddress(), tokenId, abiCoder.encode(['bool'], [false]), ); @@ -120,7 +121,7 @@ describe('Sandbox', async () => { expect(await unsRegistry.ownerOf(tokenId)).to.be.eq(owner.address); // Somehow error cannot be decoded automatically here, used try...catch try { - await cnsRegistry.callStatic.ownerOf(tokenId); + await cnsRegistry.ownerOf.staticCall(tokenId); assert.fail('Error is ecpected'); } catch (error) {} }); @@ -134,7 +135,7 @@ describe('Sandbox', async () => { await cnsRegistry['safeTransferFrom(address,address,uint256,bytes)']( owner.address, - unsRegistry.address, + await unsRegistry.getAddress(), tokenId, abiCoder.encode(['bool'], [true]), ); @@ -142,7 +143,7 @@ describe('Sandbox', async () => { expect(await unsRegistry.ownerOf(tokenId)).to.be.eq(predicateAddress); // Somehow error cannot be decoded automatically here, used try...catch try { - await cnsRegistry.callStatic.ownerOf(tokenId); + await cnsRegistry.ownerOf.staticCall(tokenId); assert.fail('Error is ecpected'); } catch (error) {} }); @@ -152,7 +153,7 @@ describe('Sandbox', async () => { await tx.wait(); const tokenId = await cnsRegistry.childIdOf(TLD.ZIL, domainPrefix); - expect(await unsRegistry.ownerOf(tokenId)).to.be.eq(zilliqaRecover.address); + expect(await unsRegistry.ownerOf(tokenId)).to.be.eq(await zilliqaRecover.getAddress()); expect(await zilliqaRecover.znsOwnerOf(tokenId)).to.be.eq(owner.address); }); }); @@ -160,7 +161,7 @@ describe('Sandbox', async () => { describe('ENS', () => { const secret = '0x0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF'; - const registerName = async (name, txOptions = { value: BUFFERED_REGISTRATION_COST }) => { + const registerName = async (name: string, txOptions = { value: BUFFERED_REGISTRATION_COST }) => { const commitment = await ethRegistrarController.makeCommitment( name, registrantAddress, @@ -173,13 +174,14 @@ describe('Sandbox', async () => { ); let tx = await ethRegistrarController.commit(commitment); - - expect(await ethRegistrarController.commitments(commitment)).to.equal( - (await ethers.provider.getBlock(unwrap(tx, 'blockNumber'))).timestamp, + const block = await ethers.provider.getBlock( + unwrap(tx, 'blockNumber'), ); + expect(await ethRegistrarController.commitments(commitment)).to.equal(block?.timestamp); + await increaseTimeBy( - (await ethRegistrarController.minCommitmentAge()).toNumber(), + await ethRegistrarController.minCommitmentAge(), ); tx = await ethRegistrarController.register( @@ -198,8 +200,8 @@ describe('Sandbox', async () => { }; const registerAndParkName = async ( - name, - minter, + name: string, + minter: SignerWithAddress, resolver = ZERO_ADDRESS, selfCustody = false, callData: string[] = [], @@ -218,10 +220,13 @@ describe('Sandbox', async () => { selfCustody, ); const commitTx = await custody.connect(minter).commit(commitment); - const { timestamp } = await ethers.provider.getBlock(unwrap(commitTx, 'blockNumber')); + const block = await ethers.provider.getBlock(unwrap(commitTx, 'blockNumber')); + const timestamp = block?.timestamp; expect(await ethRegistrarController.commitments(commitment)).to.equal(timestamp); - await increaseTimeBy((await ethRegistrarController.minCommitmentAge()).toNumber()); + await increaseTimeBy( + await ethRegistrarController.minCommitmentAge(), + ); // register const registerTx = await custody diff --git a/sandbox/index.ts b/sandbox/index.ts index 9268057e..da54ff50 100644 --- a/sandbox/index.ts +++ b/sandbox/index.ts @@ -7,8 +7,8 @@ import secp256k1 from 'secp256k1'; import createKeccakHash from 'keccak'; import debug from 'debug'; import { EthereumProvider } from 'ganache'; -import { HttpNetworkUserConfig } from 'hardhat/types'; -import { unwrap } from '../src/helpers'; +import type { HttpNetworkUserConfig } from 'hardhat/types'; +import { unwrap } from '../src/utils'; import { GanacheService } from './ganache-service'; const log = debug('UNS:sandbox'); diff --git a/sandbox/rebuild.ts b/sandbox/rebuild.ts index 0375e5d5..8fd99f39 100644 --- a/sandbox/rebuild.ts +++ b/sandbox/rebuild.ts @@ -2,7 +2,7 @@ import fs from 'fs'; import tar from 'tar'; import { NameService, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; import { Sandbox } from '.'; // NOTE: Node module execution is used for rebuilding sandbox package diff --git a/scripts/blockexplorer_links.ts b/scripts/blockexplorer_links.ts index 44671f87..79cf14df 100644 --- a/scripts/blockexplorer_links.ts +++ b/scripts/blockexplorer_links.ts @@ -1,9 +1,8 @@ import * as fs from 'fs'; -import { unwrap } from '../src/helpers'; type ContractSetup = { address: string; - forwarder?: string; + forwarder: string; implementation?: string; legacyAddresses: string[]; deprecated: boolean; @@ -41,7 +40,7 @@ const link = (network: string, address: string): string => { const contractLinks = ( network: string, - address?: string | string[], + address: string | string[], ): string => { const addresses = address instanceof Array @@ -50,7 +49,7 @@ const contractLinks = ( ? [address] : []; return addresses.length - ? addresses.map((a) => link(network, unwrap(a))).join('
') + ? addresses.map((a) => link(network, a)).join('
') : '—'; }; diff --git a/scripts/build_blocklist.ts b/scripts/build_blocklist.ts index fc95c1f5..cc28a9f1 100644 --- a/scripts/build_blocklist.ts +++ b/scripts/build_blocklist.ts @@ -1,10 +1,9 @@ import path from 'path'; import fs from 'fs'; -import { network } from 'hardhat'; -import { Contract } from 'ethers'; -import { Event } from '@ethersproject/contracts'; +import { network, ethers } from 'hardhat'; +import { BaseContract, EventLog, toBeHex } from 'ethers'; import { getNetworkConfig } from '../src/config'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; import { UNSRegistry__factory } from '../types/factories/contracts'; import { CNSRegistry__factory } from '../types/factories/dot-crypto/contracts'; @@ -31,14 +30,8 @@ async function main () { const cnsRegistry = new CNSRegistry__factory().attach(CNSRegistry.address); const eventsCNS = await fetchEvents(cnsRegistry, parseInt(CNSRegistry.deploymentBlock, 16)); - const tokens = eventsUNS.concat(eventsCNS).map((t: Event) => { - return ( - '0x' + - t.args.tokenId - .toHexString() - .replace(/^(0x)?/, '') - .padStart(64, '0') - ); + const tokens = eventsUNS.concat(eventsCNS).map((t: EventLog) => { + return toBeHex(t.args.tokenId, 32); }); await save(chainId, { tokens: [...new Set(tokens)] }); @@ -46,24 +39,25 @@ async function main () { } async function fetchEvents ( - contract: Contract, + contract: BaseContract, fromBlock: number, toBlock?: number, limit = 10000, -): Promise> { +): Promise> { if (!toBlock) { - toBlock = await contract.provider.getBlockNumber(); + toBlock = await ethers.provider.getBlockNumber(); } const maxBlock = fromBlock + limit; const _toBlock = Math.min(maxBlock, toBlock); - console.log(`Fetching events blocks [${contract.address}: ${fromBlock}-${_toBlock}]`); + console.log(`Fetching events blocks [${await contract.getAddress()}: ${fromBlock}-${_toBlock}]`); const transferFilter = contract.filters.Transfer('0x0000000000000000000000000000000000000000'); try { - const events = await contract.queryFilter(transferFilter, fromBlock, _toBlock); + const events = (await contract.queryFilter(transferFilter, fromBlock, _toBlock)) as EventLog[]; return toBlock > maxBlock ? events.concat(await fetchEvents(contract, _toBlock)) : events; - } catch (err) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (err: any) { console.log('FAIL', err); if (err.message === 'query returned more than 10000 results') { diff --git a/scripts/build_dotcoin_upgrade_list.ts b/scripts/build_dotcoin_upgrade_list.ts index 1316e647..1dd77e29 100644 --- a/scripts/build_dotcoin_upgrade_list.ts +++ b/scripts/build_dotcoin_upgrade_list.ts @@ -1,16 +1,15 @@ import path from 'path'; import fs from 'fs'; -import { network } from 'hardhat'; -import { utils, BigNumber, Contract } from 'ethers'; -import { Log } from '@ethersproject/abstract-provider'; +import { network, ethers } from 'hardhat'; +import { BaseContract, id, Log, toBeHex } from 'ethers'; import { getNetworkConfig } from '../src/config'; import { UNSRegistry__factory } from '../types/factories/contracts'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; -const NEW_URI_EVENT_TOPIC = utils.id('NewURI(uint256,string)'); +const NEW_URI_EVENT_TOPIC = id('NewURI(uint256,string)'); -const normalizeTokenId = (bigNumber: BigNumber) => { - return utils.hexZeroPad(bigNumber.toHexString(), 32).toLowerCase(); +const normalizeTokenId = (number: bigint) => { + return toBeHex(number, 32).toLowerCase(); }; type State = { @@ -60,7 +59,7 @@ function getContractsConfig (chainId: number) { } async function fetchLogs ( - contract: Contract, + contract: BaseContract, topics: string[], fromBlock: number, toBlock: number, @@ -69,18 +68,19 @@ async function fetchLogs ( const maxBlock = fromBlock + limit; const _toBlock = Math.min(maxBlock, toBlock); - console.log(`Fetching events blocks [${contract.address}: ${fromBlock}-${_toBlock}]`); + console.log(`Fetching events blocks [${await contract.getAddress()}: ${fromBlock}-${_toBlock}]`); try { - const events = await contract.provider.getLogs({ - address: contract.address, + const events = await ethers.provider.getLogs({ + address: await contract.getAddress(), topics, fromBlock, toBlock: _toBlock, }); return toBlock > maxBlock ? events.concat(await fetchLogs(contract, topics, _toBlock, toBlock, limit)) : events; - } catch (err) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (err: any) { console.log('FAIL', err); if (err.message === 'query returned more than 10000 results') { @@ -124,7 +124,7 @@ async function main () { throw new Error('Current network configuration does not hase UNSRegistry'); } - const unsRegistryContract = new UNSRegistry__factory().attach(contractsConfig.UNSRegistry.address); + const unsRegistryContract = UNSRegistry__factory.connect(contractsConfig.UNSRegistry.address); const currentState = readState(chainId); const newState = JSON.parse(JSON.stringify(currentState)); @@ -134,7 +134,7 @@ async function main () { : currentState.latestSyncedL2Block; const fromBlock = Math.max(latestSyncedBlock, parseInt(contractsConfig.UNSRegistry.deploymentBlock)); - const toBlock = await unsRegistryContract.provider.getBlockNumber(); + const toBlock = await ethers.provider.getBlockNumber(); console.log('Fetching events from ' + fromBlock + ' to ' + toBlock); @@ -150,7 +150,12 @@ async function main () { const parsedLogs = result.map((log) => unsRegistryContract.interface.parseLog(log)); - parsedLogs.forEach(({ name, args }) => { + parsedLogs.forEach((log) => { + if (!log) { + return; + } + + const { name, args } = log; if (name !== 'NewURI') { return; } diff --git a/scripts/deploy.ts b/scripts/deploy.ts index 1bcdd419..1709bb5d 100644 --- a/scripts/deploy.ts +++ b/scripts/deploy.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/deploy_CNS_Forwarders.ts b/scripts/deploy_CNS_Forwarders.ts index fe7c5fea..cdee524c 100644 --- a/scripts/deploy_CNS_Forwarders.ts +++ b/scripts/deploy_CNS_Forwarders.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/deploy_DotCoinBurner.ts b/scripts/deploy_DotCoinBurner.ts index 8119b309..61530fc4 100644 --- a/scripts/deploy_DotCoinBurner.ts +++ b/scripts/deploy_DotCoinBurner.ts @@ -2,7 +2,7 @@ import { network } from 'hardhat'; import { mergeNetworkConfig, getNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/deploy_ENSCustody.ts b/scripts/deploy_ENSCustody.ts index 46280d0c..03c98e72 100644 --- a/scripts/deploy_ENSCustody.ts +++ b/scripts/deploy_ENSCustody.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { NameService, getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/deploy_MintingManagerForwarder.ts b/scripts/deploy_MintingManagerForwarder.ts index 52727059..3dd4d5be 100644 --- a/scripts/deploy_MintingManagerForwarder.ts +++ b/scripts/deploy_MintingManagerForwarder.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/deploy_ProxyReader.ts b/scripts/deploy_ProxyReader.ts index 05349cc1..a9d6664c 100644 --- a/scripts/deploy_ProxyReader.ts +++ b/scripts/deploy_ProxyReader.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/deploy_UNS.ts b/scripts/deploy_UNS.ts index 9581be52..57f796c8 100644 --- a/scripts/deploy_UNS.ts +++ b/scripts/deploy_UNS.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/deploy_UNSOperator.ts b/scripts/deploy_UNSOperator.ts index af4816fe..4e708c74 100644 --- a/scripts/deploy_UNSOperator.ts +++ b/scripts/deploy_UNSOperator.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/deploy_UNS_only.ts b/scripts/deploy_UNS_only.ts index 30064b50..349e022f 100644 --- a/scripts/deploy_UNS_only.ts +++ b/scripts/deploy_UNS_only.ts @@ -2,7 +2,7 @@ import { network } from 'hardhat'; import merge from 'lodash.merge'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/deploy_ZilliqaRecover.ts b/scripts/deploy_ZilliqaRecover.ts index d69bfa51..5dc5ed04 100644 --- a/scripts/deploy_ZilliqaRecover.ts +++ b/scripts/deploy_ZilliqaRecover.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/deploy_full.ts b/scripts/deploy_full.ts index f30ac634..a99f274e 100644 --- a/scripts/deploy_full.ts +++ b/scripts/deploy_full.ts @@ -2,7 +2,7 @@ import { network } from 'hardhat'; import { mergeNetworkConfig, getNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/prepare_ProxyReader.ts b/scripts/prepare_ProxyReader.ts index 806b219b..58f5db3e 100644 --- a/scripts/prepare_ProxyReader.ts +++ b/scripts/prepare_ProxyReader.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/propose_ENSCustody.ts b/scripts/propose_ENSCustody.ts index 2e97470d..6ee23198 100644 --- a/scripts/propose_ENSCustody.ts +++ b/scripts/propose_ENSCustody.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { NameService, getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/propose_MintingManager.ts b/scripts/propose_MintingManager.ts index 664d373d..d096ccb6 100644 --- a/scripts/propose_MintingManager.ts +++ b/scripts/propose_MintingManager.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/propose_ProxyReader.ts b/scripts/propose_ProxyReader.ts index 1a87ca0e..01251ed3 100644 --- a/scripts/propose_ProxyReader.ts +++ b/scripts/propose_ProxyReader.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/propose_UNSRegistry.ts b/scripts/propose_UNSRegistry.ts index a2a56dfe..4aa9a57f 100644 --- a/scripts/propose_UNSRegistry.ts +++ b/scripts/propose_UNSRegistry.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/upgrade.ts b/scripts/upgrade.ts index 7abe65d4..3bfd4edd 100644 --- a/scripts/upgrade.ts +++ b/scripts/upgrade.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/upgrade_MintingManager.ts b/scripts/upgrade_MintingManager.ts index 8025dc5f..13cc5bb4 100644 --- a/scripts/upgrade_MintingManager.ts +++ b/scripts/upgrade_MintingManager.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/upgrade_ProxyReader.ts b/scripts/upgrade_ProxyReader.ts index 428f5ac6..2d1bdc15 100644 --- a/scripts/upgrade_ProxyReader.ts +++ b/scripts/upgrade_ProxyReader.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { mergeNetworkConfig, getNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/upgrade_UNSOperator.ts b/scripts/upgrade_UNSOperator.ts index 22076597..e37a3034 100644 --- a/scripts/upgrade_UNSOperator.ts +++ b/scripts/upgrade_UNSOperator.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { mergeNetworkConfig, getNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/upgrade_UNSRegistry.ts b/scripts/upgrade_UNSRegistry.ts index 767202aa..791558e4 100644 --- a/scripts/upgrade_UNSRegistry.ts +++ b/scripts/upgrade_UNSRegistry.ts @@ -1,7 +1,7 @@ import { network } from 'hardhat'; import { getNetworkConfig, mergeNetworkConfig } from '../src/config'; import { Deployer } from '../src/deployer'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; async function main () { console.log('Network:', network.name); diff --git a/scripts/upload_blockchain_families.ts b/scripts/upload_blockchain_families.ts index 667ccae9..280cb56c 100644 --- a/scripts/upload_blockchain_families.ts +++ b/scripts/upload_blockchain_families.ts @@ -2,7 +2,7 @@ import fs from 'fs'; import { ethers, network } from 'hardhat'; import { parse } from 'csv-parse/sync'; import { chunk, at } from 'lodash'; -import { unwrap } from '../src/helpers'; +import { unwrap } from '../src/utils'; import { getNetworkConfig } from '../src/config'; import { ProxyReader__factory } from '../types/factories/contracts'; import { ProxyReader } from '../types/contracts/ProxyReader'; diff --git a/src/deployer.ts b/src/deployer.ts index a1c2401c..d564c9a6 100644 --- a/src/deployer.ts +++ b/src/deployer.ts @@ -3,13 +3,13 @@ import fs from 'fs'; import { ethers, network, config } from 'hardhat'; import { merge } from 'lodash'; import debug from 'debug'; -import { Contract, ContractFactory } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { BaseContract, toBeHex, ZeroAddress } from 'ethers'; import { NetworkConfig } from 'hardhat/types'; import { TransactionResponse } from '@ethersproject/abstract-provider'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { ArtifactName, NsConfig, NsNetworkConfig, ContractConfigMap, UnsContractName, ContractName } from './types'; import { Task, tasks } from './tasks'; -import { unwrap } from './helpers'; +import { unwrap } from './utils'; const log = debug('UNS:deployer'); @@ -18,77 +18,30 @@ type DeployerOptions = { proxy: boolean; }; +type DeployedContract = { + address: string; + legacyAddresses: string[]; + deploymentBlock: string; + implementation: string; + forwarder: string; + transaction: TransactionResponse; +} + type DeployConfig = { contracts: { - [k in ArtifactName]: { - address: string; - legacyAddresses: string[]; - deploymentBlock: string; - implementation: string; - forwarder: string; - transaction: TransactionResponse; - }; + [k in ArtifactName]: DeployedContract; }; }; type AccountsMap = Record; -type ArtifactsMap = { - [k in ArtifactName]: ContractFactory; -}; - const DEFAULT_OPTIONS: DeployerOptions = { basePath: './.deployer', proxy: true, }; -async function getArtifacts (): Promise { - return { - CNSRegistry: await ethers.getContractFactory('CNSRegistry'), - CNSRegistryForwarder: await ethers.getContractFactory('CNSRegistryForwarder'), - SignatureController: await ethers.getContractFactory('SignatureController'), - MintingController: await ethers.getContractFactory('MintingController'), - URIPrefixController: await ethers.getContractFactory('URIPrefixController'), - Resolver: await ethers.getContractFactory('dot-crypto/contracts/Resolver.sol:Resolver'), - ResolverForwarder: await ethers.getContractFactory('ResolverForwarder'), - UNSRegistry: await ethers.getContractFactory('UNSRegistry'), - MintingManager: await ethers.getContractFactory('MintingManager'), - UNSOperator: await ethers.getContractFactory('UNSOperator'), - MintingManagerForwarder: await ethers.getContractFactory('MintingManagerForwarder'), - ProxyReader: await ethers.getContractFactory('contracts/ProxyReader.sol:ProxyReader'), - DummyStateSender: await ethers.getContractFactory('DummyStateSender'), - SimpleCheckpointManager: await ethers.getContractFactory('SimpleCheckpointManager'), - MintableERC721Predicate: await ethers.getContractFactory('MintableERC721Predicate'), - RootChainManager: await ethers.getContractFactory('RootChainManager'), - DotCoinBurner: await ethers.getContractFactory('DotCoinBurner'), - ZilliqaRecover: await ethers.getContractFactory('ZilliqaRecover'), - - ENSRegistry: await ethers.getContractFactory('ENSRegistry'), - BaseRegistrarImplementation: await ethers.getContractFactory('BaseRegistrarImplementation'), - ReverseRegistrar: await ethers.getContractFactory('ReverseRegistrar'), - NameWrapper: await ethers.getContractFactory('NameWrapper'), - DummyOracle: await ethers.getContractFactory('DummyOracle'), - StablePriceOracle: await ethers.getContractFactory('StablePriceOracle'), - ETHRegistrarController: await ethers.getContractFactory('ETHRegistrarController'), - PublicResolver: await ethers.getContractFactory('PublicResolver'), - ENSCustody: await ethers.getContractFactory('ENSCustody'), - LegacyENSRegistry: await ethers.getContractFactory('LegacyENSRegistry'), - LegacyETHRegistrarController: await ethers.getContractFactory('LegacyETHRegistrarController'), - DNSRegistrar: await ethers.getContractFactory('DNSRegistrar'), - DNSSECImpl: await ethers.getContractFactory('DNSSECImpl'), - TLDPublicSuffixList: await ethers.getContractFactory('TLDPublicSuffixList'), - RSASHA256Algorithm: await ethers.getContractFactory('RSASHA256Algorithm'), - DummyAlgorithm: await ethers.getContractFactory('DummyAlgorithm'), - SHA1Digest: await ethers.getContractFactory('SHA1Digest'), - SHA256Digest: await ethers.getContractFactory('SHA256Digest'), - SHA1NSEC3Digest: await ethers.getContractFactory('SHA1NSEC3Digest'), - Root: await ethers.getContractFactory('Root'), - }; -} - export class Deployer { public options: DeployerOptions; - public artifacts: ArtifactsMap; public accounts: AccountsMap; public log: debug.Debugger; @@ -103,7 +56,6 @@ export class Deployer { return new Deployer( options ?? DEFAULT_OPTIONS, - await getArtifacts(), { owner }, _unsConfig.minters[network.name], _unsConfig.multisig[network.name], @@ -112,7 +64,6 @@ export class Deployer { constructor ( options: DeployerOptions, - artifacts: ArtifactsMap, accounts: AccountsMap, minters: string[], multisig: string, @@ -121,7 +72,6 @@ export class Deployer { ...DEFAULT_OPTIONS, ...options, }; - this.artifacts = artifacts; this.accounts = accounts; this.minters = minters; this.multisig = multisig; @@ -137,7 +87,6 @@ export class Deployer { this.log('Initialized deployer', { options: this.options, - artifacts: Object.keys(artifacts), accounts: Object.values(accounts) .filter((a) => !!a) .map((a) => a.address), @@ -180,7 +129,7 @@ export class Deployer { ...emptyConfig, address: value.address, implementation: value.implementation, - deploymentBlock: value.transaction && ethers.BigNumber.from(value.transaction.blockNumber).toHexString(), + deploymentBlock: value.transaction && toBeHex(BigInt(value.transaction.blockNumber ?? 0)), forwarder: value.forwarder, legacyAddresses: value.legacyAddresses, }; @@ -203,19 +152,19 @@ export class Deployer { async saveContractConfig ( name: ContractName, - contract: Contract, + contract: BaseContract, implAddress?: string, - forwarder?: Contract, + forwarder?: BaseContract, ): Promise { const config = this.getDeployConfig(); const _config = merge(config, { contracts: { [name]: { - address: contract.address, + address: await contract.getAddress(), implementation: implAddress, - transaction: contract.deployTransaction && (await contract.deployTransaction.wait()), - forwarder: forwarder && forwarder.address, + transaction: (await contract.deploymentTransaction()?.wait()), + forwarder: forwarder && await forwarder.getAddress(), }, }, }); @@ -240,14 +189,28 @@ export class Deployer { this._saveConfig(_config); } - async saveForwarderConfig (name: UnsContractName, contract: Contract): Promise { + async saveForwarderConfig (name: UnsContractName, contract: BaseContract): Promise { const config = this.getDeployConfig(); const _config = merge(config, { contracts: { [name]: { ...((config.contracts || {})[name] || {}), - forwarder: contract.address, + forwarder: await contract.getAddress(), + }, + }, + }); + + this._saveConfig(_config); + } + + async saveContractEmptyConfig (name: UnsContractName) { + const config = this.getDeployConfig(); + + const _config = merge(config, { + contracts: { + [name]: { + address: ZeroAddress, }, }, }); diff --git a/src/helpers.ts b/src/helpers.ts index 86c7727a..dc3238fc 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -1,24 +1,57 @@ -import { sha3 } from 'web3-utils'; -import { ArtifactName, DependenciesMap, ContractConfig } from './types'; +import { + ContractAddressOrInstance, + DeployProxyOptions, + UpgradeProxyOptions, +} from '@openzeppelin/hardhat-upgrades/dist/utils'; +import type { BaseContract, ContractFactory } from 'ethers'; +import { network, upgrades } from 'hardhat'; +import { DependenciesMap, ContractName, NsNetworkConfig } from './types'; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export function unwrap (object: object, key: string): any { - if (!object[key]) { - throw new Error(`Unwrap: cannot find key ${key} on object ${object.toString()}`); +export const ensureDeployed = (config: NsNetworkConfig, ...contracts: ContractName[]): DependenciesMap => { + return contracts + .map((name) => { + const contract = config.contracts[name]; + if (!contract?.address) { + throw new Error(`${name} contract not found for network ${network.config.chainId}`); + } + return { [name]: contract }; + }) + .reduce((a, b) => ({ ...a, ...b })); +}; + +export const ensureUpgradable = (config: NsNetworkConfig): void => { + if (!config.contracts.ProxyAdmin?.address) { + throw new Error('Current network configuration does not support upgrading'); } +}; - return object[key]; -} +export const deployProxy = async ( + implFactory: ContractFactory, + args?: unknown[], + opts?: DeployProxyOptions, +): Promise => { + const proxy = await upgrades.deployProxy(implFactory, args, opts); -export function unwrapDependencies (dependencies: DependenciesMap, keys: ArtifactName[]): ContractConfig[] { - return keys.map((key) => unwrap(dependencies, key)); -} + await proxy.waitForDeployment(); -export function notNullSha (value: string) { - const res = sha3(value); - if (!res) { - throw new Error('notNullSha: SHA returns null'); - } + return proxy as unknown as T; +}; + +export const upgradeProxy = async ( + proxy: ContractAddressOrInstance, + implFactory: ContractFactory, + opts?: UpgradeProxyOptions, +): Promise => { + const upgraded = await upgrades.upgradeProxy(proxy, implFactory, opts); + + await upgraded.waitForDeployment(); + + return proxy as unknown as T; +}; - return res; -} +/** + * Only used for ProxyReader, as ProxyReader has a `getAddress` contract function + */ +export const getContractAddress = async (contract: BaseContract): Promise => { + return contract.getAddress(); +}; diff --git a/src/tasks.ts b/src/tasks.ts index 43a23983..3c97d7b4 100644 --- a/src/tasks.ts +++ b/src/tasks.ts @@ -1,19 +1,14 @@ -import { defender, network, upgrades } from 'hardhat'; -import { Contract, utils } from 'ethers'; +import { network, upgrades, ethers, defender } from 'hardhat'; +import { Contract, keccak256, namehash, parseEther } from 'ethers'; import { merge } from 'lodash'; -import { namehash } from 'ethers/lib/utils'; +import { getContractAddress } from '@openzeppelin/hardhat-upgrades/dist/utils'; import { ZERO_ADDRESS, ZERO_WORD } from '../test/helpers/constants'; +import { ENSCustody, MintingManager, ProxyReader, UNSOperator, UNSRegistry, ZilliqaRecover } from '../types'; import { Deployer } from './deployer'; -import { - ArtifactName, - DependenciesMap, - EnsContractName, - UnsContractName, - NsNetworkConfig, - ContractName, -} from './types'; +import { ArtifactName, DependenciesMap, EnsContractName, UnsContractName, NsNetworkConfig } from './types'; import verify from './verify'; -import { notNullSha, unwrap, unwrapDependencies } from './helpers'; +import { unwrap, unwrapDependencies, notNullSha } from './utils'; +import { deployProxy, ensureDeployed, ensureUpgradable } from './helpers'; export type Task = { tags: string[]; @@ -24,77 +19,68 @@ export type Task = { const isSandbox = network.config.chainId === 1337; -const ensureDeployed = (config: NsNetworkConfig, ...contracts: ContractName[]): DependenciesMap => { - return contracts - .map((name) => { - const contract = config.contracts[name]; - if (!contract?.address) { - throw new Error(`${name} contract not found for network ${network.config.chainId}`); - } - return { [name]: contract }; - }) - .reduce((a, b) => ({ ...a, ...b })); -}; - -const ensureUpgradable = (config: NsNetworkConfig): void => { - if (!config.contracts.ProxyAdmin?.address) { - throw new Error('Current network configuration does not support upgrading'); - } -}; - export const deployCNSTask: Task = { tags: ['cns', 'full'], priority: 0, run: async (ctx: Deployer) => { const { owner } = ctx.accounts; - const { CNSRegistry, SignatureController, MintingController, URIPrefixController, Resolver } = ctx.artifacts; - // CNS Registry - const cnsRegistry = await CNSRegistry.connect(owner).deploy(); + const cnsRegistry = await ethers.deployContract(ArtifactName.CNSRegistry, [], owner); await ctx.saveContractConfig(UnsContractName.CNSRegistry, cnsRegistry); - await cnsRegistry.deployTransaction.wait(); - await verify(ctx, cnsRegistry.address, []); + await cnsRegistry.waitForDeployment(); + await verify(ctx, await cnsRegistry.getAddress(), []); // CNS Controllers - const signatureController = await SignatureController.connect(owner).deploy(cnsRegistry.address); + const signatureController = await ethers.deployContract( + ArtifactName.SignatureController, + [await cnsRegistry.getAddress()], + owner, + ); await ctx.saveContractConfig(UnsContractName.SignatureController, signatureController); - await signatureController.deployTransaction.wait(); - await verify(ctx, signatureController.address, [cnsRegistry.address]); + await signatureController.waitForDeployment(); + await verify(ctx, await signatureController.getAddress(), [await cnsRegistry.getAddress()]); - const mintingController = await MintingController.connect(owner).deploy(cnsRegistry.address); + const mintingController = await ethers.deployContract( + ArtifactName.MintingController, + [await cnsRegistry.getAddress()], + owner, + ); await ctx.saveContractConfig(UnsContractName.MintingController, mintingController); - await mintingController.deployTransaction.wait(); - await verify(ctx, mintingController.address, [cnsRegistry.address]); + await mintingController.waitForDeployment(); + await verify(ctx, await mintingController.getAddress(), [await cnsRegistry.getAddress()]); - const uriPrefixController = await URIPrefixController.connect(owner).deploy(cnsRegistry.address); + const uriPrefixController = await ethers.deployContract( + ArtifactName.URIPrefixController, + [await cnsRegistry.getAddress()], + owner, + ); await ctx.saveContractConfig(UnsContractName.URIPrefixController, uriPrefixController); - await uriPrefixController.deployTransaction.wait(); - await verify(ctx, uriPrefixController.address, [cnsRegistry.address]); + await uriPrefixController.waitForDeployment(); + await verify(ctx, await uriPrefixController.getAddress(), [await cnsRegistry.getAddress()]); // Configuration - await cnsRegistry.connect(owner).addController(signatureController.address); - await cnsRegistry.connect(owner).addController(mintingController.address); - await cnsRegistry.connect(owner).addController(uriPrefixController.address); + await cnsRegistry.addController(await signatureController.getAddress()); + await cnsRegistry.addController(await mintingController.getAddress()); + await cnsRegistry.addController(await uriPrefixController.getAddress()); // CNS Resolver - const resolver = await Resolver.connect(owner).deploy(cnsRegistry.address, mintingController.address); + const resolver = await ethers.deployContract( + ArtifactName.Resolver, + [await cnsRegistry.getAddress(), await mintingController.getAddress()], + owner, + ); await ctx.saveContractConfig(UnsContractName.Resolver, resolver); - await resolver.deployTransaction.wait(); - await verify(ctx, resolver.address, [cnsRegistry.address, mintingController.address]); + await resolver.waitForDeployment(); + await verify(ctx, await resolver.getAddress(), [ + await cnsRegistry.getAddress(), + await mintingController.getAddress(), + ]); // Stub unsupported contracts - await ctx.saveContractConfig(UnsContractName.WhitelistedMinter, { - address: '0x0000000000000000000000000000000000000000', - } as Contract); - await ctx.saveContractConfig(UnsContractName.DomainZoneController, { - address: '0x0000000000000000000000000000000000000000', - } as Contract); - await ctx.saveContractConfig(UnsContractName.TwitterValidationOperator, { - address: '0x0000000000000000000000000000000000000000', - } as Contract); - await ctx.saveContractConfig(UnsContractName.FreeMinter, { - address: '0x0000000000000000000000000000000000000000', - } as Contract); + await ctx.saveContractEmptyConfig(UnsContractName.WhitelistedMinter); + await ctx.saveContractEmptyConfig(UnsContractName.DomainZoneController); + await ctx.saveContractEmptyConfig(UnsContractName.TwitterValidationOperator); + await ctx.saveContractEmptyConfig(UnsContractName.FreeMinter); }, ensureDependencies: () => ({}), }; @@ -106,25 +92,30 @@ export const deployCNSForwardersTask: Task = { const { owner } = ctx.accounts; const [CNSRegistry, SignatureController, Resolver] = unwrapDependencies(dependencies, [ - ArtifactName.CNSRegistry, - ArtifactName.SignatureController, - ArtifactName.Resolver, + UnsContractName.CNSRegistry, + UnsContractName.SignatureController, + UnsContractName.Resolver, ]); - const cnsRegistryForwarder = await ctx.artifacts.CNSRegistryForwarder.connect(owner).deploy( - SignatureController.address, + const cnsRegistryForwarder = await ethers.deployContract( + ArtifactName.CNSRegistryForwarder, + [SignatureController.address], + owner, ); + await ctx.saveForwarderConfig(UnsContractName.CNSRegistry, cnsRegistryForwarder); - await cnsRegistryForwarder.deployTransaction.wait(); - await verify(ctx, cnsRegistryForwarder.address, [SignatureController.address]); + await cnsRegistryForwarder.waitForDeployment(); + await verify(ctx, await cnsRegistryForwarder.getAddress(), [SignatureController.address]); - const resolverForwarder = await ctx.artifacts.ResolverForwarder.connect(owner).deploy( - CNSRegistry.address, - Resolver.address, + const resolverForwarder = await ethers.deployContract( + ArtifactName.ResolverForwarder, + [CNSRegistry.address, Resolver.address], + owner, ); + await ctx.saveForwarderConfig(UnsContractName.Resolver, resolverForwarder); - await resolverForwarder.deployTransaction.wait(); - await verify(ctx, resolverForwarder.address, [CNSRegistry.address, Resolver.address]); + await resolverForwarder.waitForDeployment(); + await verify(ctx, await resolverForwarder.getAddress(), [CNSRegistry.address, Resolver.address]); }, ensureDependencies: (ctx: Deployer, config?: NsNetworkConfig): DependenciesMap => { @@ -147,17 +138,17 @@ const deployUNSTask = { const [CNSRegistry, MintingController, URIPrefixController, Resolver, RootChainManager] = unwrapDependencies( dependencies, [ - ArtifactName.CNSRegistry, - ArtifactName.MintingController, - ArtifactName.URIPrefixController, - ArtifactName.Resolver, - ArtifactName.RootChainManager, + UnsContractName.CNSRegistry, + UnsContractName.MintingController, + UnsContractName.URIPrefixController, + UnsContractName.Resolver, + UnsContractName.RootChainManager, ], ); - let unsRegistry: Contract; - let mintingManager: Contract; - let unsOperator: Contract; + let unsRegistry: UNSRegistry; + let mintingManager: MintingManager; + let unsOperator: UNSOperator; let proxyAdmin: Contract; let unsRegistryImpl: string; @@ -165,70 +156,71 @@ const deployUNSTask = { let unsOperatorImpl: string; if (ctx.options.proxy) { - unsRegistry = await upgrades.deployProxy(ctx.artifacts.UNSRegistry.connect(owner), [], { + unsRegistry = await deployProxy(await ethers.getContractFactory(ArtifactName.UNSRegistry, owner), [], { initializer: false, unsafeAllow: ['delegatecall'], }); - await unsRegistry.deployTransaction.wait(); - mintingManager = await upgrades.deployProxy(ctx.artifacts.MintingManager.connect(owner), [], { + mintingManager = await deployProxy(await ethers.getContractFactory(ArtifactName.MintingManager, owner), [], { initializer: false, }); - await mintingManager.deployTransaction.wait(); - unsOperator = await upgrades.deployProxy(ctx.artifacts.UNSOperator.connect(owner), []); - await unsOperator.deployTransaction.wait(); + unsOperator = await deployProxy(await ethers.getContractFactory(ArtifactName.UNSOperator, owner)); proxyAdmin = await upgrades.admin.getInstance(); await ctx.saveContractConfig(UnsContractName.ProxyAdmin, proxyAdmin); - unsRegistryImpl = await proxyAdmin.callStatic.getProxyImplementation(unsRegistry.address); + unsRegistryImpl = await proxyAdmin.getProxyImplementation.staticCall(await unsRegistry.getAddress()); await ctx.saveContractConfig(UnsContractName.UNSRegistry, unsRegistry, unsRegistryImpl, unsRegistry); await verify(ctx, unsRegistryImpl, []); - mintingManagerImpl = await proxyAdmin.callStatic.getProxyImplementation(mintingManager.address); + mintingManagerImpl = await proxyAdmin.getProxyImplementation.staticCall(await mintingManager.getAddress()); await ctx.saveContractConfig(UnsContractName.MintingManager, mintingManager, mintingManagerImpl); await verify(ctx, mintingManagerImpl, []); - unsOperatorImpl = await proxyAdmin.callStatic.getProxyImplementation(unsOperator.address); + unsOperatorImpl = await proxyAdmin.getProxyImplementation.staticCall(await unsOperator.getAddress()); await ctx.saveContractConfig(UnsContractName.UNSOperator, unsOperator, unsOperatorImpl); await verify(ctx, unsOperatorImpl, []); } else { - unsRegistry = await ctx.artifacts.UNSRegistry.connect(owner).deploy(); + unsRegistry = await ethers.deployContract(UnsContractName.UNSRegistry, owner); await ctx.saveContractConfig(UnsContractName.UNSRegistry, unsRegistry); - await unsRegistry.deployTransaction.wait(); - await verify(ctx, unsRegistry.address, []); + await unsRegistry.waitForDeployment(); + await verify(ctx, await unsRegistry.getAddress(), []); - mintingManager = await ctx.artifacts.MintingManager.connect(owner).deploy(); + mintingManager = await ethers.deployContract(UnsContractName.MintingManager, owner); await ctx.saveContractConfig(UnsContractName.MintingManager, mintingManager); - await mintingManager.deployTransaction.wait(); - await verify(ctx, mintingManager.address, []); + await mintingManager.waitForDeployment(); + await verify(ctx, await mintingManager.getAddress(), []); - unsOperator = await ctx.artifacts.UNSOperator.connect(owner).deploy(); + unsOperator = await ethers.deployContract(UnsContractName.UNSOperator, owner); await ctx.saveContractConfig(UnsContractName.UNSOperator, unsOperator); - await unsOperator.deployTransaction.wait(); - await verify(ctx, unsOperator.address, []); + await unsOperator.waitForDeployment(); + await verify(ctx, await unsOperator.getAddress(), []); } const registryInitTx = await unsRegistry .connect(owner) - .initialize(mintingManager.address, CNSRegistry.address, RootChainManager.address, ZERO_ADDRESS); + .initialize(await mintingManager.getAddress(), CNSRegistry.address, RootChainManager.address, ZERO_ADDRESS); await registryInitTx.wait(); - const forwarder = await ctx.artifacts.MintingManagerForwarder.connect(owner).deploy(mintingManager.address); + const forwarder = await ethers.deployContract( + ArtifactName.MintingManagerForwarder, + [await mintingManager.getAddress()], + owner, + ); await ctx.saveForwarderConfig(UnsContractName.MintingManager, forwarder); - await forwarder.deployTransaction.wait(); - await verify(ctx, forwarder.address, [mintingManager.address]); + await forwarder.waitForDeployment(); + await verify(ctx, await forwarder.getAddress(), [await mintingManager.getAddress()]); const mintingManagerInitTx = await mintingManager .connect(owner) .initialize( - unsRegistry.address, + await unsRegistry.getAddress(), MintingController.address, URIPrefixController.address, Resolver.address, - unsOperator.address, - forwarder.address, + await unsOperator.getAddress(), + await forwarder.getAddress(), ); await mintingManagerInitTx.wait(); @@ -266,28 +258,28 @@ const deployUNSProxyReaderTask: Task = { const { owner } = ctx.accounts; const [UNSRegistry, CNSRegistry, MintingManager] = unwrapDependencies(dependencies, [ - ArtifactName.UNSRegistry, - ArtifactName.CNSRegistry, - ArtifactName.MintingManager, + UnsContractName.UNSRegistry, + UnsContractName.CNSRegistry, + UnsContractName.MintingManager, ]); - const proxyReader = await upgrades.deployProxy( - ctx.artifacts.ProxyReader.connect(owner), + const proxyReader = await deployProxy( + await ethers.getContractFactory(ArtifactName.ProxyReader, owner), [UNSRegistry.address, CNSRegistry.address], { unsafeAllow: ['delegatecall'] }, ); - await proxyReader.deployTransaction.wait(); + await proxyReader.waitForDeployment(); const proxyAdmin = await upgrades.admin.getInstance(); await ctx.saveContractConfig(UnsContractName.ProxyAdmin, proxyAdmin); - const proxyReaderImpl = await proxyAdmin.callStatic.getProxyImplementation(proxyReader.address); + const proxyReaderImpl = await proxyAdmin.getProxyImplementation.staticCall(await getContractAddress(proxyReader)); await ctx.saveContractConfig(UnsContractName.ProxyReader, proxyReader, proxyReaderImpl); await verify(ctx, proxyReaderImpl, []); - const mintingManager = ctx.artifacts.MintingManager.attach(MintingManager.address); + const mintingManager = await ethers.getContractAt(ArtifactName.MintingManager, MintingManager.address, owner); - await mintingManager.connect(owner).addProxyReaders([proxyReader.address]); + await mintingManager.addProxyReaders([await getContractAddress(proxyReader)]); }, ensureDependencies: (ctx: Deployer, config?: NsNetworkConfig): DependenciesMap => { @@ -309,18 +301,26 @@ const configureCNSTask = { const { owner } = ctx.accounts; const [MintingController, URIPrefixController, MintingManager] = unwrapDependencies(dependencies, [ - ArtifactName.MintingController, - ArtifactName.URIPrefixController, - ArtifactName.MintingManager, + UnsContractName.MintingController, + UnsContractName.URIPrefixController, + UnsContractName.MintingManager, ]); - const mintingController = ctx.artifacts.MintingController.attach(MintingController.address).connect(owner); + const mintingController = await ethers.getContractAt( + ArtifactName.MintingController, + MintingController.address, + owner, + ); if (!(await mintingController.isMinter(MintingManager.address))) { await mintingController.addMinter(MintingManager.address); } - const uriPrefixController = ctx.artifacts.URIPrefixController.attach(URIPrefixController.address).connect(owner); + const uriPrefixController = await ethers.getContractAt( + ArtifactName.URIPrefixController, + URIPrefixController.address, + owner, + ); if (!(await uriPrefixController.isWhitelisted(MintingManager.address))) { await uriPrefixController.addWhitelisted(MintingManager.address); @@ -328,7 +328,7 @@ const configureCNSTask = { // Set tokenURI prefix only for Sandbox if (isSandbox) { - const mintingManager = ctx.artifacts.MintingManager.attach(MintingManager.address).connect(owner); + const mintingManager = await ethers.getContractAt(ArtifactName.MintingManager, MintingManager.address, owner); await mintingManager.setTokenURIPrefix('https://example.com/'); } }, @@ -352,14 +352,18 @@ const deployMMForwarderTask = { const { owner } = ctx.accounts; const MintingManager = unwrap(dependencies, ArtifactName.MintingManager); - const forwarder = await ctx.artifacts.MintingManagerForwarder.connect(owner).deploy(MintingManager.address); + const forwarder = await ethers.deployContract( + ArtifactName.MintingManagerForwarder, + [MintingManager.address], + owner, + ); - const mintingManager = ctx.artifacts.MintingManager.attach(MintingManager.address).connect(owner); + const mintingManager = await ethers.getContractAt(ArtifactName.MintingManager, MintingManager.address, owner); - await mintingManager.setForwarder(forwarder.address); + await mintingManager.setForwarder(await forwarder.getAddress()); await ctx.saveForwarderConfig(UnsContractName.MintingManager, forwarder); - await forwarder.deployTransaction.wait(); - await verify(ctx, forwarder.address, [MintingManager.address]); + await forwarder.waitForDeployment(); + await verify(ctx, await forwarder.getAddress(), [MintingManager.address]); }, ensureDependencies: (ctx: Deployer, config?: NsNetworkConfig): DependenciesMap => { @@ -375,13 +379,16 @@ const deployUNSOperatorTask: Task = { run: async (ctx: Deployer) => { const { owner } = ctx.accounts; - const unsOperator = await upgrades.deployProxy(ctx.artifacts.UNSOperator.connect(owner), []); - await unsOperator.deployTransaction.wait(); + const unsOperator = await upgrades.deployProxy( + await ethers.getContractFactory(ArtifactName.UNSOperator, owner), + [], + ); + await unsOperator.waitForDeployment(); const proxyAdmin = await upgrades.admin.getInstance(); await ctx.saveContractConfig(UnsContractName.ProxyAdmin, proxyAdmin); - const unsOperatorImpl = await proxyAdmin.callStatic.getProxyImplementation(unsOperator.address); + const unsOperatorImpl = await proxyAdmin.getProxyImplementation.staticCall(unsOperator.address); await ctx.saveContractConfig(UnsContractName.UNSOperator, unsOperator, unsOperatorImpl); await verify(ctx, unsOperatorImpl, []); }, @@ -402,23 +409,23 @@ const deployZilliqaRecoverTask: Task = { run: async (ctx: Deployer, dependencies: DependenciesMap) => { const { owner } = ctx.accounts; const [UNSRegistry, MintingManager] = unwrapDependencies(dependencies, [ - ArtifactName.UNSRegistry, - ArtifactName.MintingManager, + UnsContractName.UNSRegistry, + UnsContractName.MintingManager, ]); - const zilliqaRecover = await upgrades.deployProxy(ctx.artifacts.ZilliqaRecover.connect(owner), [ - UNSRegistry?.address, - MintingManager?.address, - ]); - await zilliqaRecover.deployTransaction.wait(); + const zilliqaRecover = await deployProxy( + await ethers.getContractFactory(ArtifactName.ZilliqaRecover, owner), + [UNSRegistry.address, MintingManager.address], + ); if (isSandbox) { - const mintingManager = ctx.artifacts.MintingManager.attach(MintingManager.address).connect(owner); - await mintingManager.functions.addMinter(zilliqaRecover.address); + const mintingManager = await ethers.getContractAt(ArtifactName.MintingManager, MintingManager.address, owner); + await mintingManager.addMinter(await zilliqaRecover.getAddress()); } const proxyAdmin = await upgrades.admin.getInstance(); - const zilliqaRecoverImpl = await proxyAdmin.callStatic.getProxyImplementation(zilliqaRecover.address); + const zilliqaRecoverImpl = await proxyAdmin.getProxyImplementation.staticCall(await zilliqaRecover.getAddress()); + await ctx.saveContractConfig(UnsContractName.ZilliqaRecover, zilliqaRecover, zilliqaRecoverImpl, zilliqaRecover); await verify(ctx, zilliqaRecoverImpl, []); }, @@ -436,13 +443,16 @@ const upgradeUNSRegistryTask: Task = { run: async (ctx: Deployer, dependencies: DependenciesMap) => { const UNSRegistry = unwrap(dependencies, ArtifactName.UNSRegistry); - const unsRegistry = await upgrades.upgradeProxy(UNSRegistry.address, ctx.artifacts.UNSRegistry); - await unsRegistry.deployTransaction.wait(); + const unsRegistry = await upgrades.upgradeProxy( + UNSRegistry.address, + await ethers.getContractFactory(ArtifactName.UNSRegistry), + ); + await unsRegistry.waitForDeployment(); const proxyAdmin = await upgrades.admin.getInstance(); await ctx.saveContractConfig(UnsContractName.ProxyAdmin, proxyAdmin); - const unsRegistryImpl = await proxyAdmin.callStatic.getProxyImplementation(unsRegistry.address); + const unsRegistryImpl = await proxyAdmin.getProxyImplementation.staticCall(unsRegistry.address); await ctx.saveContractConfig(UnsContractName.UNSRegistry, unsRegistry, unsRegistryImpl, unsRegistry); await verify(ctx, unsRegistryImpl, []); }, @@ -461,13 +471,16 @@ const upgradeMintingManagerTask: Task = { run: async (ctx: Deployer, dependencies: DependenciesMap) => { const MintingManager = unwrap(dependencies, ArtifactName.MintingManager); - const mintingManager = await upgrades.upgradeProxy(MintingManager.address, ctx.artifacts.MintingManager); - await mintingManager.deployTransaction.wait(); + const mintingManager = await upgrades.upgradeProxy( + MintingManager.address, + await ethers.getContractFactory(ArtifactName.MintingManager), + ); + await mintingManager.waitForDeployment(); const proxyAdmin = await upgrades.admin.getInstance(); await ctx.saveContractConfig(UnsContractName.ProxyAdmin, proxyAdmin); - const mintingManagerImpl = await proxyAdmin.callStatic.getProxyImplementation(mintingManager.address); + const mintingManagerImpl = await proxyAdmin.getProxyImplementation.staticCall(mintingManager.address); await ctx.saveContractConfig(UnsContractName.MintingManager, mintingManager, mintingManagerImpl); await verify(ctx, mintingManagerImpl, []); }, @@ -486,15 +499,17 @@ const upgradeProxyReaderTask: Task = { run: async (ctx: Deployer, dependencies: DependenciesMap) => { const ProxyReader = unwrap(dependencies, ArtifactName.ProxyReader); - const proxyReader = await upgrades.upgradeProxy(ProxyReader.address, ctx.artifacts.ProxyReader, { - unsafeAllow: ['delegatecall'], - }); - await proxyReader.deployTransaction.wait(); + const proxyReader = await upgrades.upgradeProxy( + ProxyReader.address, + await ethers.getContractFactory(ArtifactName.ProxyReader), + { unsafeAllow: ['delegatecall'] }, + ); + await proxyReader.waitForDeployment(); const proxyAdmin = await upgrades.admin.getInstance(); await ctx.saveContractConfig(UnsContractName.ProxyAdmin, proxyAdmin); - const proxyReaderImpl = await proxyAdmin.callStatic.getProxyImplementation(proxyReader.address); + const proxyReaderImpl = await proxyAdmin.getProxyImplementation.staticCall(proxyReader.address); await ctx.saveContractConfig(UnsContractName.ProxyReader, proxyReader, proxyReaderImpl); await verify(ctx, proxyReaderImpl, []); @@ -513,13 +528,16 @@ const upgradeUNSOperatorTask: Task = { run: async (ctx: Deployer, dependencies: DependenciesMap) => { const UNSOperator = unwrap(dependencies, ArtifactName.UNSOperator); - const unsOperator = await upgrades.upgradeProxy(UNSOperator.address, ctx.artifacts.UNSOperator); - await unsOperator.deployTransaction.wait(); + const unsOperator = await upgrades.upgradeProxy( + UNSOperator.address, + await ethers.getContractFactory(ArtifactName.UNSOperator), + ); + await unsOperator.waitForDeployment(); const proxyAdmin = await upgrades.admin.getInstance(); await ctx.saveContractConfig(UnsContractName.ProxyAdmin, proxyAdmin); - const unsOperatorImpl = await proxyAdmin.callStatic.getProxyImplementation(unsOperator.address); + const unsOperatorImpl = await proxyAdmin.getProxyImplementation.staticCall(unsOperator.address); await ctx.saveContractConfig(UnsContractName.UNSOperator, unsOperator, unsOperatorImpl); await verify(ctx, unsOperatorImpl, []); @@ -543,20 +561,24 @@ const proposeUNSRegistryTask: Task = { throw new Error('Version parameter is not provided'); } - if(!ctx.multisig) { + if (!ctx.multisig) { throw new Error('Multisig address is not provided'); } ctx.log('Preparing proposal...'); - const proposal = await defender.proposeUpgrade(UNSRegistry.address, ctx.artifacts.UNSRegistry, { - title: `Propose UNSRegistry to v${version}`, - multisig: ctx.multisig, - unsafeAllow: ['delegatecall'], - }); + const proposal = await defender.proposeUpgrade( + UNSRegistry.address, + await ethers.getContractFactory(ArtifactName.UNSRegistry), + { + title: `Propose UNSRegistry to v${version}`, + multisig: ctx.multisig, + unsafeAllow: ['delegatecall'], + }, + ); if (proposal.metadata?.newImplementationAddress) { await ctx.saveContractConfig( UnsContractName.UNSRegistry, - ctx.artifacts.UNSRegistry.attach(UNSRegistry.address), + await ethers.getContractAt(ArtifactName.UNSRegistry, UNSRegistry.address), proposal.metadata.newImplementationAddress, ); await verify(ctx, proposal.metadata.newImplementationAddress, []); @@ -582,19 +604,24 @@ const proposeMintingManagerTask: Task = { throw new Error('Version parameter is not provided'); } - if(!ctx.multisig) { + if (!ctx.multisig) { throw new Error('Multisig address is not provided'); } ctx.log('Preparing proposal...'); - const proposal = await defender.proposeUpgrade(MintingManager.address, ctx.artifacts.MintingManager, { - title: `Propose MintingManager to v${version}`, - multisig: ctx.multisig, - }); + const proposal = await defender.proposeUpgrade( + MintingManager.address, + await ethers.getContractFactory(ArtifactName.MintingManager), + { + title: `Propose MintingManager to v${version}`, + multisig: ctx.multisig, + }, + ); + if (proposal.metadata?.newImplementationAddress) { await ctx.saveContractConfig( UnsContractName.MintingManager, - ctx.artifacts.MintingManager.attach(MintingManager.address), + await ethers.getContractAt(ArtifactName.MintingManager, MintingManager.address), proposal.metadata.newImplementationAddress, ); await verify(ctx, proposal.metadata.newImplementationAddress, []); @@ -620,20 +647,24 @@ const proposeProxyReaderTask: Task = { throw new Error('Version parameter is not provided'); } - if(!ctx.multisig) { + if (!ctx.multisig) { throw new Error('Multisig address is not provided'); } ctx.log('Preparing proposal...'); - const proposal = await defender.proposeUpgrade(ProxyReader.address, ctx.artifacts.ProxyReader, { - title: `Propose ProxyReader to v${version}`, - multisig: ctx.multisig, - unsafeAllow: ['delegatecall'], - }); + const proposal = await defender.proposeUpgrade( + ProxyReader.address, + await ethers.getContractFactory(ArtifactName.ProxyReader), + { + title: `Propose ProxyReader to v${version}`, + multisig: ctx.multisig, + unsafeAllow: ['delegatecall'], + }, + ); if (proposal.metadata?.newImplementationAddress) { await ctx.saveContractConfig( UnsContractName.ProxyReader, - ctx.artifacts.ProxyReader.attach(ProxyReader.address), + await ethers.getContractAt(ArtifactName.ProxyReader, ProxyReader.address), proposal.metadata.newImplementationAddress, ); await verify(ctx, proposal.metadata.newImplementationAddress, []); @@ -658,19 +689,19 @@ const deployPolygonPosBridgeTask: Task = { run: async (ctx: Deployer) => { const { owner } = ctx.accounts; - const stateSender = await ctx.artifacts.DummyStateSender.connect(owner).deploy(); - const checkpointManager = await ctx.artifacts[ArtifactName.CheckpointManager].connect(owner).deploy(); + const stateSender = await ethers.deployContract(ArtifactName.DummyStateSender, [], owner); + const checkpointManager = await ethers.deployContract(ArtifactName.CheckpointManager, [], owner); // deploy Predicate - const predicate = await ctx.artifacts.MintableERC721Predicate.connect(owner).deploy(); + const predicate = await ethers.deployContract(ArtifactName.MintableERC721Predicate, [], owner); await predicate.initialize(owner.address); await ctx.saveContractConfig(UnsContractName.MintableERC721Predicate, predicate); // deploy RootChainManager - const rootChainManager = await ctx.artifacts.RootChainManager.connect(owner).deploy(); + const rootChainManager = await ethers.deployContract(ArtifactName.RootChainManager, [], owner); await rootChainManager.initialize(owner.address); - await rootChainManager.setCheckpointManager(checkpointManager.address); - await rootChainManager.setStateSender(stateSender.address); + await rootChainManager.setCheckpointManager(await checkpointManager.getAddress()); + await rootChainManager.setStateSender(await stateSender.getAddress()); await ctx.saveContractConfig(UnsContractName.RootChainManager, rootChainManager); }, ensureDependencies: () => ({}), @@ -683,19 +714,23 @@ const configurePolygonPosBridgeTask: Task = { const { owner } = ctx.accounts; const [UNSRegistry, MintableERC721Predicate, RootChainManager] = unwrapDependencies(dependencies, [ - ArtifactName.UNSRegistry, - ArtifactName.MintableERC721Predicate, - ArtifactName.RootChainManager, + UnsContractName.UNSRegistry, + UnsContractName.MintableERC721Predicate, + UnsContractName.RootChainManager, ]); - const rootChainManager = ctx.artifacts.RootChainManager.attach(RootChainManager.address).connect(owner); + const rootChainManager = await ethers.getContractAt(ArtifactName.RootChainManager, RootChainManager.address, owner); - const tokenType = utils.keccak256(UNSRegistry.address); + const tokenType = keccak256(UNSRegistry.address); await rootChainManager.registerPredicate(tokenType, MintableERC721Predicate.address); await rootChainManager.mapToken(UNSRegistry.address, UNSRegistry.address, tokenType); - const predicate = ctx.artifacts.MintableERC721Predicate.attach(MintableERC721Predicate.address).connect(owner); - await predicate.grantRole(await predicate.MANAGER_ROLE(), rootChainManager.address); + const predicate = await ethers.getContractAt( + ArtifactName.MintableERC721Predicate, + MintableERC721Predicate.address, + owner, + ); + await predicate.grantRole(await predicate.MANAGER_ROLE(), await rootChainManager.getAddress()); }, ensureDependencies: (ctx: Deployer, config?: NsNetworkConfig) => { config = merge(ctx.getDeployConfig(), config); @@ -716,10 +751,10 @@ const deployDotCoinBurnerTask: Task = { const { owner } = ctx.accounts; const UNSRegistry = unwrap(dependencies, ArtifactName.UNSRegistry); - const dotCoinBurner = await ctx.artifacts.DotCoinBurner.connect(owner).deploy(UNSRegistry.address); + const dotCoinBurner = await ethers.deployContract(ArtifactName.DotCoinBurner, [UNSRegistry.address], owner); await ctx.saveContractConfig(UnsContractName.DotCoinBurner, dotCoinBurner); - await dotCoinBurner.deployTransaction.wait(); - await verify(ctx, dotCoinBurner.address, [UNSRegistry.address]); + await dotCoinBurner.waitForDeployment(); + await verify(ctx, await dotCoinBurner.getAddress(), [UNSRegistry.address]); }, ensureDependencies: (ctx: Deployer, config?: NsNetworkConfig) => { config = merge(ctx.getDeployConfig(), config); @@ -734,25 +769,27 @@ const prepareProxyReaderTask: Task = { run: async (ctx: Deployer, dependencies: DependenciesMap) => { const ProxyReader = unwrap(dependencies, ArtifactName.ProxyReader); - const newImplementationAddr = (await upgrades.prepareUpgrade(ProxyReader.address, ctx.artifacts.ProxyReader, { - unsafeAllow: ['delegatecall'], - })) as string; + const newImplementationAddr = (await upgrades.prepareUpgrade( + ProxyReader.address, + await ethers.getContractFactory(ArtifactName.ProxyReader), + { unsafeAllow: ['delegatecall'] }, + )) as string; ctx.log('Deployed ProxyReader implementation: ', newImplementationAddr); - if (newImplementationAddr) { - await ctx.saveContractConfig( - UnsContractName.ProxyReader, - ctx.artifacts.ProxyReader.attach(ProxyReader.address), - newImplementationAddr, - ); - await verify(ctx, newImplementationAddr, []); + if (!newImplementationAddr) { + ctx.log('Implementation not deployed... Skipping'); + return; } + const proxyReader = await ethers.getContractAt(ArtifactName.ProxyReader, ProxyReader.address); + + await ctx.saveContractConfig(UnsContractName.ProxyReader, proxyReader, newImplementationAddr); + await verify(ctx, newImplementationAddr, []); const { owner } = ctx.accounts; - const callData = ctx.artifacts.ProxyReader.interface.encodeFunctionData('setOwner(address)', [owner.address]); + const callData = proxyReader.interface.encodeFunctionData('setOwner(address)', [owner.address]); - console.log(`setOwner encoded data(owner ${newImplementationAddr}): ${callData}`); + ctx.log(`setOwner encoded data(owner ${newImplementationAddr}): ${callData}`); }, ensureDependencies: (ctx: Deployer, config?: NsNetworkConfig) => { config = merge(ctx.getDeployConfig(), config); @@ -768,70 +805,96 @@ const deployENSTask = { run: async (ctx: Deployer) => { const { owner } = ctx.accounts; - const ens = await ctx.artifacts[ArtifactName.ENSRegistry].connect(owner).deploy(); + const ens = await ethers.deployContract(ArtifactName.ENSRegistry, [], owner); await ctx.saveContractConfig(EnsContractName.ENSRegistry, ens); - const baseRegistrar = await ctx.artifacts[ArtifactName.BaseRegistrarImplementation] - .connect(owner) - .deploy(ens.address, namehash('eth')); + const baseRegistrar = await ethers.deployContract( + ArtifactName.BaseRegistrarImplementation, + [await ens.getAddress(), namehash('eth')], + owner, + ); await ctx.saveContractConfig(EnsContractName.BaseRegistrarImplementation, baseRegistrar); - const reverseRegistrar = await ctx.artifacts[ArtifactName.ReverseRegistrar].connect(owner).deploy(ens.address); + const reverseRegistrar = await ethers.deployContract( + ArtifactName.ReverseRegistrar, + [await ens.getAddress()], + owner, + ); await ctx.saveContractConfig(EnsContractName.ReverseRegistrar, reverseRegistrar); await ens.setSubnodeOwner(ZERO_WORD, notNullSha('reverse'), await owner.getAddress()); - await ens.setSubnodeOwner(namehash('reverse'), notNullSha('addr'), reverseRegistrar.address); + await ens.setSubnodeOwner(namehash('reverse'), notNullSha('addr'), await reverseRegistrar.getAddress()); - const nameWrapper = await ctx.artifacts[ArtifactName.NameWrapper] - .connect(owner) - .deploy(ens.address, baseRegistrar.address, await owner.getAddress()); + const nameWrapper = await ethers.deployContract( + ArtifactName.NameWrapper, + [await ens.getAddress(), await baseRegistrar.getAddress(), await owner.getAddress()], + owner, + ); await ctx.saveContractConfig(EnsContractName.NameWrapper, nameWrapper); - await ens.setSubnodeOwner(ZERO_WORD, notNullSha('eth'), baseRegistrar.address); + await ens.setSubnodeOwner(ZERO_WORD, notNullSha('eth'), await baseRegistrar.getAddress()); - const dummyOracle = await ctx.artifacts[ArtifactName.DummyOracle].connect(owner).deploy('100000000'); + const dummyOracle = await ethers.deployContract(ArtifactName.DummyOracle, ['100000000'], owner); await ctx.saveContractConfig(EnsContractName.DummyOracle, dummyOracle); - const priceOracle = await ctx.artifacts[ArtifactName.StablePriceOracle] - .connect(owner) - .deploy(dummyOracle.address, [0, 0, 4, 2, 1]); + const priceOracle = await ethers.deployContract( + ArtifactName.StablePriceOracle, + [await dummyOracle.getAddress(), [0, 0, 4, 2, 1]], + owner, + ); await ctx.saveContractConfig(EnsContractName.StablePriceOracle, priceOracle); - const controller = await ctx.artifacts[ArtifactName.ETHRegistrarController] - .connect(owner) - .deploy( - baseRegistrar.address, - priceOracle.address, - 600, - 86400, - reverseRegistrar.address, - nameWrapper.address, - ens.address, - ); + const controller = await ethers.deployContract(ArtifactName.ETHRegistrarController, [ + await baseRegistrar.getAddress(), + await priceOracle.getAddress(), + 600, + 86400, + await reverseRegistrar.getAddress(), + await nameWrapper.getAddress(), + await ens.getAddress(), + ]); await ctx.saveContractConfig(EnsContractName.ETHRegistrarController, controller); - const legacyController = await ctx.artifacts[ArtifactName.LegacyETHRegistrarController] - .connect(owner) - .deploy(baseRegistrar.address, priceOracle.address, 600, 86400); + const legacyController = await ethers.deployContract( + ArtifactName.LegacyETHRegistrarController, + [await baseRegistrar.getAddress(), await priceOracle.getAddress(), 600, 86400], + owner, + ); await ctx.saveContractConfig(EnsContractName.LegacyETHRegistrarController, legacyController); - await nameWrapper.setController(controller.address, true); - await nameWrapper.setController(legacyController.address, true); - await baseRegistrar.addController(nameWrapper.address); - await baseRegistrar.addController(controller.address); - await baseRegistrar.addController(legacyController.address); - await reverseRegistrar.setController(controller.address, true); - await reverseRegistrar.setController(legacyController.address, true); - const resolver = await ctx.artifacts[ArtifactName.PublicResolver] - .connect(owner) - .deploy(ens.address, nameWrapper.address, controller.address, reverseRegistrar.address); + await nameWrapper.setController(await controller.getAddress(), true); + await nameWrapper.setController(await legacyController.getAddress(), true); + await baseRegistrar.addController(await nameWrapper.getAddress()); + await baseRegistrar.addController(await controller.getAddress()); + await baseRegistrar.addController(await legacyController.getAddress()); + await reverseRegistrar.setController(await controller.getAddress(), true); + await reverseRegistrar.setController(await legacyController.getAddress(), true); + + const resolver = await ethers.deployContract( + ArtifactName.PublicResolver, + [ + await ens.getAddress(), + await nameWrapper.getAddress(), + await controller.getAddress(), + await reverseRegistrar.getAddress(), + ], + owner, + ); + await ctx.saveContractConfig(EnsContractName.PublicResolver, resolver); - const legacyResolver = await ctx.artifacts[ArtifactName.PublicResolver] - .connect(owner) - .deploy(ens.address, nameWrapper.address, controller.address, reverseRegistrar.address); - await ctx.saveContractLegacyAddresses(EnsContractName.PublicResolver, [legacyResolver.address]); - await reverseRegistrar.setDefaultResolver(resolver.address); - const legacyEnsRegistry = await ctx.artifacts[ArtifactName.LegacyENSRegistry].connect(owner).deploy(); + const legacyResolver = await ethers.deployContract( + ArtifactName.PublicResolver, + [ + await ens.getAddress(), + await nameWrapper.getAddress(), + await controller.getAddress(), + await reverseRegistrar.getAddress(), + ], + owner, + ); + await ctx.saveContractLegacyAddresses(EnsContractName.PublicResolver, [await legacyResolver.getAddress()]); + await reverseRegistrar.setDefaultResolver(await resolver.getAddress()); + const legacyEnsRegistry = await ethers.deployContract(ArtifactName.LegacyENSRegistry, [], owner); await legacyEnsRegistry.setSubnodeOwner(ZERO_WORD, notNullSha('eth'), await owner.getAddress()); await ctx.saveContractConfig(EnsContractName.LegacyENSRegistry, legacyEnsRegistry); @@ -847,36 +910,38 @@ const deployENSTask = { [ArtifactName.SHA1NSEC3Digest]: 1, }; const algorithmsAndDigests = { - [ArtifactName.RSASHA256Algorithm]: await ctx.artifacts[ArtifactName.RSASHA256Algorithm].connect(owner).deploy(), - [ArtifactName.DummyAlgorithm]: await ctx.artifacts[ArtifactName.DummyAlgorithm].connect(owner).deploy(), - [ArtifactName.SHA256Digest]: await ctx.artifacts[ArtifactName.SHA256Digest].connect(owner).deploy(), - [ArtifactName.SHA1Digest]: await ctx.artifacts[ArtifactName.SHA1Digest].connect(owner).deploy(), - [ArtifactName.SHA1NSEC3Digest]: await ctx.artifacts[ArtifactName.SHA1NSEC3Digest].connect(owner).deploy(), + [ArtifactName.RSASHA256Algorithm]: await ethers.deployContract(ArtifactName.RSASHA256Algorithm, [], owner), + [ArtifactName.DummyAlgorithm]: await ethers.deployContract(ArtifactName.DummyAlgorithm, [], owner), + [ArtifactName.SHA256Digest]: await ethers.deployContract(ArtifactName.SHA256Digest, [], owner), + [ArtifactName.SHA1Digest]: await ethers.deployContract(ArtifactName.SHA1Digest, [], owner), + [ArtifactName.SHA1NSEC3Digest]: await ethers.deployContract(ArtifactName.SHA1NSEC3Digest, [], owner), }; const rootTrustAnchors = // eslint-disable-next-line max-len '0x00002b000100000e1000244a5c080249aac11d7b6f6446702e54a1607371607a1a41855200fd2ce1cdde32f24e8fb500002b000100000e1000244f660802e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d'; - const dnssecOracle = await ctx.artifacts[ArtifactName.DNSSECImpl].connect(owner).deploy(rootTrustAnchors); + const dnssecOracle = await ethers.deployContract(ArtifactName.DNSSECImpl, [rootTrustAnchors], owner); for (const [algorithm, id] of Object.entries(algorithmsIds)) { - await dnssecOracle.setAlgorithm(id, algorithmsAndDigests[algorithm].address); + await dnssecOracle.setAlgorithm(id, await algorithmsAndDigests[algorithm].getAddress()); } for (const [digest, id] of Object.entries(digestsIds)) { - await dnssecOracle.setDigest(id, algorithmsAndDigests[digest].address); + await dnssecOracle.setDigest(id, await algorithmsAndDigests[digest].getAddress()); } for (const [nSecDigest, id] of Object.entries(nSecDigestsIds)) { - await dnssecOracle.setNSEC3Digest(id, algorithmsAndDigests[nSecDigest].address); + await dnssecOracle.setNSEC3Digest(id, await algorithmsAndDigests[nSecDigest].getAddress()); } await ctx.saveContractConfig(EnsContractName.DNSSECImpl, dnssecOracle); - const tldPublicSuffixList = await ctx.artifacts[ArtifactName.TLDPublicSuffixList].connect(owner).deploy(); - const dnsRegistrar = await ctx.artifacts[ArtifactName.DNSRegistrar] - .connect(owner) - .deploy(dnssecOracle.address, tldPublicSuffixList.address, ens.address); - const root = await ctx.artifacts[ArtifactName.Root].connect(owner).deploy(ens.address); + const tldPublicSuffixList = await ethers.deployContract(ArtifactName.TLDPublicSuffixList, [], owner); + const dnsRegistrar = await ethers.deployContract(ArtifactName.DNSRegistrar, [ + await dnssecOracle.getAddress(), + await tldPublicSuffixList.getAddress(), + await ens.getAddress(), + ]); + const root = await ethers.deployContract(ArtifactName.Root, [await ens.getAddress()], owner); await ctx.saveContractConfig(EnsContractName.Root, root); - await root.setController(dnsRegistrar.address, true); - await root.setController(owner.address, true); - await ens.setOwner(ZERO_WORD, root.address); + await root.setController(await dnsRegistrar.getAddress(), true); + await root.setController(await owner.getAddress(), true); + await ens.setOwner(ZERO_WORD, await root.getAddress()); await ctx.saveContractConfig(EnsContractName.DNSRegistrar, dnsRegistrar); }, ensureDependencies: () => ({}), @@ -889,22 +954,22 @@ const deployENSCustodyTask: Task = { const { owner } = ctx.accounts; const [ETHRegistrarController, NameWrapper, BaseRegistrarImplementation] = unwrapDependencies(dependencies, [ - ArtifactName.ETHRegistrarController, - ArtifactName.NameWrapper, - ArtifactName.BaseRegistrarImplementation, + EnsContractName.ETHRegistrarController, + EnsContractName.NameWrapper, + EnsContractName.BaseRegistrarImplementation, ]); - const custody = await upgrades.deployProxy(ctx.artifacts.ENSCustody.connect(owner), [ + const custody = await deployProxy(await ethers.getContractFactory(ArtifactName.ENSCustody, owner), [ ETHRegistrarController.address, NameWrapper.address, BaseRegistrarImplementation.address, ]); - await custody.deployTransaction.wait(); + await custody.waitForDeployment(); const proxyAdmin = await upgrades.admin.getInstance(); await ctx.saveContractConfig(UnsContractName.ProxyAdmin, proxyAdmin); - const custodyImpl = await proxyAdmin.callStatic.getProxyImplementation(custody.address); + const custodyImpl = await proxyAdmin.getProxyImplementation.staticCall(await custody.getAddress()); await ctx.saveContractConfig(EnsContractName.ENSCustody, custody, custodyImpl, custody); await verify(ctx, custodyImpl, []); @@ -943,19 +1008,24 @@ const proposeENSCustodyTask: Task = { throw new Error('Version parameter is not provided'); } - if(!ctx.multisig) { + if (!ctx.multisig) { throw new Error('Multisig address is not provided'); } ctx.log('Preparing proposal...'); - const proposal = await defender.proposeUpgrade(ENSCustody.address, ctx.artifacts.ENSCustody, { - title: `Propose ENSCustody to v${version}`, - multisig: ctx.multisig, - }); + const proposal = await defender.proposeUpgrade( + ENSCustody.address, + await ethers.getContractFactory(ArtifactName.ENSCustody), + { + title: `Propose ENSCustody to v${version}`, + multisig: ctx.multisig, + }, + ); + if (proposal.metadata?.newImplementationAddress) { await ctx.saveContractConfig( EnsContractName.ENSCustody, - ctx.artifacts.ENSCustody.attach(ENSCustody.address), + await ethers.getContractAt(ArtifactName.ENSCustody, ENSCustody.address), proposal.metadata.newImplementationAddress, ); await verify(ctx, proposal.metadata.newImplementationAddress, []); @@ -980,10 +1050,9 @@ const fundENSCustodyTask: Task = { throw new Error('This task is only available for sandbox'); } - const [ENSCustody] = unwrapDependencies(dependencies, [ArtifactName.ENSCustody]); - const custody = ctx.artifacts.MintingManager.attach(ENSCustody.address); + const [ENSCustody] = unwrapDependencies(dependencies, [EnsContractName.ENSCustody]); - await owner.sendTransaction({ to: custody.address, value: utils.parseEther('10') }); + await owner.sendTransaction({ to: ENSCustody.address, value: parseEther('10') }); }, ensureDependencies: (ctx: Deployer, config?: NsNetworkConfig): DependenciesMap => { config = merge(ctx.getDeployConfig(), config); diff --git a/src/types.ts b/src/types.ts index 60c32a44..774c7e38 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,22 +1,27 @@ + +/** + * values are paths the specific contracts + */ export enum ArtifactName { CNSRegistry = 'CNSRegistry', CNSRegistryForwarder = 'CNSRegistryForwarder', SignatureController = 'SignatureController', MintingController = 'MintingController', URIPrefixController = 'URIPrefixController', - Resolver = 'Resolver', + Resolver = 'dot-crypto/contracts/Resolver.sol:Resolver', ResolverForwarder = 'ResolverForwarder', UNSRegistry = 'UNSRegistry', MintingManager = 'MintingManager', UNSOperator = 'UNSOperator', MintingManagerForwarder = 'MintingManagerForwarder', - ProxyReader = 'ProxyReader', + ProxyReader = 'contracts/ProxyReader.sol:ProxyReader', DummyStateSender = 'DummyStateSender', CheckpointManager = 'SimpleCheckpointManager', MintableERC721Predicate = 'MintableERC721Predicate', RootChainManager = 'RootChainManager', DotCoinBurner = 'DotCoinBurner', ZilliqaRecover = 'ZilliqaRecover', + // ENS ENSRegistry = 'ENSRegistry', BaseRegistrarImplementation = 'BaseRegistrarImplementation', diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 00000000..4c1e5ae3 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,24 @@ +import { sha3 } from 'web3-utils'; +import type { ContractConfig, ContractName, DependenciesMap } from './types'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function unwrap (object: object, key: string): any { + if (!object[key]) { + throw new Error(`Unwrap: cannot find key ${key} on object ${object.toString()}`); + } + + return object[key]; +} + +export function unwrapDependencies (dependencies: DependenciesMap, keys: ContractName[]): ContractConfig[] { + return keys.map((key) => unwrap(dependencies, key)); +} + +export function notNullSha (value: string) { + const res = sha3(value); + if (!res) { + throw new Error('notNullSha: SHA returns null'); + } + + return res; +} diff --git a/test/ChildRegistry.test.ts b/test/ChildRegistry.test.ts index d7fb568a..ba4a6df6 100644 --- a/test/ChildRegistry.test.ts +++ b/test/ChildRegistry.test.ts @@ -1,15 +1,12 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { utils } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { AbiCoder, keccak256 } from 'ethers'; import { MintingManager, UNSRegistry } from '../types/contracts'; import { RootChainManager } from '../types/contracts/@maticnetwork/pos-portal/RootChainManager.sol'; import { MintableERC721Predicate } from '../types/contracts/@maticnetwork/pos-portal/MintableERC721Predicate.sol'; import { DummyStateSender } from '../types/contracts/@maticnetwork/pos-portal/DummyStateSender.sol'; -import { - MintingManager__factory, - UNSRegistry__factory, -} from '../types/factories/contracts'; +import { MintingManager__factory, UNSRegistry__factory } from '../types/factories/contracts'; import { DummyStateSender__factory } from '../types/factories/contracts/@maticnetwork/pos-portal/DummyStateSender.sol'; import { MintableERC721Predicate__factory } from '../types/factories/contracts/@maticnetwork/pos-portal/MintableERC721Predicate.sol'; import { RootChainManager__factory } from '../types/factories/contracts/@maticnetwork/pos-portal/RootChainManager.sol'; @@ -28,58 +25,53 @@ describe('ChildRegistry', () => { predicateOwner: SignerWithAddress, owner: SignerWithAddress; - const abiCoder = new utils.AbiCoder(); + const abiCoder = new AbiCoder(); before(async () => { - [registryOwner, rcmOwner, predicateOwner, owner] = - await ethers.getSigners(); + [registryOwner, rcmOwner, predicateOwner, owner] = await ethers.getSigners(); - l1UnsRegistry = ( - await new UNSRegistry__factory(registryOwner).deploy() - ).connect(registryOwner); + l1UnsRegistry = (await new UNSRegistry__factory(registryOwner).deploy()).connect(registryOwner); mintingManager = await new MintingManager__factory(registryOwner).deploy(); - l2UnsRegistry = ( - await new UNSRegistry__factory(registryOwner).deploy() - ).connect(registryOwner); + l2UnsRegistry = (await new UNSRegistry__factory(registryOwner).deploy()).connect(registryOwner); // deploy state sender stateSender = await new DummyStateSender__factory(registryOwner).deploy(); // deploy and init predicate - predicate = ( - await new MintableERC721Predicate__factory(registryOwner).deploy() - ).connect(predicateOwner); + predicate = (await new MintableERC721Predicate__factory(registryOwner).deploy()).connect(predicateOwner); await predicate.initialize(predicateOwner.address); // deploy and setup root chain manager - rootChainManager = ( - await new RootChainManager__factory(registryOwner).deploy() - ).connect(rcmOwner); + rootChainManager = (await new RootChainManager__factory(registryOwner).deploy()).connect(rcmOwner); await rootChainManager.initialize(rcmOwner.address); - await rootChainManager.setStateSender(stateSender.address); - await rootChainManager.registerPredicate( - utils.keccak256(l1UnsRegistry.address), - predicate.address, - ); + await rootChainManager.setStateSender(await stateSender.getAddress()); + await rootChainManager.registerPredicate(keccak256(await l1UnsRegistry.getAddress()), await predicate.getAddress()); await rootChainManager.mapToken( - l1UnsRegistry.address, - l2UnsRegistry.address, - utils.keccak256(l1UnsRegistry.address), - ); - await predicate.grantRole( - await predicate.MANAGER_ROLE(), - rootChainManager.address, + await l1UnsRegistry.getAddress(), + await l2UnsRegistry.getAddress(), + keccak256(await l1UnsRegistry.getAddress()), ); + await predicate.grantRole(await predicate.MANAGER_ROLE(), await rootChainManager.getAddress()); // post-configuration - await l1UnsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, rootChainManager.address, ZERO_ADDRESS); + await l1UnsRegistry.initialize( + await mintingManager.getAddress(), + ZERO_ADDRESS, + await rootChainManager.getAddress(), + ZERO_ADDRESS, + ); - await l2UnsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, registryOwner.address); + await l2UnsRegistry.initialize( + await mintingManager.getAddress(), + ZERO_ADDRESS, + ZERO_ADDRESS, + await registryOwner.getAddress(), + ); await mintingManager.initialize( - l2UnsRegistry.address, + await l2UnsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -93,9 +85,7 @@ describe('ChildRegistry', () => { let tempL2UnsRegistry: UNSRegistry; beforeEach(async () => { - tempL2UnsRegistry = ( - await new UNSRegistry__factory(registryOwner).deploy() - ).connect(registryOwner); + tempL2UnsRegistry = (await new UNSRegistry__factory(registryOwner).deploy()).connect(registryOwner); await tempL2UnsRegistry.initialize(registryOwner.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); }); @@ -103,10 +93,7 @@ describe('ChildRegistry', () => { const tokenId = await tempL2UnsRegistry.namehash(['l2-te1', 'crypto']); await expect( - tempL2UnsRegistry.deposit( - owner.address, - abiCoder.encode(['uint256'], [tokenId]), - ), + tempL2UnsRegistry.deposit(owner.address, abiCoder.encode(['uint256'], [tokenId])), ).to.be.revertedWith('Registry: INSUFFICIENT_PERMISSIONS'); }); }); @@ -115,12 +102,7 @@ describe('ChildRegistry', () => { it('should deposit one token', async () => { const tokenId = await l2UnsRegistry.namehash(['l2-aq1', 'crypto']); - await expect( - l2UnsRegistry.deposit( - owner.address, - abiCoder.encode(['uint256'], [tokenId]), - ), - ) + await expect(l2UnsRegistry.deposit(owner.address, abiCoder.encode(['uint256'], [tokenId]))) .to.emit(l2UnsRegistry, 'Transfer') .withArgs(ZERO_ADDRESS, owner.address, tokenId); expect(await l2UnsRegistry.ownerOf(tokenId)).to.be.equal(owner.address); @@ -130,12 +112,7 @@ describe('ChildRegistry', () => { const tokenId1 = await l2UnsRegistry.namehash(['l2-eq1', 'crypto']); const tokenId2 = await l2UnsRegistry.namehash(['l2-eq2', 'crypto']); - await expect( - l2UnsRegistry.deposit( - owner.address, - abiCoder.encode(['uint256[]'], [[tokenId1, tokenId2]]), - ), - ) + await expect(l2UnsRegistry.deposit(owner.address, abiCoder.encode(['uint256[]'], [[tokenId1, tokenId2]]))) .to.emit(l2UnsRegistry, 'Transfer') .withArgs(ZERO_ADDRESS, owner.address, tokenId1); expect(await l2UnsRegistry.ownerOf(tokenId1)).to.be.equal(owner.address); diff --git a/test/DotCoinBurner.test.ts b/test/DotCoinBurner.test.ts index 23b53cc0..7500007c 100644 --- a/test/DotCoinBurner.test.ts +++ b/test/DotCoinBurner.test.ts @@ -1,17 +1,12 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { solidityKeccak256 } from 'ethers/lib/utils'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { BigNumber } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { solidityPackedKeccak256 } from 'ethers'; import { DotCoinBurner__factory, UNSRegistry__factory } from '../types/factories/contracts'; import { DotCoinBurner, UNSRegistry } from '../types/contracts'; -import { - TLD, - DEAD_ADDRESS, - ZERO_ADDRESS, - EXPIRABLE_TLDS, -} from './helpers/constants'; +import { TLD, DEAD_ADDRESS, ZERO_ADDRESS, EXPIRABLE_TLDS } from './helpers/constants'; import { mintDomain } from './helpers/registry'; +import { getLatestBlockTimestamp } from './helpers/utils'; describe('DotCoinBurner', () => { let unsRegistry: UNSRegistry, dotCoinBurner: DotCoinBurner; @@ -29,15 +24,15 @@ describe('DotCoinBurner', () => { beforeEach(async () => { // deploy Dot Coin Burner - dotCoinBurner = await new DotCoinBurner__factory(coinbase).deploy(unsRegistry.address); + dotCoinBurner = await new DotCoinBurner__factory(coinbase).deploy(await unsRegistry.getAddress()); }); it('should emit BatchCompleted event', async () => { - const mintedTokenIds: BigNumber[] = []; + const mintedTokenIds: bigint[] = []; const labelHashes: string[] = []; for (let i = 0; i < 10; i++) { const label = `batch-completed-${i}`; - labelHashes.push(solidityKeccak256(['string'], [label])); + labelHashes.push(solidityPackedKeccak256(['string'], [label])); mintedTokenIds.push( await mintDomain({ unsRegistry, @@ -49,7 +44,7 @@ describe('DotCoinBurner', () => { expect(mintedTokenIds).lengthOf(10); const firstTokenId = mintedTokenIds[0]; const lastTokenId = mintedTokenIds[mintedTokenIds.length - 1]; - await unsRegistry.connect(accounts[0]).setApprovalForAll(dotCoinBurner.address, true); + await unsRegistry.connect(accounts[0]).setApprovalForAll(await dotCoinBurner.getAddress(), true); await expect(dotCoinBurner.burnAll(labelHashes)) .to.emit(dotCoinBurner, 'BatchCompleted') .withArgs(firstTokenId, lastTokenId); @@ -57,29 +52,28 @@ describe('DotCoinBurner', () => { it('should emit correct BatchCompleted event for 1 domain', async () => { const label = 'batch-completed-single-domain'; - const labelHash = solidityKeccak256(['string'], [label]); + const labelHash = solidityPackedKeccak256(['string'], [label]); const mintedTokenId = await mintDomain({ unsRegistry, owner: accounts[0], labels: [label, 'coin'] }); - await unsRegistry.connect(accounts[0]).setApprovalForAll(dotCoinBurner.address, true); + await unsRegistry.connect(accounts[0]).setApprovalForAll(await dotCoinBurner.getAddress(), true); await expect(dotCoinBurner.burnAll([labelHash])) .to.emit(dotCoinBurner, 'BatchCompleted') .withArgs(mintedTokenId, mintedTokenId); }); it('should not emit BatchCompleted event arguments are empty', async () => { - await unsRegistry.connect(accounts[0]).setApprovalForAll(dotCoinBurner.address, true); - await expect(dotCoinBurner.burnAll([])) - .not.to.emit(dotCoinBurner, 'BatchCompleted'); + await unsRegistry.connect(accounts[0]).setApprovalForAll(await dotCoinBurner.getAddress(), true); + await expect(dotCoinBurner.burnAll([])).not.to.emit(dotCoinBurner, 'BatchCompleted'); }); it('should burn all passed domains from multiple owners', async () => { - const mintedTokenIds: BigNumber[] = []; + const mintedTokenIds: bigint[] = []; const labelHashes: string[] = []; for (let i = 0; i < accounts.length; i++) { const label = `multiple-owners-${i}`; - labelHashes.push(solidityKeccak256(['string'], [label])); + labelHashes.push(solidityPackedKeccak256(['string'], [label])); const tokenId = await mintDomain({ unsRegistry, owner: accounts[i], labels: [label, 'coin'] }); mintedTokenIds.push(tokenId); - await unsRegistry.connect(accounts[i]).setApprovalForAll(dotCoinBurner.address, true); + await unsRegistry.connect(accounts[i]).setApprovalForAll(await dotCoinBurner.getAddress(), true); expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(accounts[i].address); } await dotCoinBurner.burnAll(labelHashes); @@ -91,64 +85,58 @@ describe('DotCoinBurner', () => { }); it('should fail if domain has incorrect extension', async () => { - await unsRegistry.setApprovalForAll(dotCoinBurner.address, true); + await unsRegistry.setApprovalForAll(await dotCoinBurner.getAddress(), true); expect(TLD).to.be.not.empty; - const latestBlock = await ethers.provider.getBlock('latest'); - for (const tokenId in TLD) { const extension = tokenId.toLowerCase(); const label = `incorrect-extension-${extension}`; - const labelHash = solidityKeccak256(['string'], [label]); + const labelHash = solidityPackedKeccak256(['string'], [label]); await mintDomain({ unsRegistry, owner: coinbase, labels: [label, extension], - expiry: EXPIRABLE_TLDS.includes(extension) ? latestBlock.timestamp + 60 * 60 * 24 : 0, + expiry: EXPIRABLE_TLDS.includes(extension) ? (await getLatestBlockTimestamp()) + 60 * 60 * 24 : 0, }); - await expect(dotCoinBurner.burnAll([labelHash])) - .to.be.revertedWith('ERC721: invalid token ID'); + await expect(dotCoinBurner.burnAll([labelHash])).to.be.revertedWith('ERC721: invalid token ID'); } }); it('should fail if domain is not approved to spend', async () => { const label = 'not-approved-domain-to-burn'; - const labelHash = solidityKeccak256(['string'], [label]); + const labelHash = solidityPackedKeccak256(['string'], [label]); await mintDomain({ unsRegistry, owner: accounts[0], labels: [label, 'coin'] }); - await expect(dotCoinBurner.burnAll([labelHash])) - .to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(dotCoinBurner.burnAll([labelHash])).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); }); it('should fail if 1 of multiple domains is not approved to spend', async () => { const labelHashes: string[] = []; for (let i = 0; i < accounts.length; i++) { const label = `one-of-five-is-not-approved-${i}`; - labelHashes.push(solidityKeccak256(['string'], [label])); + labelHashes.push(solidityPackedKeccak256(['string'], [label])); await mintDomain({ unsRegistry, owner: accounts[i], labels: [label, 'coin'] }); - await unsRegistry.connect(accounts[i]).setApprovalForAll(dotCoinBurner.address, true); + await unsRegistry.connect(accounts[i]).setApprovalForAll(await dotCoinBurner.getAddress(), true); } - await unsRegistry.connect(accounts[0]).setApprovalForAll(dotCoinBurner.address, false); - await expect(dotCoinBurner.burnAll(labelHashes)) - .to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await unsRegistry.connect(accounts[0]).setApprovalForAll(await dotCoinBurner.getAddress(), false); + await expect(dotCoinBurner.burnAll(labelHashes)).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); }); it('should allow calling burn method from any account', async () => { - const mintedTokenIds: BigNumber[] = []; + const mintedTokenIds: bigint[] = []; for (let i = 0; i < accounts.length; i++) { const label = `multiple-method-callers-${i}`; - const labelHash = solidityKeccak256(['string'], [label]); + const labelHash = solidityPackedKeccak256(['string'], [label]); const tokenId = await mintDomain({ unsRegistry, owner: accounts[i], labels: [label, 'coin'] }); mintedTokenIds.push(tokenId); - await unsRegistry.connect(accounts[i]).setApprovalForAll(dotCoinBurner.address, true); + await unsRegistry.connect(accounts[i]).setApprovalForAll(await dotCoinBurner.getAddress(), true); // Ensure that caller is different from domain owner await dotCoinBurner.connect(accounts[accounts.length - i - 1]).burnAll([labelHash]); } expect(mintedTokenIds).to.have.lengthOf(accounts.length); for (let i = 0; i < mintedTokenIds.length; i++) { - expect(await unsRegistry.ownerOf(mintedTokenIds[i])) - .to.be.equal(DEAD_ADDRESS); + expect(await unsRegistry.ownerOf(mintedTokenIds[i])).to.be.equal(DEAD_ADDRESS); } }); }); diff --git a/test/MintingManager.metatx.test.ts b/test/MintingManager.metatx.test.ts index 81bf7522..1927db3b 100644 --- a/test/MintingManager.metatx.test.ts +++ b/test/MintingManager.metatx.test.ts @@ -1,25 +1,23 @@ -import { ethers, network, upgrades } from 'hardhat'; +import { ethers, network } from 'hardhat'; import { expect } from 'chai'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { getBytes, parseEther, solidityPackedKeccak256 } from 'ethers'; import { MintingManager, UNSRegistry } from '../types/contracts'; import { MintingManagerForwarder } from '../types/contracts/metatx'; -import { - MintingManager__factory, - UNSRegistry__factory, -} from '../types/factories/contracts'; +import { MintingManager__factory, UNSRegistry__factory } from '../types/factories/contracts'; import { MintingManagerForwarder__factory } from '../types/factories/contracts/metatx'; import { ERC20Mock, ERC20Mock__factory } from '../types'; +import { deployProxy } from '../src/helpers'; import { buildExecuteFunc, ExecuteFunc } from './helpers/metatx'; import { ZERO_ADDRESS } from './helpers/constants'; +import { getLatestBlockTimestamp } from './helpers/utils'; describe('MintingManager (metatx)', () => { let unsRegistry: UNSRegistry, mintingManager: MintingManager, forwarder: MintingManagerForwarder, buildExecuteParams: ExecuteFunc; - let signers: SignerWithAddress[], - coinbase: SignerWithAddress, - receiver: SignerWithAddress; + let signers: SignerWithAddress[], coinbase: SignerWithAddress, receiver: SignerWithAddress; before(async () => { signers = await ethers.getSigners(); @@ -29,33 +27,23 @@ describe('MintingManager (metatx)', () => { beforeEach(async () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); - mintingManager = (await upgrades.deployProxy( - new MintingManager__factory(coinbase), - [], - { initializer: false }, - )) as MintingManager; - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + mintingManager = await deployProxy(new MintingManager__factory(coinbase), [], { initializer: false }); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); - forwarder = await new MintingManagerForwarder__factory(coinbase).deploy( - mintingManager.address, - ); + forwarder = await new MintingManagerForwarder__factory(coinbase).deploy(await mintingManager.getAddress()); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, - forwarder.address, + await forwarder.getAddress(), ); - await mintingManager.addMinter(coinbase.address); + await mintingManager.addMinter(await coinbase.getAddress()); await mintingManager.setTokenURIPrefix('/'); - buildExecuteParams = buildExecuteFunc( - mintingManager.interface, - mintingManager.address, - forwarder, - ); + buildExecuteParams = buildExecuteFunc(mintingManager.interface, await mintingManager.getAddress(), forwarder); }); it('should mint through forwarder', async () => { @@ -76,8 +64,7 @@ describe('MintingManager (metatx)', () => { const labels = ['test-qw123-expirable', 'com']; const tokenId = await unsRegistry.namehash(labels); - const latestBlock = await ethers.provider.getBlock('latest'); - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = (await getLatestBlockTimestamp()) + 24 * 60 * 60; const { req, signature } = await buildExecuteParams( 'issueExpirableWithRecords(address,string[],string[],string[],uint64,bool)', @@ -95,18 +82,10 @@ describe('MintingManager (metatx)', () => { it('should renew expirable through forwarder', async () => { const labels = ['test-qw123-expirable-renew', 'com']; const tokenId = await unsRegistry.namehash(labels); - const latestBlock = await ethers.provider.getBlock('latest'); - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = (await getLatestBlockTimestamp()) + 24 * 60 * 60; - await mintingManager.issueExpirableWithRecords( - receiver.address, - labels, - [], - [], - expiry, - true, - ); + await mintingManager.issueExpirableWithRecords(receiver.address, labels, [], [], expiry, true); const newExpiry = expiry + 24 * 60 * 60; @@ -125,35 +104,21 @@ describe('MintingManager (metatx)', () => { it('should revoke expirable through forwarder', async () => { const labels = ['test-qw123-expirable-revoke', 'com']; const tokenId = await unsRegistry.namehash(labels); - const latestBlock = await ethers.provider.getBlock('latest'); - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = (await getLatestBlockTimestamp()) + 24 * 60 * 60; - await mintingManager.issueExpirableWithRecords( - receiver.address, - labels, - [], - [], - expiry, - true, - ); + await mintingManager.issueExpirableWithRecords(receiver.address, labels, [], [], expiry, true); - const { req, signature } = await buildExecuteParams( - 'revoke(uint256)', - [tokenId], - coinbase, - tokenId, - ); + const { req, signature } = await buildExecuteParams('revoke(uint256)', [tokenId], coinbase, tokenId); await forwarder.execute(req, signature); - expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(mintingManager.address); + expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(await mintingManager.getAddress()); }); it('should be able to buy domain with ERC20 tokens', async () => { - const latestBlock = await ethers.provider.getBlock('latest'); - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const expiry = (await getLatestBlockTimestamp()) + 24 * 60 * 60; + const price = parseEther('5'); const erc20Mock: ERC20Mock = await new ERC20Mock__factory(coinbase).deploy(); await erc20Mock.mint(receiver.address, price); @@ -161,19 +126,27 @@ describe('MintingManager (metatx)', () => { const labels = ['test-erc20-onchain-purchase-metatx', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - await erc20Mock.connect(receiver).approve(mintingManager.address, price); + await erc20Mock.connect(receiver).approve(await mintingManager.getAddress(), price); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = getBytes( + solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, network.config.chainId, receiver.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + network.config.chainId, + receiver.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); const metaTxParams = await buildExecuteParams( 'buyForErc20(address,string[],string[],string[],uint64,address,uint256,bytes)', - [receiver.address, labels, [], [], expiry, erc20Mock.address, price, signature], + [receiver.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature], receiver, tokenId, ); @@ -194,9 +167,7 @@ describe('MintingManager (metatx)', () => { await mintingManager.setForwarder(ZERO_ADDRESS); - await expect(forwarder.execute(req, signature)).to.be.revertedWith( - 'MintingManager: CALLER_IS_NOT_MINTER', - ); + await expect(forwarder.execute(req, signature)).to.be.revertedWith('MintingManager: CALLER_IS_NOT_MINTER'); }); it('should revert execution when signature is not valid', async () => { @@ -208,9 +179,9 @@ describe('MintingManager (metatx)', () => { tokenId, ); - await expect( - forwarder.execute({ ...req, from: receiver.address }, signature), - ).to.be.revertedWith('MintingManagerForwarder: SIGNATURE_INVALID'); + await expect(forwarder.execute({ ...req, from: receiver.address }, signature)).to.be.revertedWith( + 'MintingManagerForwarder: SIGNATURE_INVALID', + ); }); it('should revert execution when used signature', async () => { @@ -224,8 +195,6 @@ describe('MintingManager (metatx)', () => { await forwarder.execute(req, signature); - await expect(forwarder.execute(req, signature)).to.be.revertedWith( - 'MintingManagerForwarder: SIGNATURE_INVALID', - ); + await expect(forwarder.execute(req, signature)).to.be.revertedWith('MintingManagerForwarder: SIGNATURE_INVALID'); }); }); diff --git a/test/MintingManager.test.ts b/test/MintingManager.test.ts index a5a29a09..8bbb2643 100644 --- a/test/MintingManager.test.ts +++ b/test/MintingManager.test.ts @@ -1,9 +1,7 @@ import { ethers, network } from 'hardhat'; import { expect } from 'chai'; -import namehash from 'eth-ens-namehash'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { Block } from '@ethersproject/abstract-provider'; -import { BigNumber } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { BaseContract, namehash } from 'ethers'; import { MintingManager, ProxyReader, UNSOperator, UNSRegistry } from '../types/contracts'; import { ERC20Mock, ERC20UnsafeMock, MintingManagerMock, UNSRegistryMock } from '../types/contracts/mocks'; import { CNSRegistry, Resolver } from '../types/dot-crypto/contracts'; @@ -14,7 +12,11 @@ import { UNSOperator__factory, UNSRegistry__factory, } from '../types/factories/contracts'; -import { MintingManagerMock__factory, UNSRegistryMock__factory, ERC20Mock__factory } from '../types/factories/contracts/mocks'; +import { + MintingManagerMock__factory, + UNSRegistryMock__factory, + ERC20Mock__factory, +} from '../types/factories/contracts/mocks'; import { CNSRegistry__factory, Resolver__factory } from '../types/factories/dot-crypto/contracts'; import { MintingController__factory, @@ -22,7 +24,7 @@ import { } from '../types/factories/dot-crypto/contracts/controllers'; import { ERC20UnsafeMock__factory } from '../types'; import { ZERO_ADDRESS, TLD } from './helpers/constants'; -import { increaseTimeBy } from './helpers/utils'; +import { getLatestBlockTimestamp, increaseTimeBy } from './helpers/utils'; describe('MintingManager', () => { const DomainNamePrefix = 'uns-devtest-'; @@ -44,7 +46,7 @@ describe('MintingManager', () => { developer: SignerWithAddress, spender: SignerWithAddress; - let latestBlock: Block; + let latestBlockTimestamp: number; before(async () => { signers = await ethers.getSigners(); @@ -52,7 +54,7 @@ describe('MintingManager', () => { }); beforeEach(async () => { - latestBlock = await ethers.provider.getBlock('latest'); + latestBlockTimestamp = await getLatestBlockTimestamp(); }); describe('Ownership', () => { @@ -61,10 +63,10 @@ describe('MintingManager', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -96,10 +98,10 @@ describe('MintingManager', () => { unsRegistryMock = await new UNSRegistryMock__factory(coinbase).deploy(); mintingManagerMock = await new MintingManagerMock__factory(coinbase).deploy(); - await unsRegistryMock.initialize(mintingManagerMock.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistryMock.initialize(await mintingManagerMock.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManagerMock.initialize( - unsRegistryMock.address, + await unsRegistryMock.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -109,10 +111,10 @@ describe('MintingManager', () => { await mintingManagerMock.addMinter(coinbase.address); proxyReader = await new ProxyReader__factory(coinbase).deploy(); - await proxyReader.initialize(unsRegistryMock.address, cnsRegistry.address); + await proxyReader.initialize(await unsRegistryMock.getAddress(), await cnsRegistry.getAddress()); proxyReader2 = await new ProxyReader__factory(coinbase).deploy(); - await proxyReader2.initialize(unsRegistryMock.address, cnsRegistry.address); + await proxyReader2.initialize(await unsRegistryMock.getAddress(), await cnsRegistry.getAddress()); }); it('adds ProxyReader addresses', async () => { @@ -122,21 +124,25 @@ describe('MintingManager', () => { const tokenId = await unsRegistryMock.namehash(labels); - await mintingManagerMock.addProxyReaders([proxyReader.address, proxyReader2.address]); + const [proxyReaderAddr, proxyReader2Addr] = [ + await (proxyReader as BaseContract).getAddress(), + await (proxyReader2 as BaseContract).getAddress(), + ]; + await mintingManagerMock.addProxyReaders([proxyReaderAddr, proxyReader2Addr]); await mintingManagerMock.upgradeAll([tokenId]); await unsRegistryMock.connect(receiver).set('key', 'value', tokenId); - const [, , result] = await proxyReader.connect(receiver).callStatic.getData(['key'], tokenId); - const [, , result2] = await proxyReader2.callStatic.getData(['key'], tokenId); + const [, , result] = await proxyReader.connect(receiver).getData.staticCall(['key'], tokenId); + const [, , result2] = await proxyReader2.getData.staticCall(['key'], tokenId); expect(result).to.deep.equal(['']); expect(result2).to.deep.equal(['']); }); it('should revert if not owner', async () => { - await expect(mintingManager.connect(signers[1]).addProxyReaders([proxyReader.address])).to.be.revertedWith( + await expect(mintingManager.connect(signers[1]).addProxyReaders([ZERO_ADDRESS])).to.be.revertedWith( 'Ownable: caller is not the owner', ); }); @@ -150,10 +156,10 @@ describe('MintingManager', () => { mintingManager = await new MintingManager__factory(coinbase).deploy(); unsOperator = await new UNSOperator__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -164,12 +170,12 @@ describe('MintingManager', () => { }); it('saves UNSOperator address', async () => { - await mintingManager.connect(coinbase).setOperator(unsOperator.address); + await mintingManager.connect(coinbase).setOperator(await unsOperator.getAddress()); const labels = ['uns-operator-subdomain-test', 'crypto']; await mintingManager.connect(coinbase).issueWithRecords(receiver.address, labels, [], [], true); - await unsRegistry.connect(receiver).approve(unsOperator.address, await unsRegistry.namehash(labels)); + await unsRegistry.connect(receiver).approve(await unsOperator.getAddress(), await unsRegistry.namehash(labels)); const subdomainLabels = ['sub', ...labels]; @@ -180,7 +186,7 @@ describe('MintingManager', () => { }); it('should revert if not owner', async () => { - await expect(mintingManager.connect(signers[1]).setOperator(unsOperator.address)).to.be.revertedWith( + await expect(mintingManager.connect(signers[1]).setOperator(await unsOperator.getAddress())).to.be.revertedWith( 'Ownable: caller is not the owner', ); }); @@ -192,10 +198,10 @@ describe('MintingManager', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -208,7 +214,7 @@ describe('MintingManager', () => { describe('addTld', async () => { it('should add new TLD', async () => { const _tld = 'test'; - const _hashname = namehash.hash(_tld); + const _hashname = namehash(_tld); const labels = ['test-1', _tld]; await expect(mintingManager.addTld(_tld, false)).to.emit(mintingManager, 'NewTld').withArgs(_hashname, _tld); @@ -222,12 +228,12 @@ describe('MintingManager', () => { it('should add new expirable TLD', async () => { const _tld = 'dotcom'; - const _hashname = namehash.hash(_tld); + const _hashname = namehash(_tld); const labels = ['test-1', _tld]; await expect(mintingManager.addTld(_tld, true)).to.emit(mintingManager, 'NewTld').withArgs(_hashname, _tld); - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; await mintingManager.issueExpirableWithRecords(coinbase.address, labels, [], [], expiry, true); const tokenId = await unsRegistry.namehash(labels); @@ -246,7 +252,7 @@ describe('MintingManager', () => { it('should have all supported tlds minted', async () => { for (const key of Object.keys(TLD)) { - expect(await unsRegistry.ownerOf(TLD[key])).to.be.equal(mintingManager.address); + expect(await unsRegistry.ownerOf(TLD[key])).to.be.equal(await mintingManager.getAddress()); } }); }); @@ -254,7 +260,7 @@ describe('MintingManager', () => { describe('removeTld', async () => { it('should be able to remove existing TLD', async () => { const tld = 'test-removing-tld'; - const hashname = namehash.hash(tld); + const hashname = namehash(tld); await mintingManager.addTld(tld, false); @@ -265,14 +271,14 @@ describe('MintingManager', () => { }); it('should revert removing TLD when not registred', async () => { - const hashname = namehash.hash('test-removing-tld-not-existing'); + const hashname = namehash('test-removing-tld-not-existing'); await expect(mintingManager.removeTld(hashname)).to.be.revertedWith('MintingManager: TLD_NOT_REGISTERED'); }); it('should revert removing TLD when non-owner', async () => { const tld = 'test-removing-tld-when-not-owner'; - const hashname = namehash.hash(tld); + const hashname = namehash(tld); await mintingManager.addTld(tld, false); @@ -289,10 +295,10 @@ describe('MintingManager', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -308,14 +314,14 @@ describe('MintingManager', () => { describe('claim(uint256,string)', () => { it('should mint prefixed domain', async () => { - await mintingManager.connect(developer).functions['claim(uint256,string)'](TLD.WALLET, domainSuffix); + await mintingManager.connect(developer).claim(TLD.WALLET, domainSuffix); const tokenId = await unsRegistry.namehash([`${DomainNamePrefix}${domainSuffix}`, 'wallet']); expect(await unsRegistry.tokenURI(tokenId)).to.be.equal(`/${tokenId}`); }); it('should send domain to requester', async () => { - await mintingManager.connect(developer).functions['claim(uint256,string)'](TLD.WALLET, domainSuffix); + await mintingManager.connect(developer).claim(TLD.WALLET, domainSuffix); const tokenId = await unsRegistry.namehash([`${DomainNamePrefix}${domainSuffix}`, 'wallet']); expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(developer.address); @@ -323,31 +329,27 @@ describe('MintingManager', () => { it('should revert minting same domain twice', async () => { const minter = mintingManager.connect(developer); - await minter.functions['claim(uint256,string)'](TLD.WALLET, domainSuffix); + await minter.claim(TLD.WALLET, domainSuffix); - await expect(minter.functions['claim(uint256,string)'](TLD.WALLET, domainSuffix)).to.be.revertedWith( - 'MintingManager: TOKEN_BLOCKED', - ); + await expect(minter.claim(TLD.WALLET, domainSuffix)).to.be.revertedWith('MintingManager: TOKEN_BLOCKED'); }); it('should revert minting legacy CNS free domains', async () => { - await expect( - mintingManager.connect(developer).functions['claim(uint256,string)'](TLD.WALLET, 'udtestdev-t1'), - ).to.be.revertedWith('MintingManager: TOKEN_LABEL_PROHIBITED'); + await expect(mintingManager.connect(developer).claim(TLD.WALLET, 'udtestdev-t1')).to.be.revertedWith( + 'MintingManager: TOKEN_LABEL_PROHIBITED', + ); }); it('should revert minting an expirable domain', async () => { - await expect( - mintingManager.connect(developer).functions['claim(uint256,string)'](TLD.COM, 'udtestdev-t1-expirable'), - ).to.be.revertedWith('MintingManager: TLD_EXPIRABLE_MISMATCH'); + await expect(mintingManager.connect(developer).claim(TLD.COM, 'udtestdev-t1-expirable')).to.be.revertedWith( + 'MintingManager: TLD_EXPIRABLE_MISMATCH', + ); }); }); describe('claimTo(address,uint256,string)', () => { it('should mint domain to receiver', async () => { - await mintingManager - .connect(developer) - .functions['claimTo(address,uint256,string)'](receiver.address, TLD.WALLET, domainSuffix); + await mintingManager.connect(developer).claimTo(receiver.address, TLD.WALLET, domainSuffix); const tokenId = await unsRegistry.namehash([`${DomainNamePrefix}${domainSuffix}`, 'wallet']); expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(receiver.address); @@ -355,27 +357,21 @@ describe('MintingManager', () => { it('should revert minting legacy CNS free domains', async () => { await expect( - mintingManager - .connect(developer) - .functions['claimTo(address,uint256,string)'](receiver.address, TLD.CRYPTO, 'udtestdev-t2'), + mintingManager.connect(developer).claimTo(receiver.address, TLD.CRYPTO, 'udtestdev-t2'), ).to.be.revertedWith('MintingManager: TOKEN_LABEL_PROHIBITED'); }); it('should revert minting an expirable domain', async () => { await expect( - mintingManager - .connect(developer) - .functions['claimTo(address,uint256,string)'](receiver.address, TLD.COM, 'udtestdev-t2-expirable'), + mintingManager.connect(developer).claimTo(receiver.address, TLD.COM, 'udtestdev-t2-expirable'), ).to.be.revertedWith('MintingManager: TLD_EXPIRABLE_MISMATCH'); }); }); describe('claimToWithRecords(address,uint256,string,string[],string[])', () => { - const selector = 'claimToWithRecords(address,uint256,string,string[],string[])'; - it('should mint domain to receiver with predefined keys', async () => { const minter = mintingManager.connect(developer); - await minter.functions[selector](receiver.address, TLD.WALLET, domainSuffix, ['key'], ['value']); + await minter.claimToWithRecords(receiver.address, TLD.WALLET, domainSuffix, ['key'], ['value']); const tokenId = await unsRegistry.namehash([`${DomainNamePrefix}${domainSuffix}`, 'wallet']); expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(receiver.address); @@ -384,7 +380,7 @@ describe('MintingManager', () => { it('should mint domain with empty keys', async () => { const minter = mintingManager.connect(developer); - await minter.functions[selector](receiver.address, TLD.WALLET, domainSuffix, [], []); + await minter.claimToWithRecords(receiver.address, TLD.WALLET, domainSuffix, [], []); const tokenId = await unsRegistry.namehash([`${DomainNamePrefix}${domainSuffix}`, 'wallet']); expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(receiver.address); @@ -393,15 +389,13 @@ describe('MintingManager', () => { it('should revert minting legacy CNS free domains', async () => { await expect( - mintingManager.connect(developer).functions[selector](receiver.address, TLD.CRYPTO, 'udtestdev-t3', [], []), + mintingManager.connect(developer).claimToWithRecords(receiver.address, TLD.CRYPTO, 'udtestdev-t3', [], []), ).to.be.revertedWith('MintingManager: TOKEN_LABEL_PROHIBITED'); }); it('should revert minting an expirable domain', async () => { await expect( - mintingManager - .connect(developer) - .functions['claimTo(address,uint256,string)'](receiver.address, TLD.COM, 'udtestdev-t2-expirable'), + mintingManager.connect(developer).claimTo(receiver.address, TLD.COM, 'udtestdev-t2-expirable'), ).to.be.revertedWith('MintingManager: TLD_EXPIRABLE_MISMATCH'); }); }); @@ -415,25 +409,25 @@ describe('MintingManager', () => { unsOperator = await new UNSOperator__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, - unsOperator.address, + await unsOperator.getAddress(), ZERO_ADDRESS, ); - await mintingManager.addMinter(coinbase.address); + await mintingManager.addMinter(await coinbase.getAddress()); await mintingManager.setTokenURIPrefix('/'); mintingManagerMock = await new MintingManagerMock__factory(coinbase).deploy(); unsRegistryMock = await new UNSRegistryMock__factory(coinbase).deploy(); - await unsRegistryMock.initialize(mintingManagerMock.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistryMock.initialize(await mintingManagerMock.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManagerMock.initialize( - unsRegistryMock.address, + await unsRegistryMock.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -495,7 +489,7 @@ describe('MintingManager', () => { await mintingManager.connect(coinbase).issueWithRecords(receiver.address, labels, [], [], true); const parentTokenId = await unsRegistry.namehash(labels); - await unsRegistry.connect(receiver).approve(unsOperator.address, parentTokenId); + await unsRegistry.connect(receiver).approve(await unsOperator.getAddress(), parentTokenId); const subdomainLabels = ['sub', ...labels]; const tokenId = await unsRegistry.namehash(subdomainLabels); @@ -511,7 +505,7 @@ describe('MintingManager', () => { await mintingManager.connect(coinbase).issueWithRecords(receiver.address, labels, [], [], true); const parentTokenId = await unsRegistry.namehash(labels); - await unsRegistry.connect(receiver).approve(unsOperator.address, parentTokenId); + await unsRegistry.connect(receiver).approve(await unsOperator.getAddress(), parentTokenId); labels.unshift('sub'); @@ -526,7 +520,7 @@ describe('MintingManager', () => { await mintingManager.connect(coinbase).issueWithRecords(receiver.address, labels, [], [], true); const parentTokenId = await unsRegistry.namehash(labels); - await unsRegistry.connect(receiver).approve(unsOperator.address, parentTokenId); + await unsRegistry.connect(receiver).approve(await unsOperator.getAddress(), parentTokenId); const subdomainLabels = ['sub', ...labels]; const tokenId = await unsRegistry.namehash(subdomainLabels); @@ -604,9 +598,7 @@ describe('MintingManager', () => { const labels = ['test-222x', 'wallet']; await mintingManagerMock.connect(coinbase).issueWithRecords(receiver.address, labels, [], [], false); - await mintingManagerMock.connect(coinbase).upgradeAll([ - await unsRegistry.namehash(labels), - ]); + await mintingManagerMock.connect(coinbase).upgradeAll([await unsRegistry.namehash(labels)]); labels.unshift('sub'); @@ -697,9 +689,9 @@ describe('MintingManager', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -707,7 +699,7 @@ describe('MintingManager', () => { ZERO_ADDRESS, ); - await mintingManager.addMinter(coinbase.address); + await mintingManager.addMinter(await coinbase.getAddress()); await mintingManager.setTokenURIPrefix('/'); }); @@ -721,447 +713,348 @@ describe('MintingManager', () => { describe('With native tokens', async () => { it('is possible to buy a domain and set records', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('2.21'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('2.21'); const labels = ['test-onchain-purchase', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, receiver.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, receiver.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - receiver.address, - labels, - ['key'], ['value'], - expiry, - price, - signature, - { value: price }, - ), - ).to.emit(mintingManager, 'DomainPurchase') + mintingManager + .connect(spender) + .buy(receiver.address, labels, ['key'], ['value'], expiry, price, signature, { value: price }), + ) + .to.emit(mintingManager, 'DomainPurchase') .withArgs(tokenId, spender.address, receiver.address, price, ZERO_ADDRESS); expect(await unsRegistry.ownerOf(tokenId)).to.equal(receiver.address); expect(await unsRegistry.get('key', tokenId)).to.equal('value'); expect(await unsRegistry.reverseOf(receiver.address)).to.equal(0); - expect(await ethers.provider.getBalance(mintingManager.address)).to.equal(price); + expect(await ethers.provider.getBalance(await mintingManager.getAddress())).to.equal(price); }); it('is possible to buy a returned domain', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('2.21'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('2.21'); const labels = ['test-onchain-purchase-returned', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - await mintingManager.connect(coinbase).issueWithRecords( - spender.address, - labels, - [], [], - false, - ); - await unsRegistry.connect(spender).setOwner(mintingManager.address, tokenId); + await mintingManager.connect(coinbase).issueWithRecords(spender.address, labels, [], [], false); + await unsRegistry.connect(spender).setOwner(await mintingManager.getAddress(), tokenId); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); - await mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ); + await mintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price }); expect(await unsRegistry.ownerOf(tokenId)).to.equal(spender.address); expect(await unsRegistry.reverseOf(spender.address)).to.equal(tokenId); - expect(await ethers.provider.getBalance(mintingManager.address)).to.equal(price); + expect(await ethers.provider.getBalance(await mintingManager.getAddress())).to.equal(price); }); it('does not set reverse resolution if already set', async () => { const reverseLabels = ['reverse', 'x']; - await mintingManager.connect(coinbase).issueWithRecords( - spender.address, - reverseLabels, - [], [], - true, - ); + await mintingManager.connect(coinbase).issueWithRecords(spender.address, reverseLabels, [], [], true); const reverseTokenId = await unsRegistry.namehash(reverseLabels); - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('1'); const labels = ['test-onchain-purchase-reverse-overwrite', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); - await mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ); + await mintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price }); expect(await unsRegistry.ownerOf(tokenId)).to.equal(spender.address); expect(await unsRegistry.reverseOf(spender.address)).to.equal(reverseTokenId); - expect(await ethers.provider.getBalance(mintingManager.address)).to.equal(price); + expect(await ethers.provider.getBalance(await mintingManager.getAddress())).to.equal(price); }); it('does not set reverse resolution if sender is not owner', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('1'); const labels = ['test-onchain-purchase-reverse-not-owner', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, receiver.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, receiver.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); - await mintingManager.connect(spender).buy( - receiver.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ); + await mintingManager + .connect(spender) + .buy(receiver.address, labels, [], [], expiry, price, signature, { value: price }); expect(await unsRegistry.ownerOf(tokenId)).to.equal(receiver.address); expect(await unsRegistry.reverseOf(spender.address)).to.equal(0); - expect(await ethers.provider.getBalance(mintingManager.address)).to.equal(price); + expect(await ethers.provider.getBalance(await mintingManager.getAddress())).to.equal(price); }); it('returns cost excess to user', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); - const excess = ethers.utils.parseEther('0.5'); + const price = ethers.parseEther('1'); + const excess = ethers.parseEther('0.5'); - const initialBalance = await spender.getBalance(); + const initialBalance = await ethers.provider.getBalance(spender.address); const labels = ['test-onchain-purchase1', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); - const tx = await mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price.add(excess) }, - ); - const receipt = await tx.wait(); - const txFee = receipt.effectiveGasPrice.mul(receipt.gasUsed); + const tx = await mintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price + excess }); + const receipt = (await tx.wait())!; + const txFee = receipt.gasPrice * receipt.gasUsed; - expect(await spender.getBalance()).to.equal(initialBalance.sub(txFee).sub(price)); + expect(await ethers.provider.getBalance(spender.address)).to.equal(initialBalance - txFee - price); expect(await unsRegistry.ownerOf(tokenId)).to.equal(spender.address); - expect(await ethers.provider.getBalance(mintingManager.address)).to.equal(price); + expect(await ethers.provider.getBalance(await mintingManager.getAddress())).to.equal(price); }); it('reverts if no tokens sent', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const price = ethers.parseEther('1'); const labels = ['test-onchain-purchase2', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - ), + mintingManager.connect(spender).buy(spender.address, labels, [], [], expiry, price, signature), ).to.be.revertedWith('MintingManager: NOT_ENOUGH_FUNDS'); }); it('reverts if not enough tokens sent', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const price = ethers.parseEther('1'); const labels = ['test-onchain-purchase1', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price.sub(BigNumber.from(1)) }, - ), + mintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price - BigInt(1) }), ).to.be.revertedWith('MintingManager: NOT_ENOUGH_FUNDS'); }); it('does not allow to purchase a subdomain', async () => { const parentLabels = ['owned-parent', 'x']; - await mintingManager.connect(coinbase).issueWithRecords( - receiver.address, - parentLabels, - [], [], - true, - ); + await mintingManager.connect(coinbase).issueWithRecords(receiver.address, parentLabels, [], [], true); - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('1'); const labels = ['sub', ...parentLabels]; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, receiver.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, receiver.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - receiver.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ), + mintingManager + .connect(spender) + .buy(receiver.address, labels, [], [], expiry, price, signature, { value: price }), ).to.be.revertedWith('MintingManager: SUBDOMAINS_NOT_ALLOWED'); }); it('reverts if domain labels invalid', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const price = ethers.parseEther('1'); const labels = ['-invalid-domain', 'x']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ), + mintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price }), ).to.be.revertedWith('MintingManager: LABEL_INVALID'); }); it('reverts if TLD does not exist', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const price = ethers.parseEther('1'); const labels = ['domain', 'notexistingawesometld']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ), + mintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price }), ).to.be.revertedWith('MintingManager: TLD_NOT_REGISTERED'); }); it('reverts if is a free CNS domain ', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const price = ethers.parseEther('1'); const labels = ['udtestdev-tx', 'crypto']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ), + mintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price }), ).to.be.revertedWith('MintingManager: TOKEN_LABEL_PROHIBITED'); }); it('reverts if signature expired', async () => { - const expiry = latestBlock.timestamp - 60; + const expiry = latestBlockTimestamp - 60; - const price = ethers.utils.parseEther('1'); + const price = ethers.parseEther('1'); const labels = ['expired-purchase', 'crypto']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ), + mintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price }), ).to.be.revertedWith('MintingManager: EXPIRED_SIGNATURE'); }); it('reverts if signer is not minter', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const price = ethers.parseEther('1'); const labels = ['invalid-signer', 'x']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await spender.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ), + mintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price }), ).to.be.revertedWith('MintingManager: SIGNER_IS_NOT_MINTER'); }); it('reverts if signed data doesnt match the signature', async () => { - const expiry = latestBlock.timestamp - 60; + const expiry = latestBlockTimestamp - 60; - const price = ethers.utils.parseEther('1'); + const price = ethers.parseEther('1'); const labels = ['invalid-signed-data', 'x']; - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, BigNumber.from(1), expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, BigInt(1), expiry, price, ZERO_ADDRESS], ), ); const signature = await spender.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ), + mintingManager + .connect(spender) + .buy(await spender.getAddress(), labels, [], [], expiry, price, signature, { value: price }), ).to.be.revertedWith('MintingManager: SIGNER_IS_NOT_MINTER'); }); @@ -1169,9 +1062,14 @@ describe('MintingManager', () => { const anotherUnsRegistry = await new UNSRegistry__factory(coinbase).deploy(); const anotherMintingManager = await new MintingManager__factory(coinbase).deploy(); - await anotherUnsRegistry.initialize(anotherMintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await anotherUnsRegistry.initialize( + await anotherMintingManager.getAddress(), + ZERO_ADDRESS, + ZERO_ADDRESS, + ZERO_ADDRESS, + ); await anotherMintingManager.initialize( - anotherUnsRegistry.address, + await anotherUnsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -1181,86 +1079,68 @@ describe('MintingManager', () => { await anotherMintingManager.addMinter(coinbase.address); await anotherMintingManager.setTokenURIPrefix('/'); - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('1'); const labels = ['invalid-minting-manager-addr', 'x']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - anotherMintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ), + anotherMintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price }), ).to.be.revertedWith('MintingManager: SIGNER_IS_NOT_MINTER'); }); it('reverts if signed chainId is wrong', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('1'); const labels = ['invalid-chainid', 'x']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, 1, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), 1, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - spender.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ), + mintingManager + .connect(spender) + .buy(spender.address, labels, [], [], expiry, price, signature, { value: price }), ).to.be.revertedWith('MintingManager: SIGNER_IS_NOT_MINTER'); }); it('reverts if TLD is expirable', async () => { - const requestExpiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('2.21'); + const requestExpiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('2.21'); const labels = ['expirable-onchain-purchase-test', 'com']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, receiver.address, tokenId, requestExpiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, receiver.address, tokenId, requestExpiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buy( - receiver.address, - labels, - [], [], - requestExpiry, - price, - signature, - { value: price }, - ), + mintingManager + .connect(spender) + .buy(receiver.address, labels, [], [], requestExpiry, price, signature, { value: price }), ).to.be.revertedWith('MintingManager: TLD_EXPIRABLE_MISMATCH'); }); }); @@ -1271,445 +1151,475 @@ describe('MintingManager', () => { before(async () => { erc20Mock = await new ERC20Mock__factory(coinbase).deploy(); - await erc20Mock.mint(spender.address, ethers.utils.parseEther('100')); + await erc20Mock.mint(spender.address, ethers.parseEther('100')); erc20UnsafeMock = await new ERC20UnsafeMock__factory(coinbase).deploy(); - await erc20UnsafeMock.mint(spender.address, ethers.utils.parseEther('100')); + await erc20UnsafeMock.mint(spender.address, ethers.parseEther('100')); }); it('is possibe to buy a domain with ERC20 token', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['test-erc20-onchain-purchase', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, receiver.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + receiver.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); await expect( - mintingManager.connect(spender).buyForErc20( - receiver.address, - labels, - ['key'], ['value'], - expiry, - erc20Mock.address, - price, - signature, - ), - ).to.emit(mintingManager, 'DomainPurchase') - .withArgs(tokenId, spender.address, receiver.address, price, erc20Mock.address); + mintingManager + .connect(spender) + .buyForErc20( + receiver.address, + labels, + ['key'], + ['value'], + expiry, + await erc20Mock.getAddress(), + price, + signature, + ), + ) + .to.emit(mintingManager, 'DomainPurchase') + .withArgs(tokenId, spender.address, receiver.address, price, await erc20Mock.getAddress()); expect(await unsRegistry.ownerOf(tokenId)).to.equal(receiver.address); expect(await unsRegistry.get('key', tokenId)).to.equal('value'); expect(await unsRegistry.reverseOf(receiver.address)).to.equal(0); - expect(await erc20Mock.balanceOf(mintingManager.address)).to.equal(price); + expect(await erc20Mock.balanceOf(await mintingManager.getAddress())).to.equal(price); }); it('is possible to buy a returned domain with ERC20 tokens', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('0.3'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('0.3'); const labels = ['test-onchain-purchase-returned-erc20', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - await mintingManager.connect(coinbase).issueWithRecords( - spender.address, - labels, - [], [], - false, - ); - await unsRegistry.connect(spender).setOwner(mintingManager.address, tokenId); + await mintingManager.connect(coinbase).issueWithRecords(spender.address, labels, [], [], false); + await unsRegistry.connect(spender).setOwner(await mintingManager.getAddress(), tokenId); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); - await mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ); + await mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature); expect(await unsRegistry.ownerOf(tokenId)).to.equal(spender.address); expect(await unsRegistry.reverseOf(spender.address)).to.equal(tokenId); - expect(await erc20Mock.balanceOf(mintingManager.address)).to.equal(price); + expect(await erc20Mock.balanceOf(await mintingManager.getAddress())).to.equal(price); }); it('does not set reverse resolution if already set', async () => { const reverseLabels = ['reverse', 'x']; - await mintingManager.connect(coinbase).issueWithRecords( - spender.address, - reverseLabels, - [], [], - true, - ); + await mintingManager.connect(coinbase).issueWithRecords(spender.address, reverseLabels, [], [], true); const reverseTokenId = await unsRegistry.namehash(reverseLabels); - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['erc20-onchain-purchase-reverse', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); - await mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ); + await mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature); expect(await unsRegistry.ownerOf(tokenId)).to.equal(spender.address); expect(await unsRegistry.reverseOf(spender.address)).to.equal(reverseTokenId); - expect(await erc20Mock.balanceOf(mintingManager.address)).to.equal(price); + expect(await erc20Mock.balanceOf(await mintingManager.getAddress())).to.equal(price); }); it('does not set reverse resolution if sender is not owner', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('5'); const labels = ['erc20-onchain-purchase-reverse-not-owner', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, receiver.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + receiver.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); - await mintingManager.connect(spender).buyForErc20( - receiver.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ); + await mintingManager + .connect(spender) + .buyForErc20(receiver.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature); expect(await unsRegistry.ownerOf(tokenId)).to.equal(receiver.address); expect(await unsRegistry.reverseOf(spender.address)).to.equal(0); - expect(await erc20Mock.balanceOf(mintingManager.address)).to.equal(price); + expect(await erc20Mock.balanceOf(await mintingManager.getAddress())).to.equal(price); }); it('reverts if no ERC20 tokens approved', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['test-erc20-onchain-purchase', 'x']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - ['key'], ['value'], - expiry, - erc20Mock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20( + spender.address, + labels, + ['key'], + ['value'], + expiry, + await erc20Mock.getAddress(), + price, + signature, + ), ).to.be.revertedWith('ERC20: insufficient allowance'); }); it('reverts if ERC20 allowance is too low', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['test-erc20-onchain-purchase', 'wallet']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, ethers.utils.parseEther('1')); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), ethers.parseEther('1')); await expect( - mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature), ).to.be.revertedWith('ERC20: insufficient allowance'); }); it('does not allow to purchase a subdomain with ERC20 tokens', async () => { const parentLabels = ['owned-parent-erc20-test', 'x']; - await mintingManager.connect(coinbase).issueWithRecords( - receiver.address, - parentLabels, - [], [], - true, - ); + await mintingManager.connect(coinbase).issueWithRecords(receiver.address, parentLabels, [], [], true); - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['sub', ...parentLabels]; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); await expect( - mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature), ).to.be.revertedWith('MintingManager: SUBDOMAINS_NOT_ALLOWED'); }); it('reverts if domain labels invalid', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['-invalid-domain', 'nft']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); await expect( - mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature), ).to.be.revertedWith('MintingManager: LABEL_INVALID'); }); it('reverts if TLD does not exist', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['domain', 'awesometld']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); await expect( - mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature), ).to.be.revertedWith('MintingManager: TLD_NOT_REGISTERED'); }); it('reverts if signature expired', async () => { - const expiry = latestBlock.timestamp - 60; + const expiry = latestBlockTimestamp - 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['expired-erc20-purchase', 'x']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); await expect( - mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature), ).to.be.revertedWith('MintingManager: EXPIRED_SIGNATURE'); }); it('reverts if signer is not minter', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['expired-erc20-purchase', 'x']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await spender.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); await expect( - mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature), ).to.be.revertedWith('MintingManager: SIGNER_IS_NOT_MINTER'); }); it('reverts if signed data doesnt match the signature', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['expired-erc20-purchase', 'x']; - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, BigNumber.from(1), expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + BigInt(1), + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); await expect( - mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature), ).to.be.revertedWith('MintingManager: SIGNER_IS_NOT_MINTER'); }); it('reverts if ERC20 transfer returns false', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('5'); const labels = ['test-erc20-onchain-purchase-unsafe', 'x']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20UnsafeMock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20UnsafeMock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20UnsafeMock.connect(spender).approve(mintingManager.address, price); + await erc20UnsafeMock.connect(spender).approve(await mintingManager.getAddress(), price); await expect( - mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20UnsafeMock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20UnsafeMock.getAddress(), price, signature), ).to.be.revertedWith('ERC20: LOW_LEVEL_FAIL'); }); @@ -1717,9 +1627,14 @@ describe('MintingManager', () => { const anotherUnsRegistry = await new UNSRegistry__factory(coinbase).deploy(); const anotherMintingManager = await new MintingManager__factory(coinbase).deploy(); - await anotherUnsRegistry.initialize(anotherMintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await anotherUnsRegistry.initialize( + await anotherMintingManager.getAddress(), + ZERO_ADDRESS, + ZERO_ADDRESS, + ZERO_ADDRESS, + ); await anotherMintingManager.initialize( - anotherUnsRegistry.address, + await anotherUnsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -1729,93 +1644,99 @@ describe('MintingManager', () => { await anotherMintingManager.addMinter(coinbase.address); await anotherMintingManager.setTokenURIPrefix('/'); - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('1'); const labels = ['invalid-minting-manager-addr-erc20', 'x']; const tokenId = await unsRegistry.namehash(labels); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - anotherMintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ), + anotherMintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature), ).to.be.revertedWith('MintingManager: SIGNER_IS_NOT_MINTER'); }); it('reverts if signed chainId is wrong', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = ethers.parseEther('1'); const labels = ['invalid-chainid-erc20', 'x']; const tokenId = await unsRegistry.namehash(labels); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, 1, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + 1, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); await expect( - mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20(spender.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature), ).to.be.revertedWith('MintingManager: SIGNER_IS_NOT_MINTER'); }); it('reverts if TLD is expirable', async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('5'); + const price = ethers.parseEther('5'); const labels = ['expirable-erc20-on-chain-purchase', 'com']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, receiver.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + receiver.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); await expect( - mintingManager.connect(spender).buyForErc20( - receiver.address, - labels, - [], [], - expiry, - erc20Mock.address, - price, - signature, - ), + mintingManager + .connect(spender) + .buyForErc20(receiver.address, labels, [], [], expiry, await erc20Mock.getAddress(), price, signature), ).to.be.revertedWith('MintingManager: TLD_EXPIRABLE_MISMATCH'); }); }); @@ -1828,25 +1749,28 @@ describe('MintingManager', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); cnsRegistry = await new CNSRegistry__factory(coinbase).deploy(); - mintingController = await new MintingController__factory(coinbase).deploy(cnsRegistry.address); - await cnsRegistry.addController(mintingController.address); + mintingController = await new MintingController__factory(coinbase).deploy(await cnsRegistry.getAddress()); + await cnsRegistry.addController(await mintingController.getAddress()); - resolver = await new Resolver__factory(coinbase).deploy(cnsRegistry.address, mintingController.address); + resolver = await new Resolver__factory(coinbase).deploy( + await cnsRegistry.getAddress(), + await mintingController.getAddress(), + ); - uriPrefixController = await new URIPrefixController__factory(coinbase).deploy(cnsRegistry.address); - await cnsRegistry.addController(uriPrefixController.address); + uriPrefixController = await new URIPrefixController__factory(coinbase).deploy(await cnsRegistry.getAddress()); + await cnsRegistry.addController(await uriPrefixController.getAddress()); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); - await mintingController.addMinter(mintingManager.address); - await uriPrefixController.addWhitelisted(mintingManager.address); + await mintingController.addMinter(await mintingManager.getAddress()); + await uriPrefixController.addWhitelisted(await mintingManager.getAddress()); await mintingManager.initialize( - unsRegistry.address, - mintingController.address, - uriPrefixController.address, - resolver.address, + await unsRegistry.getAddress(), + await mintingController.getAddress(), + await uriPrefixController.getAddress(), + await resolver.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ); @@ -1869,7 +1793,7 @@ describe('MintingManager', () => { await expect(unsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: invalid token ID'); expect(await cnsRegistry.tokenURI(tokenId)).to.be.eql('/uns-devtest-test-c221.crypto'); - expect(await cnsRegistry.resolverOf(tokenId)).to.be.eql(resolver.address); + expect(await cnsRegistry.resolverOf(tokenId)).to.be.eql(await resolver.getAddress()); }); it('should claim .wallet domain in UNS registry', async () => { @@ -1891,7 +1815,7 @@ describe('MintingManager', () => { expect(await cnsRegistry.ownerOf(tokenId)).to.be.eql(coinbase.address); await expect(unsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: invalid token ID'); - expect(await cnsRegistry.resolverOf(tokenId)).to.be.eql(resolver.address); + expect(await cnsRegistry.resolverOf(tokenId)).to.be.eql(await resolver.getAddress()); }); it('should claim .wallet domain in UNS registry', async () => { @@ -1914,7 +1838,7 @@ describe('MintingManager', () => { await expect(unsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: invalid token ID'); expect(await resolver.get('key1', tokenId)).to.be.eql('value3'); - expect(await cnsRegistry.resolverOf(tokenId)).to.be.eql(resolver.address); + expect(await cnsRegistry.resolverOf(tokenId)).to.be.eql(await resolver.getAddress()); }); it('should claim with records .wallet domain in UNS registry', async () => { @@ -1937,7 +1861,7 @@ describe('MintingManager', () => { await expect(unsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: invalid token ID'); expect(await resolver.get('key1', tokenId)).to.be.eql('value1'); - expect(await cnsRegistry.resolverOf(tokenId)).to.be.eql(resolver.address); + expect(await cnsRegistry.resolverOf(tokenId)).to.be.eql(await resolver.getAddress()); }); it('should mint with records .wallet domain in UNS registry', async () => { @@ -1969,8 +1893,8 @@ describe('MintingManager', () => { const tokenIdSub = await unsRegistry.namehash(labelsSub); - await unsRegistry.connect(signers[2]).setOwner(mintingManager.address, tokenIdSub); - await unsRegistry.connect(signers[2]).setOwner(mintingManager.address, tokenId); + await unsRegistry.connect(signers[2]).setOwner(await mintingManager.getAddress(), tokenIdSub); + await unsRegistry.connect(signers[2]).setOwner(await mintingManager.getAddress(), tokenId); await mintingManager.issueWithRecords(signers[1].address, labels, ['key1'], ['value2'], true); expect(await unsRegistry.ownerOf(tokenId)).to.be.eql(signers[1].address); @@ -1999,8 +1923,8 @@ describe('MintingManager', () => { const tokenIdSub = await unsRegistry.namehash(labelsSub); - await unsRegistry.connect(signers[2]).setOwner(mintingManager.address, tokenIdSub); - await unsRegistry.connect(signers[2]).setOwner(mintingManager.address, tokenId); + await unsRegistry.connect(signers[2]).setOwner(await mintingManager.getAddress(), tokenIdSub); + await unsRegistry.connect(signers[2]).setOwner(await mintingManager.getAddress(), tokenId); await unsRegistry.connect(signers[1]).removeReverse(); @@ -2033,23 +1957,18 @@ describe('MintingManager', () => { describe('issueExpirableWithRecords(address,string[],string[],string[],uint64,bool)', () => { beforeEach(async () => { - if(!(await unsRegistry.reverseOf(receiver.address)).eq(0)) { + if ((await unsRegistry.reverseOf(receiver.address)) !== BigInt(0)) { await unsRegistry.connect(receiver).removeReverse(); } }); it('should mint expirable .com with records and reverse', async () => { const labels = ['expirable-test-a1', 'com']; - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - await mintingManager.connect(coinbase).issueExpirableWithRecords( - receiver.address, - labels, - ['key1'], - ['value1'], - expiry, - true, - ); + await mintingManager + .connect(coinbase) + .issueExpirableWithRecords(receiver.address, labels, ['key1'], ['value1'], expiry, true); const tokenId = await unsRegistry.namehash(labels); expect(await unsRegistry.ownerOf(tokenId)).to.eq(receiver.address); @@ -2060,33 +1979,23 @@ describe('MintingManager', () => { it('should unlock returned .com with records and reverse', async () => { const labels = ['expirable-test-a2', 'com']; - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - await mintingManager.connect(coinbase).issueExpirableWithRecords( - coinbase.address, - labels, - ['key1'], - ['value1'], - expiry, - false, - ); + await mintingManager + .connect(coinbase) + .issueExpirableWithRecords(coinbase.address, labels, ['key1'], ['value1'], expiry, false); const tokenId = await unsRegistry.namehash(labels); expect(await unsRegistry.ownerOf(tokenId)).to.eq(coinbase.address); expect(await unsRegistry.get('key1', tokenId)).to.eq('value1'); expect(await unsRegistry.expiryOf(tokenId)).to.eq(expiry); - await unsRegistry.connect(coinbase).setOwner(mintingManager.address, tokenId); + await unsRegistry.connect(coinbase).setOwner(await mintingManager.getAddress(), tokenId); const newExpiry = expiry + 60 * 60 * 24; - await mintingManager.connect(coinbase).issueExpirableWithRecords( - receiver.address, - labels, - ['key2'], - ['value2'], - newExpiry, - true, - ); + await mintingManager + .connect(coinbase) + .issueExpirableWithRecords(receiver.address, labels, ['key2'], ['value2'], newExpiry, true); expect(await unsRegistry.ownerOf(tokenId)).to.eq(receiver.address); expect(await unsRegistry.expiryOf(tokenId)).to.eq(newExpiry); @@ -2099,16 +2008,11 @@ describe('MintingManager', () => { it('should mint existing expired .com with records and reverse', async () => { const labels = ['expirable-test-a3', 'com']; - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const expiry = latestBlockTimestamp + 24 * 60 * 60; - await mintingManager.connect(coinbase).issueExpirableWithRecords( - receiver.address, - labels, - ['key1'], - ['value1'], - expiry, - false, - ); + await mintingManager + .connect(coinbase) + .issueExpirableWithRecords(receiver.address, labels, ['key1'], ['value1'], expiry, false); const tokenId = await unsRegistry.namehash(labels); expect(await unsRegistry.ownerOf(tokenId)).to.eq(receiver.address); @@ -2120,14 +2024,9 @@ describe('MintingManager', () => { expect(await unsRegistry.isExpired(tokenId)).to.eq(true); const newExpiry = expiry + 24 * 60 * 60; - await mintingManager.connect(coinbase).issueExpirableWithRecords( - receiver.address, - labels, - ['key2'], - ['value2'], - newExpiry, - true, - ); + await mintingManager + .connect(coinbase) + .issueExpirableWithRecords(receiver.address, labels, ['key2'], ['value2'], newExpiry, true); expect(await unsRegistry.ownerOf(tokenId)).to.eq(receiver.address); expect(await unsRegistry.get('key2', tokenId)).to.eq('value2'); @@ -2139,23 +2038,18 @@ describe('MintingManager', () => { it('should unlock returned expired .com with records and reverse', async () => { const labels = ['expirable-test-a4', 'com']; - const expiry = latestBlock.timestamp + 60 * 60; + const expiry = latestBlockTimestamp + 60 * 60; - await mintingManager.connect(coinbase).issueExpirableWithRecords( - coinbase.address, - labels, - ['key1'], - ['value1'], - expiry, - false, - ); + await mintingManager + .connect(coinbase) + .issueExpirableWithRecords(coinbase.address, labels, ['key1'], ['value1'], expiry, false); const tokenId = await unsRegistry.namehash(labels); expect(await unsRegistry.ownerOf(tokenId)).to.eq(coinbase.address); expect(await unsRegistry.get('key1', tokenId)).to.eq('value1'); expect(await unsRegistry.expiryOf(tokenId)).to.eq(expiry); - await unsRegistry.connect(coinbase).setOwner(mintingManager.address, tokenId); + await unsRegistry.connect(coinbase).setOwner(await mintingManager.getAddress(), tokenId); await increaseTimeBy(60 * 60); @@ -2163,14 +2057,9 @@ describe('MintingManager', () => { const newExpiry = expiry + 24 * 60 * 60; - await mintingManager.connect(coinbase).issueExpirableWithRecords( - receiver.address, - labels, - ['key2'], - ['value2'], - newExpiry, - true, - ); + await mintingManager + .connect(coinbase) + .issueExpirableWithRecords(receiver.address, labels, ['key2'], ['value2'], newExpiry, true); expect(await unsRegistry.ownerOf(tokenId)).to.eq(receiver.address); expect(await unsRegistry.expiryOf(tokenId)).to.eq(newExpiry); @@ -2188,7 +2077,7 @@ describe('MintingManager', () => { ['expirable-test-a5', 'crypto'], [], [], - latestBlock.timestamp + 24 * 60 * 60, + latestBlockTimestamp + 24 * 60 * 60, true, ), ).to.be.revertedWith('MintingManager: TLD_EXPIRABLE_MISMATCH'); @@ -2196,55 +2085,39 @@ describe('MintingManager', () => { it('should revert if caller is not minter', async () => { await expect( - mintingManager.connect(signers[1]).issueExpirableWithRecords( - coinbase.address, - ['not-minter', 'com'], - [], - [], - latestBlock.timestamp + 24 * 60 * 60, - true, - ), + mintingManager + .connect(signers[1]) + .issueExpirableWithRecords( + coinbase.address, + ['not-minter', 'com'], + [], + [], + latestBlockTimestamp + 24 * 60 * 60, + true, + ), ).to.be.revertedWith('MintingManager: CALLER_IS_NOT_MINTER'); }); it('should revert with subdomain', async () => { const labels = ['expirable-test-a6', 'com']; - const expiry = latestBlock.timestamp + 60 * 60; + const expiry = latestBlockTimestamp + 60 * 60; - await mintingManager.connect(coinbase).issueExpirableWithRecords( - coinbase.address, - labels, - [], - [], - expiry, - false, - ); + await mintingManager + .connect(coinbase) + .issueExpirableWithRecords(coinbase.address, labels, [], [], expiry, false); const tokenId = await unsRegistry.namehash(labels); expect(await unsRegistry.ownerOf(tokenId)).to.eq(coinbase.address); await expect( - mintingManager.issueExpirableWithRecords( - coinbase.address, - ['sub', ...labels], - [], - [], - expiry, - true, - ), + mintingManager.issueExpirableWithRecords(coinbase.address, ['sub', ...labels], [], [], expiry, true), ).to.be.revertedWith('MintingManager: SUBDOMAINS_NOT_ALLOWED'); }); it('should revert with subdomain of non-expirable SLD', async () => { const labels = ['expirable-test-a7', 'x']; - await mintingManager.connect(coinbase).issueWithRecords( - coinbase.address, - labels, - [], - [], - false, - ); + await mintingManager.connect(coinbase).issueWithRecords(coinbase.address, labels, [], [], false); const tokenId = await unsRegistry.namehash(labels); expect(await unsRegistry.ownerOf(tokenId)).to.eq(coinbase.address); @@ -2255,7 +2128,7 @@ describe('MintingManager', () => { ['sub', ...labels], [], [], - latestBlock.timestamp + 24 * 60 * 60, + latestBlockTimestamp + 24 * 60 * 60, true, ), ).to.be.revertedWith('MintingManager: TLD_EXPIRABLE_MISMATCH'); @@ -2268,7 +2141,7 @@ describe('MintingManager', () => { ['udtestdev-t8', 'com'], ['key1'], ['value1'], - latestBlock.timestamp + 24 * 60 * 60, + latestBlockTimestamp + 24 * 60 * 60, true, ), ).to.be.revertedWith('MintingManager: TOKEN_LABEL_PROHIBITED'); @@ -2281,9 +2154,9 @@ describe('MintingManager', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -2304,9 +2177,9 @@ describe('MintingManager', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -2318,16 +2191,9 @@ describe('MintingManager', () => { it('should renew an expirable domain', async () => { const labels = ['test-renew-1', 'com']; - const expiry = latestBlock.timestamp + 60 * 60 * 24; - - await mintingManager.connect(coinbase).issueExpirableWithRecords( - coinbase.address, - labels, - [], - [], - expiry, - true, - ); + const expiry = latestBlockTimestamp + 60 * 60 * 24; + + await mintingManager.connect(coinbase).issueExpirableWithRecords(coinbase.address, labels, [], [], expiry, true); const tokenId = await unsRegistry.namehash(labels); expect(await unsRegistry.expiryOf(tokenId)).to.be.equal(expiry); @@ -2344,7 +2210,7 @@ describe('MintingManager', () => { await mintingManager.connect(coinbase).issueWithRecords(coinbase.address, labels, [], [], true); const tokenId = await unsRegistry.namehash(labels); - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; await expect(mintingManager.connect(coinbase).renew(expiry, tokenId)).to.be.revertedWith( 'MintingManager: TOKEN_NOT_EXPIRABLE', ); @@ -2352,16 +2218,9 @@ describe('MintingManager', () => { it('should revert if expiry is not extended', async () => { const labels = ['test-renew-3', 'com']; - const expiry = latestBlock.timestamp + 60 * 60 * 24; - - await mintingManager.connect(coinbase).issueExpirableWithRecords( - coinbase.address, - labels, - [], - [], - expiry, - true, - ); + const expiry = latestBlockTimestamp + 60 * 60 * 24; + + await mintingManager.connect(coinbase).issueExpirableWithRecords(coinbase.address, labels, [], [], expiry, true); const tokenId = await unsRegistry.namehash(labels); await expect(mintingManager.connect(coinbase).renew(expiry, tokenId)).to.be.revertedWith( @@ -2371,16 +2230,9 @@ describe('MintingManager', () => { it('should revert if new expiry is in the past', async () => { const labels = ['test-renew-4', 'com']; - const expiry = latestBlock.timestamp + 60 * 60 * 24; - - await mintingManager.connect(coinbase).issueExpirableWithRecords( - coinbase.address, - labels, - [], - [], - expiry, - true, - ); + const expiry = latestBlockTimestamp + 60 * 60 * 24; + + await mintingManager.connect(coinbase).issueExpirableWithRecords(coinbase.address, labels, [], [], expiry, true); const tokenId = await unsRegistry.namehash(labels); await increaseTimeBy(60 * 60 * 24); @@ -2395,16 +2247,9 @@ describe('MintingManager', () => { it('should revert if caller is not minter', async () => { const labels = ['test-renew-5', 'com']; - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; - await mintingManager.connect(coinbase).issueExpirableWithRecords( - coinbase.address, - labels, - [], - [], - expiry, - true, - ); + await mintingManager.connect(coinbase).issueExpirableWithRecords(coinbase.address, labels, [], [], expiry, true); const tokenId = await unsRegistry.namehash(labels); const newExpiry = expiry + 60 * 60 * 24; @@ -2422,9 +2267,9 @@ describe('MintingManager', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -2436,23 +2281,18 @@ describe('MintingManager', () => { it('should revoke an expirable domain', async () => { const labels = ['test-revoke-1', 'com']; - const expiry = latestBlock.timestamp + 60 * 60 * 24; - - await mintingManager.connect(coinbase).issueExpirableWithRecords( - coinbase.address, - labels, - ['key1'], - ['awesome-value'], - expiry, - true, - ); + const expiry = latestBlockTimestamp + 60 * 60 * 24; + + await mintingManager + .connect(coinbase) + .issueExpirableWithRecords(coinbase.address, labels, ['key1'], ['awesome-value'], expiry, true); const tokenId = await unsRegistry.namehash(labels); expect(await unsRegistry.expiryOf(tokenId)).to.be.equal(expiry); await mintingManager.connect(coinbase).revoke(tokenId); - expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(mintingManager.address); + expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(await mintingManager.getAddress()); expect(await unsRegistry.get('key1', tokenId)).to.be.equal(''); }); @@ -2470,16 +2310,9 @@ describe('MintingManager', () => { it('should revert if caller is not minter', async () => { const labels = ['test-revoke-3', 'com']; - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; - await mintingManager.connect(coinbase).issueExpirableWithRecords( - coinbase.address, - labels, - [], - [], - expiry, - true, - ); + await mintingManager.connect(coinbase).issueExpirableWithRecords(coinbase.address, labels, [], [], expiry, true); const tokenId = await unsRegistry.namehash(labels); await expect(mintingManager.connect(receiver).revoke(tokenId)).to.be.revertedWith( @@ -2493,10 +2326,10 @@ describe('MintingManager', () => { before(async () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -2529,7 +2362,7 @@ describe('MintingManager', () => { ['test-block-3pef', 'com'], [], [], - latestBlock.timestamp + 60 * 60 * 24, + latestBlockTimestamp + 60 * 60 * 24, true, ); @@ -2539,7 +2372,7 @@ describe('MintingManager', () => { ['test-block-3pef', 'com'], [], [], - latestBlock.timestamp, + latestBlockTimestamp, true, ), ).to.be.revertedWith('MintingManager: TOKEN_BLOCKED'); @@ -2587,10 +2420,10 @@ describe('MintingManager', () => { before(async () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -2640,7 +2473,7 @@ describe('MintingManager', () => { }); it('should revert mint expirable with records when paused', async () => { - const { timestamp } = await ethers.provider.getBlock('latest'); + const timestamp = await getLatestBlockTimestamp(); await expect( mintingManager.issueExpirableWithRecords( @@ -2656,25 +2489,13 @@ describe('MintingManager', () => { it('should revert buy if paused', async () => { await expect( - mintingManager.buy( - coinbase.address, - ['test-paused-purchase', 'x'], - [], [], - 0, 0, - '0x', - ), + mintingManager.buy(coinbase.address, ['test-paused-purchase', 'x'], [], [], 0, 0, '0x'), ).to.be.revertedWith('Pausable: PAUSED'); }); it('should revert buyForErc20 if paused', async () => { await expect( - mintingManager.buyForErc20( - coinbase.address, - ['test-paused-purchase', 'x'], - [], [], - 0, ZERO_ADDRESS, 0, - '0x', - ), + mintingManager.buyForErc20(coinbase.address, ['test-paused-purchase', 'x'], [], [], 0, ZERO_ADDRESS, 0, '0x'), ).to.be.revertedWith('Pausable: PAUSED'); }); }); @@ -2685,10 +2506,10 @@ describe('MintingManager', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -2742,10 +2563,10 @@ describe('MintingManager', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -2758,54 +2579,46 @@ describe('MintingManager', () => { describe('withdraw(address recepient)', () => { it('allows to withdraw native tokens', async () => { - const price = ethers.utils.parseEther('4.54'); - const expiry = latestBlock.timestamp + 24 * 60 * 60; + const price = ethers.parseEther('4.54'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; const labels = ['withdrawal', 'wallet']; const tokenId = await unsRegistry.namehash(labels); const chainId = network.config.chainId; - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = ethers.getBytes( + ethers.solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, receiver.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, receiver.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); - await mintingManager.connect(receiver).buy( - receiver.address, - labels, - [], [], - expiry, - price, - signature, - { value: price }, - ); + await mintingManager + .connect(receiver) + .buy(receiver.address, labels, [], [], expiry, price, signature, { value: price }); - expect(await ethers.provider.getBalance(mintingManager.address)).to.equal(price); + expect(await ethers.provider.getBalance(await mintingManager.getAddress())).to.equal(price); - const initialBalance = await receiver.getBalance(); + const initialBalance = await ethers.provider.getBalance(receiver.address); - await expect( - mintingManager.connect(coinbase)['withdraw(address)'](receiver.address), - ).to.emit(mintingManager, 'Withdrawal').withArgs(receiver.address, price, ZERO_ADDRESS); + await expect(mintingManager.connect(coinbase)['withdraw(address)'](receiver.address)) + .to.emit(mintingManager, 'Withdrawal') + .withArgs(receiver.address, price, ZERO_ADDRESS); - expect(await receiver.getBalance()).to.equal(initialBalance.add(price)); - expect(await ethers.provider.getBalance(mintingManager.address)).to.equal(BigNumber.from(0)); + expect(await ethers.provider.getBalance(receiver.address)).to.equal(initialBalance + price); + expect(await ethers.provider.getBalance(await mintingManager.getAddress())).to.equal(BigInt(0)); }); it('rejects if not owner', async () => { - await expect( - mintingManager.connect(receiver)['withdraw(address)'](ZERO_ADDRESS), - ).to.be.reverted; + await expect(mintingManager.connect(receiver)['withdraw(address)'](ZERO_ADDRESS)).to.be.reverted; }); it('rejects if not owner', async () => { - await expect( - mintingManager.connect(receiver)['withdraw(address)'](receiver.address), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(mintingManager.connect(receiver)['withdraw(address)'](receiver.address)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); }); @@ -2820,31 +2633,32 @@ describe('MintingManager', () => { }); it('allows to withdraw ERC20 tokens', async () => { - const value = ethers.utils.parseEther('5'); - await erc20Mock.mint(mintingManager.address, value); + const value = ethers.parseEther('5'); + await erc20Mock.mint(await mintingManager.getAddress(), value); await expect( - mintingManager.connect(coinbase)['withdraw(address,address)']( - erc20Mock.address, - receiver.address, - ), - ).to.emit(mintingManager, 'Withdrawal').withArgs(receiver.address, value, erc20Mock.address); + mintingManager.connect(coinbase)['withdraw(address,address)'](await erc20Mock.getAddress(), receiver.address), + ) + .to.emit(mintingManager, 'Withdrawal') + .withArgs(receiver.address, value, await erc20Mock.getAddress()); expect(await erc20Mock.balanceOf(receiver.address)).to.equal(value); }); it('reverts if ERC20 transfer returns false', async () => { - const value = ethers.utils.parseEther('5'); - await erc20UnsafeMock.mint(mintingManager.address, value); + const value = ethers.parseEther('5'); + await erc20UnsafeMock.mint(await mintingManager.getAddress(), value); await expect( - mintingManager.connect(coinbase)['withdraw(address,address)'](erc20UnsafeMock.address, receiver.address), + mintingManager + .connect(coinbase) + ['withdraw(address,address)'](await erc20UnsafeMock.getAddress(), receiver.address), ).to.be.revertedWith('ERC20: LOW_LEVEL_FAIL'); }); it('rejects if not owner', async () => { await expect( - mintingManager.connect(receiver)['withdraw(address,address)'](erc20Mock.address, receiver.address), + mintingManager.connect(receiver)['withdraw(address,address)'](await erc20Mock.getAddress(), receiver.address), ).to.be.revertedWith('Ownable: caller is not the owner'); }); }); diff --git a/test/ProxyReader.proxy.test.ts b/test/ProxyReader.proxy.test.ts index a9eedd37..a9a48692 100644 --- a/test/ProxyReader.proxy.test.ts +++ b/test/ProxyReader.proxy.test.ts @@ -1,12 +1,13 @@ import { ethers, upgrades } from 'hardhat'; import { expect } from 'chai'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { BigNumber } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { getContractAddress } from '@openzeppelin/hardhat-upgrades/dist/utils'; import { ProxyReader, UNSRegistry } from '../types/contracts'; import { CNSRegistry } from '../types/dot-crypto/contracts'; import { ProxyReader__factory, UNSRegistry__factory } from '../types/factories/contracts'; import { CNSRegistry__factory } from '../types/factories/dot-crypto/contracts'; import { ProxyReaderV04__factory } from '../types/factories/contracts/history'; +import { deployProxy } from '../src/helpers'; import { mintDomain } from './helpers/registry'; import { TLD, ZERO_ADDRESS } from './helpers/constants'; @@ -14,7 +15,7 @@ describe('ProxyReader (proxy)', () => { let unsRegistry: UNSRegistry, cnsRegistry: CNSRegistry, proxyReader: ProxyReader; let signers: SignerWithAddress[], coinbase: SignerWithAddress, receiver: SignerWithAddress; - let walletTokenId: BigNumber; + let walletTokenId: bigint; before(async () => { signers = await ethers.getSigners(); @@ -31,11 +32,11 @@ describe('ProxyReader (proxy)', () => { cnsRegistry = await new CNSRegistry__factory(coinbase).deploy(); // deploy ProxyReader - proxyReader = await upgrades.deployProxy( + proxyReader = await deployProxy( new ProxyReader__factory(coinbase), - [ unsRegistry.address, cnsRegistry.address ], + [await unsRegistry.getAddress(), await cnsRegistry.getAddress()], { unsafeAllow: ['delegatecall'] }, - ) as ProxyReader; + ); // add TLD await unsRegistry.mintTLD(TLD.WALLET, 'wallet'); @@ -50,17 +51,17 @@ describe('ProxyReader (proxy)', () => { }); it('should keep forwarding with storage layout consistent after upgrade', async () => { - proxyReader = await upgrades.deployProxy( + proxyReader = await deployProxy( new ProxyReaderV04__factory(coinbase), - [ unsRegistry.address, cnsRegistry.address ], + [await unsRegistry.getAddress(), await cnsRegistry.getAddress()], { unsafeAllow: ['delegatecall'] }, - ) as ProxyReader; + ); expect(await proxyReader.exists(walletTokenId)).to.be.equal(true); expect(await proxyReader.ownerOf(walletTokenId)).to.be.equal(coinbase.address); const upgradedProxyReader = await upgrades.upgradeProxy( - proxyReader.address, + await getContractAddress(proxyReader), new ProxyReader__factory(coinbase), { unsafeAllow: ['delegatecall'], @@ -75,8 +76,6 @@ describe('ProxyReader (proxy)', () => { expect(await proxyReader.exists(walletTokenId)).to.be.equal(true); expect(await proxyReader.ownerOf(walletTokenId)).to.be.equal(coinbase.address); - await expect( - upgradedProxyReader.setOwner(receiver.address), - ).to.be.revertedWith('ProxyReader: OWNER_ALREADY_SET'); + await expect(upgradedProxyReader.setOwner(receiver.address)).to.be.revertedWith('ProxyReader: OWNER_ALREADY_SET'); }); }); diff --git a/test/ProxyReader.test.ts b/test/ProxyReader.test.ts index 9ae908f5..ca487c37 100644 --- a/test/ProxyReader.test.ts +++ b/test/ProxyReader.test.ts @@ -1,14 +1,14 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { utils, BigNumber } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { Result } from 'ethers/lib/utils'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { AbiCoder, id, Result } from 'ethers'; import { ProxyReader__factory, UNSRegistry__factory } from '../types/factories/contracts'; import { ProxyReader, UNSRegistry } from '../types/contracts'; import { CNSRegistry, Resolver } from '../types/dot-crypto/contracts'; import { MintingController } from '../types/dot-crypto/contracts/controllers'; import { CNSRegistry__factory, Resolver__factory } from '../types/factories/dot-crypto/contracts'; import { MintingController__factory } from '../types/factories/dot-crypto/contracts/controllers'; +import { getContractAddress } from '../src/helpers'; import { mintDomain } from './helpers/registry'; import { DEAD_ADDRESS, ZERO_ADDRESS, TLD } from './helpers/constants'; import { getInterfaceId } from './helpers/proxy'; @@ -26,12 +26,12 @@ describe('ProxyReader', () => { let signers: SignerWithAddress[], coinbase: SignerWithAddress, accounts: string[]; - let walletTokenId: BigNumber, cryptoTokenId: BigNumber; + let walletTokenId: bigint, cryptoTokenId: bigint; before(async () => { signers = await ethers.getSigners(); [coinbase] = signers; - [, ...accounts] = signers.map(s => s.address); + [, ...accounts] = signers.map((s) => s.address); // deploy UNS unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); @@ -40,9 +40,12 @@ describe('ProxyReader', () => { // deploy CNS cnsRegistry = await new CNSRegistry__factory(coinbase).deploy(); - mintingController = await new MintingController__factory(coinbase).deploy(cnsRegistry.address); - await cnsRegistry.addController(mintingController.address); - resolver = await new Resolver__factory(coinbase).deploy(cnsRegistry.address, mintingController.address); + mintingController = await new MintingController__factory(coinbase).deploy(await cnsRegistry.getAddress()); + await cnsRegistry.addController(await mintingController.getAddress()); + resolver = await new Resolver__factory(coinbase).deploy( + await cnsRegistry.getAddress(), + await mintingController.getAddress(), + ); // mint .wallet TLD await unsRegistry.mintTLD(TLD.WALLET, 'wallet'); @@ -52,10 +55,10 @@ describe('ProxyReader', () => { // mint .crypto cryptoTokenId = await unsRegistry.namehash([domainName, 'crypto']); - await mintingController.mintSLDWithResolver(coinbase.address, domainName, resolver.address); + await mintingController.mintSLDWithResolver(coinbase.address, domainName, await resolver.getAddress()); proxyReader = await new ProxyReader__factory(coinbase).deploy(); - await proxyReader.initialize(unsRegistry.address, cnsRegistry.address); + await proxyReader.initialize(await unsRegistry.getAddress(), await cnsRegistry.getAddress()); }); it('should support IERC165 interface', async () => { @@ -68,8 +71,17 @@ describe('ProxyReader', () => { describe('IRegistryReader', () => { it('should support IRegistryReader interface', async () => { const functions = [ - 'tokenURI', 'isApprovedOrOwner', 'resolverOf', 'namehash', 'balanceOf', - 'ownerOf', 'getApproved', 'isApprovedForAll', 'exists', 'reverseOf', 'reverseNameOf', + 'tokenURI', + 'isApprovedOrOwner', + 'resolverOf', + 'namehash', + 'balanceOf', + 'ownerOf', + 'getApproved', + 'isApprovedForAll', + 'exists', + 'reverseOf', + 'reverseNameOf', ]; const interfaceId = getInterfaceId(proxyReader, functions); @@ -78,9 +90,9 @@ describe('ProxyReader', () => { }); it('should revert isApprovedForAll call', async () => { - await expect( - proxyReader.isApprovedForAll(accounts[0], accounts[1]), - ).to.be.revertedWith('ProxyReader: UNSUPPORTED_METHOD'); + await expect(proxyReader.isApprovedForAll(accounts[0], accounts[1])).to.be.revertedWith( + 'ProxyReader: UNSUPPORTED_METHOD', + ); }); describe('getApproved', () => { @@ -162,7 +174,7 @@ describe('ProxyReader', () => { describe('ownerOf', () => { it('should return empty owner for unknown domain', async () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); - const owners = await proxyReader.callStatic.ownerOf(unknownTokenId); + const owners = await proxyReader.ownerOf.staticCall(unknownTokenId); expect(owners).to.be.equal(ZERO_ADDRESS); }); @@ -190,7 +202,7 @@ describe('ProxyReader', () => { const resolverResult = await unsRegistry.resolverOf(walletTokenId); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be.equal(unsRegistry.address); + expect(resolverResult).to.be.equal(await unsRegistry.getAddress()); }); it('should return resolver of .crypto domain', async () => { @@ -198,7 +210,7 @@ describe('ProxyReader', () => { const resolverResult = await cnsRegistry.resolverOf(cryptoTokenId); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be.equal(resolver.address); + expect(resolverResult).to.be.equal(await resolver.getAddress()); }); }); @@ -208,8 +220,9 @@ describe('ProxyReader', () => { const resolverResult = await unsRegistry.tokenURI(walletTokenId); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be - .equal('/40559307672254207728557027035302885851369665055277251407821151545011532191308'); + expect(resolverResult).to.be.equal( + '/40559307672254207728557027035302885851369665055277251407821151545011532191308', + ); }); it('should return tokenURI of .crypto domain', async () => { @@ -227,8 +240,9 @@ describe('ProxyReader', () => { const resolverResult = await unsRegistry.namehash(['test', 'wallet']); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be - .equal('50586162622368517199428676025463367639931450566950616867100918499864570754504'); + expect(resolverResult).to.be.equal( + '50586162622368517199428676025463367639931450566950616867100918499864570754504', + ); }); it('should return namehash of .crypto domain', async () => { @@ -237,8 +251,9 @@ describe('ProxyReader', () => { const resolverResult = await cnsRegistry.childIdOf(TLD.CRYPTO, 'test'); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be - .equal('82856763987730893573226808376519199326595862773989062576563108342755511775491'); + expect(resolverResult).to.be.equal( + '82856763987730893573226808376519199326595862773989062576563108342755511775491', + ); }); }); @@ -252,7 +267,7 @@ describe('ProxyReader', () => { const proxyResult = await proxyReader.balanceOf(account); const resolverResult1 = await unsRegistry.balanceOf(account); const resolverResult2 = await cnsRegistry.balanceOf(account); - expect(proxyResult).to.be.equal(resolverResult1.add(resolverResult2)); + expect(proxyResult).to.be.equal(resolverResult1 + resolverResult2); }); }); @@ -362,7 +377,7 @@ describe('ProxyReader', () => { it('should resolve empty record value for .crypto domain when resolver is not valid', async () => { const tokenId = await unsRegistry.namehash(['test-sgh-q1-4', 'crypto']); - const nonResolverAddress = proxyReader.address; + const nonResolverAddress = await getContractAddress(proxyReader); await mintingController.mintSLDWithResolver(coinbase.address, 'test-sgh-q1-4', nonResolverAddress); @@ -459,7 +474,7 @@ describe('ProxyReader', () => { it('should resolve empty records value for .crypto domain when resolver is not valid', async () => { const _tokenId = await unsRegistry.namehash(['test-sgh-q2-4', 'crypto']); - const nonResolverAddress = proxyReader.address; + const nonResolverAddress = await getContractAddress(proxyReader); await mintingController.mintSLDWithResolver(coinbase.address, 'test-sgh-q2-4', nonResolverAddress); @@ -471,7 +486,7 @@ describe('ProxyReader', () => { describe('getByHash', () => { it('should return value of record for .wallet domain', async () => { - const keyHash = utils.id('get_key_4235'); + const keyHash = id('get_key_4235'); await unsRegistry.set('get_key_4235', 'value1454', walletTokenId); const proxyResult = await proxyReader.getByHash(keyHash, walletTokenId); @@ -482,7 +497,7 @@ describe('ProxyReader', () => { }); it('should return value of record for .crypto domain', async () => { - const keyHash = utils.id('get_key_0946'); + const keyHash = id('get_key_0946'); await resolver.set('get_key_0946', 'value4521', cryptoTokenId); const proxyResult = await proxyReader.getByHash(keyHash, cryptoTokenId); @@ -493,7 +508,7 @@ describe('ProxyReader', () => { }); it('should resolve empty record value for .crypto domain when token not found', async () => { - const keyHash = utils.id('get_key_0946'); + const keyHash = id('get_key_0946'); const tokenId = await unsRegistry.namehash(['test-sgh-q3', 'crypto']); const proxyResult = await proxyReader.getByHash(keyHash, tokenId); @@ -502,7 +517,7 @@ describe('ProxyReader', () => { }); it('should resolve empty record value for .crypto domain when resolver not found', async () => { - const keyHash = utils.id('get_key_0946'); + const keyHash = id('get_key_0946'); const tokenId = await unsRegistry.namehash(['test-sgh-q3', 'crypto']); await mintingController.mintSLD(coinbase.address, 'test-sgh-q3'); @@ -512,7 +527,7 @@ describe('ProxyReader', () => { }); it('should resolve empty record value for .crypto domain when resolver is 0xdead', async () => { - const keyHash = utils.id('get_key_0946'); + const keyHash = id('get_key_0946'); const tokenId = await unsRegistry.namehash(['test-sgh-q3-2', 'crypto']); await mintingController.mintSLDWithResolver(coinbase.address, 'test-sgh-q3-2', DEAD_ADDRESS); @@ -522,7 +537,7 @@ describe('ProxyReader', () => { }); it('should resolve empty record value for .crypto domain when resolver is EOA', async () => { - const keyHash = utils.id('get_key_0946'); + const keyHash = id('get_key_0946'); const tokenId = await unsRegistry.namehash(['test-sgh-q3-3', 'crypto']); await mintingController.mintSLDWithResolver(coinbase.address, 'test-sgh-q3-3', coinbase.address); @@ -532,10 +547,10 @@ describe('ProxyReader', () => { }); it('should resolve empty record value for .crypto domain when resolver is not valid', async () => { - const keyHash = utils.id('get_key_0946'); + const keyHash = id('get_key_0946'); const tokenId = await unsRegistry.namehash(['test-sgh-q3-4', 'crypto']); - const nonResolverAddress = proxyReader.address; + const nonResolverAddress = await getContractAddress(proxyReader); await mintingController.mintSLDWithResolver(coinbase.address, 'test-sgh-q3-4', nonResolverAddress); @@ -547,7 +562,7 @@ describe('ProxyReader', () => { describe('getManyByHash', () => { it('should return list with empty value for unregistered key', async () => { - const keyHash = utils.id('key_aaaaaa'); + const keyHash = id('key_aaaaaa'); const result = await proxyReader.getManyByHash([keyHash], walletTokenId); expect(result[0]).to.be.eql(['']); }); @@ -555,7 +570,7 @@ describe('ProxyReader', () => { it('should return list with single value for .wallet domain', async () => { const [key] = keys; const [value] = values; - const keyHash = utils.id(key); + const keyHash = id(key); await unsRegistry.set(key, value, walletTokenId); const proxyResult = await proxyReader.getManyByHash([keyHash], walletTokenId); @@ -568,7 +583,7 @@ describe('ProxyReader', () => { it('should return list with single value for .crypto domain', async () => { const [key] = keys; const [value] = values; - const keyHash = utils.id(key); + const keyHash = id(key); await resolver.set(key, value, cryptoTokenId); const proxyResult = await proxyReader.getManyByHash([keyHash], cryptoTokenId); @@ -579,7 +594,7 @@ describe('ProxyReader', () => { }); it('should resolve empty records value for .crypto domain when token not found', async () => { - const keyHash = utils.id(keys[0]); + const keyHash = id(keys[0]); const tokenId = await unsRegistry.namehash(['test-sgh-q4', 'crypto']); const proxyResult = await proxyReader.getManyByHash([keyHash], tokenId); @@ -588,7 +603,7 @@ describe('ProxyReader', () => { }); it('should resolve empty records value for .crypto domain when resolver not found', async () => { - const keyHash = utils.id(keys[0]); + const keyHash = id(keys[0]); const tokenId = await unsRegistry.namehash(['test-sgh-q5', 'crypto']); await mintingController.mintSLD(coinbase.address, 'test-sgh-q5'); @@ -598,8 +613,8 @@ describe('ProxyReader', () => { }); it('should resolve empty records value for .crypto domain when resolver is 0xdead', async () => { - const keyHash = utils.id(keys[0]); - const tokenId = await unsRegistry.namehash([ 'test-sgh-q5-2', 'crypto']); + const keyHash = id(keys[0]); + const tokenId = await unsRegistry.namehash(['test-sgh-q5-2', 'crypto']); await mintingController.mintSLDWithResolver(coinbase.address, 'test-sgh-q5-2', DEAD_ADDRESS); const proxyResult = await proxyReader.getManyByHash([keyHash], tokenId); @@ -608,7 +623,7 @@ describe('ProxyReader', () => { }); it('should resolve empty records value for .crypto domain when resolver is EOA', async () => { - const keyHash = utils.id(keys[0]); + const keyHash = id(keys[0]); const tokenId = await unsRegistry.namehash(['test-sgh-q5-3', 'crypto']); await mintingController.mintSLDWithResolver(coinbase.address, 'test-sgh-q5-3', coinbase.address); @@ -618,10 +633,10 @@ describe('ProxyReader', () => { }); it('should resolve empty records value for .crypto domain when resolver is not valid', async () => { - const keyHash = utils.id(keys[0]); + const keyHash = id(keys[0]); const tokenId = await unsRegistry.namehash(['test-sgh-q5-4', 'crypto']); - const nonResolverAddress = proxyReader.address; + const nonResolverAddress = await getContractAddress(proxyReader); await mintingController.mintSLDWithResolver(coinbase.address, 'test-sgh-q5-4', nonResolverAddress); @@ -646,7 +661,7 @@ describe('ProxyReader', () => { const tokenId = await unsRegistry.namehash(['hey_hoy_1037', 'wallet']); // act - const data = await proxyReader.callStatic.getData(keys, tokenId); + const data = await proxyReader.getData.staticCall(keys, tokenId); // asserts expect(data).to.be.eql([ZERO_ADDRESS, ZERO_ADDRESS, ['', '']]); @@ -657,7 +672,7 @@ describe('ProxyReader', () => { const tokenId = await cnsRegistry.childIdOf(TLD.CRYPTO, 'hey_hoy_1037'); // act - const data = await proxyReader.callStatic.getData(keys, tokenId); + const data = await proxyReader.getData.staticCall(keys, tokenId); // asserts expect(data).to.be.eql([ZERO_ADDRESS, ZERO_ADDRESS, ['', '']]); @@ -667,13 +682,13 @@ describe('ProxyReader', () => { // arrange const _domainName = 'hey_hoy_121'; const tokenId = await cnsRegistry.childIdOf(TLD.CRYPTO, _domainName); - await mintingController.mintSLDWithResolver(coinbase.address, _domainName, resolver.address); + await mintingController.mintSLDWithResolver(coinbase.address, _domainName, await resolver.getAddress()); // act - const data = await proxyReader.callStatic.getData(keys, tokenId); + const data = await proxyReader.getData.staticCall(keys, tokenId); // asserts - expect(data).to.be.eql([resolver.address, coinbase.address, ['', '']]); + expect(data).to.be.eql([await resolver.getAddress(), coinbase.address, ['', '']]); }); it('should return data for .wallet domain', async () => { @@ -681,10 +696,10 @@ describe('ProxyReader', () => { const tokenId = await mintDomain({ unsRegistry, owner: coinbase.address, labels: ['hey_hoy_121', 'wallet'] }); // act - const data = await proxyReader.callStatic.getData(keys, tokenId); + const data = await proxyReader.getData.staticCall(keys, tokenId); // asserts - expect(data).to.be.eql([unsRegistry.address, coinbase.address, ['', '']]); + expect(data).to.be.eql([await unsRegistry.getAddress(), coinbase.address, ['', '']]); }); it('should return data for .crypto domain when resolver is 0xdead', async () => { @@ -707,7 +722,7 @@ describe('ProxyReader', () => { it('should return data for .crypto domain when resolver is not valid', async () => { const tokenId = await unsRegistry.namehash(['hey-hoy-re-4723', 'crypto']); - const nonResolverAddress = proxyReader.address; + const nonResolverAddress = await getContractAddress(proxyReader); await mintingController.mintSLDWithResolver(coinbase.address, 'hey-hoy-re-4723', nonResolverAddress); @@ -719,7 +734,7 @@ describe('ProxyReader', () => { describe('getDataForMany', () => { it('should return empty lists for empty list of domains', async () => { - const data = await proxyReader.callStatic.getDataForMany([], []); + const data = await proxyReader.getDataForMany.staticCall([], []); expect(data).to.be.eql([[], [], []]); }); @@ -731,10 +746,17 @@ describe('ProxyReader', () => { const _cryptoTokenId = await unsRegistry.namehash([_domainName, 'crypto']); // act - const data = await proxyReader.callStatic.getDataForMany(keys, [_walletTokenId, _cryptoTokenId]); + const data = await proxyReader.getDataForMany.staticCall(keys, [_walletTokenId, _cryptoTokenId]); // asserts - expect(data).to.be.eql([[ZERO_ADDRESS, ZERO_ADDRESS], [ZERO_ADDRESS, ZERO_ADDRESS], [['', ''], ['', '']]]); + expect(data).to.be.eql([ + [ZERO_ADDRESS, ZERO_ADDRESS], + [ZERO_ADDRESS, ZERO_ADDRESS], + [ + ['', ''], + ['', ''], + ], + ]); }); it('should return data for multiple .crypto|.wallet domains', async () => { @@ -742,20 +764,23 @@ describe('ProxyReader', () => { const _domainName = 'test_1291'; const _cryptoTokenId = await unsRegistry.namehash([_domainName, 'crypto']); const _walletTokenId = await mintDomain({ unsRegistry, owner: coinbase, labels: [_domainName, 'wallet'] }); - await mintingController.mintSLDWithResolver(coinbase.address, _domainName, resolver.address); + await mintingController.mintSLDWithResolver(coinbase.address, _domainName, await resolver.getAddress()); for (let i = 0; i < keys.length; i++) { await resolver.set(keys[i], values[i], _cryptoTokenId); await unsRegistry.set(keys[i], values[i], _walletTokenId); } // act - const data = await proxyReader.callStatic.getDataForMany(keys, [_walletTokenId, _cryptoTokenId]); + const data = await proxyReader.getDataForMany.staticCall(keys, [_walletTokenId, _cryptoTokenId]); // assert expect(data).to.be.eql([ - [unsRegistry.address, resolver.address], + [await unsRegistry.getAddress(), await resolver.getAddress()], [coinbase.address, coinbase.address], - [['test.value1', 'test.value2'], ['test.value1', 'test.value2']], + [ + ['test.value1', 'test.value2'], + ['test.value1', 'test.value2'], + ], ]); }); @@ -764,11 +789,11 @@ describe('ProxyReader', () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); // act - const data = await proxyReader.callStatic.getDataForMany([], [walletTokenId, unknownTokenId]); + const data = await proxyReader.getDataForMany.staticCall([], [walletTokenId, unknownTokenId]); // assert expect(data).to.be.eql([ - [unsRegistry.address, ZERO_ADDRESS], + [await unsRegistry.getAddress(), ZERO_ADDRESS], [coinbase.address, ZERO_ADDRESS], [[], []], ]); @@ -778,12 +803,12 @@ describe('ProxyReader', () => { describe('getDataByHash', () => { it('should return empty data for non-existing .wallet domain', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const _domainName = 'hey_hoy_29224'; const _tokenId = await unsRegistry.namehash([_domainName, 'wallet']); // act - const data = await proxyReader.callStatic.getDataByHash(hashes, _tokenId); + const data = await proxyReader.getDataByHash.staticCall(hashes, _tokenId); // asserts expect(data).to.be.eql([ZERO_ADDRESS, ZERO_ADDRESS, ['', ''], ['', '']]); @@ -791,11 +816,11 @@ describe('ProxyReader', () => { it('should return empty data for non-existing .crypto domain', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const tokenId = await cnsRegistry.childIdOf(TLD.CRYPTO, 'hey_hoy_29228'); // act - const data = await proxyReader.callStatic.getDataByHash(hashes, tokenId); + const data = await proxyReader.getDataByHash.staticCall(hashes, tokenId); // asserts expect(data).to.be.eql([ZERO_ADDRESS, ZERO_ADDRESS, ['', ''], ['', '']]); @@ -803,48 +828,38 @@ describe('ProxyReader', () => { it('should return data by hashes for .crypto domain', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const _domainName = 'hey_hoy_292'; const tokenId = await cnsRegistry.childIdOf(TLD.CRYPTO, _domainName); - await mintingController.mintSLDWithResolver(coinbase.address, _domainName, resolver.address); + await mintingController.mintSLDWithResolver(coinbase.address, _domainName, await resolver.getAddress()); for (let i = 0; i < keys.length; i++) { await resolver.set(keys[i], values[i], tokenId); } // act - const data = await proxyReader.callStatic.getDataByHash(hashes, tokenId); + const data = await proxyReader.getDataByHash.staticCall(hashes, tokenId); // assert - expect(data).to.be.eql([ - resolver.address, - coinbase.address, - keys, - values, - ]); + expect(data).to.be.eql([await resolver.getAddress(), coinbase.address, keys, values]); }); it('should return data by hashes for .wallet domain', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const tokenId = await mintDomain({ unsRegistry, owner: coinbase.address, labels: ['hey_hoy_292', 'wallet'] }); for (let i = 0; i < keys.length; i++) { await unsRegistry.set(keys[i], values[i], tokenId); } // act - const data = await proxyReader.callStatic.getDataByHash(hashes, tokenId); + const data = await proxyReader.getDataByHash.staticCall(hashes, tokenId); // assert - expect(data).to.be.eql([ - unsRegistry.address, - coinbase.address, - keys, - values, - ]); + expect(data).to.be.eql([await unsRegistry.getAddress(), coinbase.address, keys, values]); }); it('should return data for .crypto domain when resolver is 0xdead', async () => { - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const tokenId = await unsRegistry.namehash(['hey-hoy-reh-2723', 'crypto']); await mintingController.mintSLDWithResolver(coinbase.address, 'hey-hoy-reh-2723', DEAD_ADDRESS); @@ -854,7 +869,7 @@ describe('ProxyReader', () => { }); it('should return data for .crypto domain when resolver is EOA', async () => { - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const tokenId = await unsRegistry.namehash(['hey-hoy-reh-3723', 'crypto']); await mintingController.mintSLDWithResolver(coinbase.address, 'hey-hoy-reh-3723', coinbase.address); @@ -864,10 +879,10 @@ describe('ProxyReader', () => { }); it('should return data for .crypto domain when resolver is not valid', async () => { - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const tokenId = await unsRegistry.namehash(['hey-hoy-reh-4723', 'crypto']); - const nonResolverAddress = proxyReader.address; + const nonResolverAddress = await getContractAddress(proxyReader); await mintingController.mintSLDWithResolver(coinbase.address, 'hey-hoy-reh-4723', nonResolverAddress); @@ -879,37 +894,43 @@ describe('ProxyReader', () => { describe('getDataByHashForMany', () => { it('should return empty lists for empty list of domains', async () => { - const data = await proxyReader.callStatic.getDataByHashForMany([], []); + const data = await proxyReader.getDataByHashForMany.staticCall([], []); expect(data).to.be.eql([[], [], [], []]); }); it('should return empty data for non-existing .crypto|.wallet domains', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const _domainName = 'hey_hoy_1037'; const _walletTokenId = await unsRegistry.namehash([_domainName, 'wallet']); const _cryptoTokenId = await unsRegistry.namehash([_domainName, 'crypto']); // act - const data = await proxyReader.callStatic.getDataByHashForMany(hashes, [_walletTokenId, _cryptoTokenId]); + const data = await proxyReader.getDataByHashForMany.staticCall(hashes, [_walletTokenId, _cryptoTokenId]); // asserts expect(data).to.be.eql([ [ZERO_ADDRESS, ZERO_ADDRESS], [ZERO_ADDRESS, ZERO_ADDRESS], - [['', ''], ['', '']], - [['', ''], ['', '']], + [ + ['', ''], + ['', ''], + ], + [ + ['', ''], + ['', ''], + ], ]); }); it('should return data for multiple .crypto|.wallet domains', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const _domainName = 'test_1082q'; const _cryptoTokenId = await unsRegistry.namehash([_domainName, 'crypto']); const _walletTokenId = await mintDomain({ unsRegistry, owner: coinbase, labels: ['test_1082q', 'wallet'] }); - await mintingController.mintSLDWithResolver(coinbase.address, _domainName, resolver.address); + await mintingController.mintSLDWithResolver(coinbase.address, _domainName, await resolver.getAddress()); for (let i = 0; i < keys.length; i++) { await resolver.set(keys[i], values[i], _cryptoTokenId); @@ -917,14 +938,20 @@ describe('ProxyReader', () => { } // act - const data = await proxyReader.callStatic.getDataByHashForMany(hashes, [_walletTokenId, _cryptoTokenId]); + const data = await proxyReader.getDataByHashForMany.staticCall(hashes, [_walletTokenId, _cryptoTokenId]); // assert expect(data).to.be.eql([ - [unsRegistry.address, resolver.address], + [await unsRegistry.getAddress(), await resolver.getAddress()], [coinbase.address, coinbase.address], - [['test.key1', 'test.key2'], ['test.key1', 'test.key2']], - [['test.value1', 'test.value2'], ['test.value1', 'test.value2']], + [ + ['test.key1', 'test.key2'], + ['test.key1', 'test.key2'], + ], + [ + ['test.value1', 'test.value2'], + ['test.value1', 'test.value2'], + ], ]); }); @@ -933,11 +960,11 @@ describe('ProxyReader', () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); // act - const data = await proxyReader.callStatic.getDataByHashForMany([], [walletTokenId, unknownTokenId]); + const data = await proxyReader.getDataByHashForMany.staticCall([], [walletTokenId, unknownTokenId]); // assert expect(data).to.be.eql([ - [unsRegistry.address, ZERO_ADDRESS], + [await unsRegistry.getAddress(), ZERO_ADDRESS], [coinbase.address, ZERO_ADDRESS], [[], []], [[], []], @@ -948,13 +975,13 @@ describe('ProxyReader', () => { describe('ownerOfForMany', () => { it('should return empty owner for unknown domain', async () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); - const owners = await proxyReader.callStatic.ownerOfForMany([unknownTokenId]); + const owners = await proxyReader.ownerOfForMany.staticCall([unknownTokenId]); expect(owners).to.be.eql([ZERO_ADDRESS]); }); it('should return empty list for empty list of domains', async () => { - const owners = await proxyReader.callStatic.ownerOfForMany([]); + const owners = await proxyReader.ownerOfForMany.staticCall([]); expect(owners).to.be.eql([]); }); @@ -963,10 +990,10 @@ describe('ProxyReader', () => { const _domainName = 'test_125t'; const _cryptoTokenId = await unsRegistry.namehash([_domainName, 'crypto']); const _walletTokenId = await mintDomain({ unsRegistry, owner: accounts[0], labels: ['test_125t', 'wallet'] }); - await mintingController.mintSLDWithResolver(coinbase.address, _domainName, resolver.address); + await mintingController.mintSLDWithResolver(coinbase.address, _domainName, await resolver.getAddress()); // act - const owners = await proxyReader.callStatic.ownerOfForMany([walletTokenId, _walletTokenId, _cryptoTokenId]); + const owners = await proxyReader.ownerOfForMany.staticCall([walletTokenId, _walletTokenId, _cryptoTokenId]); // assert expect(owners).to.be.eql([coinbase.address, accounts[0], coinbase.address]); @@ -977,7 +1004,7 @@ describe('ProxyReader', () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); // act - const owners = await proxyReader.callStatic.ownerOfForMany([walletTokenId, unknownTokenId]); + const owners = await proxyReader.ownerOfForMany.staticCall([walletTokenId, unknownTokenId]); // assert expect(owners).to.be.eql([coinbase.address, ZERO_ADDRESS]); @@ -993,24 +1020,12 @@ describe('ProxyReader', () => { const ethLegacyKey = 'crypto.ETH.address'; beforeEach(async () => { - await proxyReader.functions['addBlockchainNetworks(string[],string[])']( - ['MATIC', 'ETH'], - ['ETH', 'ETH'], - ); + await proxyReader['addBlockchainNetworks(string[],string[])'](['MATIC', 'ETH'], ['ETH', 'ETH']); - await proxyReader.addLegacyRecords( - ['token.ETH.MATIC.USDC.address'], - [[usdcMaticLegacyKey, usdcLegacyKey]], - ); - await proxyReader.addLegacyRecords( - ['token.ETH.ETH.USDC.address'], - [[usdcEthLegacyKey, usdcLegacyKey]], - ); + await proxyReader.addLegacyRecords(['token.ETH.MATIC.USDC.address'], [[usdcMaticLegacyKey, usdcLegacyKey]]); + await proxyReader.addLegacyRecords(['token.ETH.ETH.USDC.address'], [[usdcEthLegacyKey, usdcLegacyKey]]); - await proxyReader.addLegacyRecords( - ['token.ETH.ETH.ETH.address'], - [[ethLegacyKey]], - ); + await proxyReader.addLegacyRecords(['token.ETH.ETH.ETH.address'], [[ethLegacyKey]]); }); afterEach(async () => { @@ -1027,9 +1042,7 @@ describe('ProxyReader', () => { describe('getAddressKeys', () => { it('returns the list of address keys and legacy keys in the correct order', async () => { - expect( - await proxyReader.getAddressKeys('ETH', 'USDC'), - ).to.deep.equal([ + expect(await proxyReader.getAddressKeys('ETH', 'USDC')).to.deep.equal([ 'token.ETH.ETH.USDC.address', usdcEthLegacyKey, usdcLegacyKey, @@ -1037,9 +1050,7 @@ describe('ProxyReader', () => { 'token.ETH.address', ]); - expect( - await proxyReader.getAddressKeys('MATIC', 'USDC'), - ).to.deep.equal([ + expect(await proxyReader.getAddressKeys('MATIC', 'USDC')).to.deep.equal([ 'token.ETH.MATIC.USDC.address', usdcMaticLegacyKey, usdcLegacyKey, @@ -1047,9 +1058,7 @@ describe('ProxyReader', () => { 'token.ETH.address', ]); - expect( - await proxyReader.getAddressKeys('ETH', 'ETH'), - ).to.deep.equal([ + expect(await proxyReader.getAddressKeys('ETH', 'ETH')).to.deep.equal([ 'token.ETH.ETH.ETH.address', ethLegacyKey, 'token.ETH.ETH.address', @@ -1058,17 +1067,13 @@ describe('ProxyReader', () => { }); it('returns the list of address keys without legacy keys if they are not defined', async () => { - expect( - await proxyReader.getAddressKeys('ETH', 'USDT'), - ).to.deep.equal([ + expect(await proxyReader.getAddressKeys('ETH', 'USDT')).to.deep.equal([ 'token.ETH.ETH.USDT.address', 'token.ETH.ETH.address', 'token.ETH.address', ]); - expect( - await proxyReader.getAddressKeys('MATIC', 'MATIC'), - ).to.deep.equal([ + expect(await proxyReader.getAddressKeys('MATIC', 'MATIC')).to.deep.equal([ 'token.ETH.MATIC.MATIC.address', 'token.ETH.MATIC.address', 'token.ETH.address', @@ -1076,289 +1081,175 @@ describe('ProxyReader', () => { }); it('returns empty list when family is not defined', async () => { - expect( - await proxyReader.getAddressKeys('UDTOKEN', 'UDTOKEN'), - ).to.deep.equal([]); + expect(await proxyReader.getAddressKeys('UDTOKEN', 'UDTOKEN')).to.deep.equal([]); }); }); describe('getAddress', () => { + const getAddress = async (network: string, token: string, tokenId: bigint) => { + return await proxyReader.getFunction('getAddress')(network, token, tokenId); + }; + it('should return most specific record by address keys for UNS domains', async () => { - const [ - tokenKey, - legacyTokenKey1, - legacyTokenKey2, - networkKey, - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey1, legacyTokenKey2, networkKey, familyKey] = await proxyReader.getAddressKeys( + 'ETH', + 'USDC', + ); await unsRegistry.set(familyKey, 'family-level-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('family-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('family-level-record'); await unsRegistry.set(networkKey, 'network-level-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('network-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('network-level-record'); await unsRegistry.set(legacyTokenKey2, 'legacy-key-2-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('legacy-key-2-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('legacy-key-2-record'); await unsRegistry.set(legacyTokenKey1, 'legacy-key-1-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('legacy-key-1-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('legacy-key-1-record'); await unsRegistry.set(tokenKey, 'token-level-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('token-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('token-level-record'); }); it('should return most specific record by address keys for UNS domains with skipped levels', async () => { - const [ - tokenKey, - legacyTokenKey, - , - , - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey, , , familyKey] = await proxyReader.getAddressKeys('ETH', 'USDC'); await unsRegistry.set(tokenKey, 'token-level-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('token-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('token-level-record'); await unsRegistry.set(familyKey, 'family-level-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('token-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('token-level-record'); await unsRegistry.set(tokenKey, '', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('family-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('family-level-record'); await unsRegistry.set(legacyTokenKey, 'legacy-key-1-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('legacy-key-1-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('legacy-key-1-record'); }); it('should return most specific record by address keys for CNS domains', async () => { - const [ - tokenKey, - legacyTokenKey1, - legacyTokenKey2, - networkKey, - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey1, legacyTokenKey2, networkKey, familyKey] = await proxyReader.getAddressKeys( + 'ETH', + 'USDC', + ); await resolver.set(familyKey, 'family-level-record', cryptoTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', cryptoTokenId), - ).to.equal('family-level-record'); + expect(await getAddress('ETH', 'USDC', cryptoTokenId)).to.equal('family-level-record'); await resolver.set(networkKey, 'network-level-record', cryptoTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', cryptoTokenId), - ).to.equal('network-level-record'); + expect(await getAddress('ETH', 'USDC', cryptoTokenId)).to.equal('network-level-record'); await resolver.set(legacyTokenKey2, 'legacy-key-2-record', cryptoTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', cryptoTokenId), - ).to.equal('legacy-key-2-record'); + expect(await getAddress('ETH', 'USDC', cryptoTokenId)).to.equal('legacy-key-2-record'); await resolver.set(legacyTokenKey1, 'legacy-key-1-record', cryptoTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', cryptoTokenId), - ).to.equal('legacy-key-1-record'); + expect(await getAddress('ETH', 'USDC', cryptoTokenId)).to.equal('legacy-key-1-record'); await resolver.set(tokenKey, 'token-level-record', cryptoTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', cryptoTokenId), - ).to.equal('token-level-record'); + expect(await getAddress('ETH', 'USDC', cryptoTokenId)).to.equal('token-level-record'); }); it('should return most specific record by address keys for CNS domains with skipped levels', async () => { - const [ - tokenKey, - legacyTokenKey, - , - , - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey, , , familyKey] = await proxyReader.getAddressKeys('ETH', 'USDC'); await resolver.set(tokenKey, 'token-level-record', cryptoTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', cryptoTokenId), - ).to.equal('token-level-record'); + expect(await getAddress('ETH', 'USDC', cryptoTokenId)).to.equal('token-level-record'); await resolver.set(familyKey, 'family-level-record', cryptoTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', cryptoTokenId), - ).to.equal('token-level-record'); + expect(await getAddress('ETH', 'USDC', cryptoTokenId)).to.equal('token-level-record'); await resolver.set(tokenKey, '', cryptoTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', cryptoTokenId), - ).to.equal('family-level-record'); + expect(await getAddress('ETH', 'USDC', cryptoTokenId)).to.equal('family-level-record'); await resolver.set(legacyTokenKey, 'legacy-key-1-record', cryptoTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', cryptoTokenId), - ).to.equal('legacy-key-1-record'); + expect(await getAddress('ETH', 'USDC', cryptoTokenId)).to.equal('legacy-key-1-record'); }); it('should return empty string if family is not defined', async () => { - expect( - await proxyReader.getAddress('UDTOKEN', 'UDTOKEN', walletTokenId), - ).to.equal(''); + expect(await getAddress('UDTOKEN', 'UDTOKEN', walletTokenId)).to.equal(''); }); it('should return empty string if token does not exist', async () => { - expect( - await proxyReader.getAddress('ETH', 'USDC', 0x42), - ).to.equal(''); + expect(await getAddress('ETH', 'USDC', BigInt(0x42))).to.equal(''); }); }); describe('getAddressKey', () => { it('should return most specific record key by address keys for UNS domains', async () => { - const [ - tokenKey, - legacyTokenKey, - networkKey, - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey, networkKey, familyKey] = await proxyReader.getAddressKeys('ETH', 'USDC'); await unsRegistry.set(familyKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(familyKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(familyKey); await unsRegistry.set(networkKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(networkKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(networkKey); await unsRegistry.set(legacyTokenKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(legacyTokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(legacyTokenKey); await unsRegistry.set(tokenKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(tokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(tokenKey); }); it('should return most specific record key by address keys for UNS domains with skipped levels', async () => { - const [ - tokenKey, - legacyTokenKey, - , - , - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey, , , familyKey] = await proxyReader.getAddressKeys('ETH', 'USDC'); await unsRegistry.set(tokenKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(tokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(tokenKey); await unsRegistry.set(familyKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(tokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(tokenKey); await unsRegistry.set(tokenKey, '', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(familyKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(familyKey); await unsRegistry.set(legacyTokenKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(legacyTokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(legacyTokenKey); }); it('should return most specific record key by address keys for CNS domains', async () => { - const [ - tokenKey, - legacyTokenKey, - networkKey, - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey, networkKey, familyKey] = await proxyReader.getAddressKeys('ETH', 'USDC'); await resolver.set(familyKey, '42', cryptoTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId), - ).to.equal(familyKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId)).to.equal(familyKey); await resolver.set(networkKey, '42', cryptoTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId), - ).to.equal(networkKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId)).to.equal(networkKey); await resolver.set(legacyTokenKey, '42', cryptoTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId), - ).to.equal(legacyTokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId)).to.equal(legacyTokenKey); await resolver.set(tokenKey, '42', cryptoTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId), - ).to.equal(tokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId)).to.equal(tokenKey); }); it('should return most specific record key by address keys for CNS domains with skipped levels', async () => { - const [ - tokenKey, - legacyTokenKey, - , - , - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey, , , familyKey] = await proxyReader.getAddressKeys('ETH', 'USDC'); await resolver.set(tokenKey, '42', cryptoTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId), - ).to.equal(tokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId)).to.equal(tokenKey); await resolver.set(familyKey, '42', cryptoTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId), - ).to.equal(tokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId)).to.equal(tokenKey); await resolver.set(tokenKey, '', cryptoTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId), - ).to.equal(familyKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId)).to.equal(familyKey); await resolver.set(legacyTokenKey, 'legacy-key-1-record', cryptoTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId), - ).to.equal(legacyTokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', cryptoTokenId)).to.equal(legacyTokenKey); }); it('should return empty string if token does not exist', async () => { - expect( - await proxyReader.getAddressKey('ETH', 'USDC', 0x42), - ).to.equal(''); + expect(await proxyReader.getAddressKey('ETH', 'USDC', 0x42)).to.equal(''); }); it('should return empty string if family is not defined', async () => { - expect( - await proxyReader.getAddressKey('UDTOKEN', 'UDTOKEN', walletTokenId), - ).to.equal(''); + expect(await proxyReader.getAddressKey('UDTOKEN', 'UDTOKEN', walletTokenId)).to.equal(''); }); }); }); @@ -1387,7 +1278,7 @@ describe('ProxyReader', () => { const tokenId = await mintDomain({ unsRegistry, owner: accounts[3], labels: ['hey_hoy_98hds', 'wallet'] }); const address = await proxyReader.registryOf(tokenId); - expect(address).to.be.equal(unsRegistry.address); + expect(address).to.be.equal(await unsRegistry.getAddress()); }); it('should return value for .crypto domain', async () => { @@ -1396,54 +1287,54 @@ describe('ProxyReader', () => { await mintingController.mintSLD(accounts[3], _domainName); const address = await proxyReader.registryOf(_cryptoTokenId); - expect(address).to.be.equal(cnsRegistry.address); + expect(address).to.be.equal(await cnsRegistry.getAddress()); }); it('should return value for .crypto TLD', async () => { const address = await proxyReader.registryOf(TLD.CRYPTO); - expect(address).to.be.equal(cnsRegistry.address); + expect(address).to.be.equal(await cnsRegistry.getAddress()); }); it('should return value for .wallet TLD', async () => { const address = await proxyReader.registryOf(TLD.WALLET); - expect(address).to.be.equal(unsRegistry.address); + expect(address).to.be.equal(await unsRegistry.getAddress()); }); }); describe('Multicall', () => { - const abiCoder = new utils.AbiCoder(); + const abiCoder = new AbiCoder(); it('should return owners', async () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); - const owners = await proxyReader.callStatic.multicall([ + const owners = await proxyReader.multicall.staticCall([ proxyReader.interface.encodeFunctionData('ownerOf', [unknownTokenId]), proxyReader.interface.encodeFunctionData('ownerOf', [walletTokenId]), proxyReader.interface.encodeFunctionData('ownerOf', [cryptoTokenId]), ]); - const results = owners.map(owner => abiCoder.decode(['address'], owner)[0]); + const results = owners.map((owner) => abiCoder.decode(['address'], owner)[0]); expect(results).to.be.eql([ZERO_ADDRESS, coinbase.address, coinbase.address]); }); it('should return existance of tokens', async () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); - const owners = await proxyReader.callStatic.multicall([ + const owners = await proxyReader.multicall.staticCall([ proxyReader.interface.encodeFunctionData('exists', [unknownTokenId]), proxyReader.interface.encodeFunctionData('exists', [walletTokenId]), proxyReader.interface.encodeFunctionData('exists', [cryptoTokenId]), ]); - const results = owners.map(owner => abiCoder.decode(['bool'], owner)[0]); + const results = owners.map((owner) => abiCoder.decode(['bool'], owner)[0]); expect(results).to.be.eql([false, true, true]); }); it('should return token uri\'s for UNS and CNS', async () => { - const owners = await proxyReader.callStatic.multicall([ + const owners = await proxyReader.multicall.staticCall([ proxyReader.interface.encodeFunctionData('tokenURI', [cryptoTokenId]), proxyReader.interface.encodeFunctionData('tokenURI', [walletTokenId]), ]); - const results = owners.map(owner => abiCoder.decode(['string'], owner)[0]); + const results = owners.map((owner) => abiCoder.decode(['string'], owner)[0]); expect(results).to.be.eql([ 'test_42.crypto', '/40559307672254207728557027035302885851369665055277251407821151545011532191308', @@ -1453,7 +1344,7 @@ describe('ProxyReader', () => { it('should return heterogeneous call results', async () => { await resolver.set('het_key_111', 'het_value_1', cryptoTokenId); - const data = await proxyReader.callStatic.multicall([ + const data = await proxyReader.multicall.staticCall([ proxyReader.interface.encodeFunctionData('ownerOf', [cryptoTokenId]), proxyReader.interface.encodeFunctionData('get', ['het_key_111', cryptoTokenId]), proxyReader.interface.encodeFunctionData('getData', [['het_key_111'], cryptoTokenId]), @@ -1463,26 +1354,16 @@ describe('ProxyReader', () => { const results: Result[] = []; - [ - ['address'], - ['string'], - ['address', 'address', 'string[]'], - ['address[]'], - ['address'], - ].forEach((output, i) => { + [['address'], ['string'], ['address', 'address', 'string[]'], ['address[]'], ['address']].forEach((output, i) => { results.push(abiCoder.decode(output, data[i])); }); expect(results).to.be.eql([ [coinbase.address], ['het_value_1'], - [ - resolver.address, - coinbase.address, - ['het_value_1'], - ], + [await resolver.getAddress(), coinbase.address, ['het_value_1']], [[coinbase.address, coinbase.address]], - [unsRegistry.address], + [await unsRegistry.getAddress()], ]); }); }); @@ -1498,48 +1379,40 @@ describe('ProxyReader', () => { const selector = 'addBlockchainNetworks(string[],string[])'; it('should save blockchain networks to families mapping', async () => { - await proxyReader.connect(coinbase)[selector]( - ['NETWORK', 'NETWORK2'], ['FAMILY', 'FAMILY2'], - ); + await proxyReader.connect(coinbase)[selector](['NETWORK', 'NETWORK2'], ['FAMILY', 'FAMILY2']); - const [key1 ] = await proxyReader.getAddressKeys('NETWORK', 'TOKEN'); - const [key2 ] = await proxyReader.getAddressKeys('NETWORK2', 'TOKEN2'); + const [key1] = await proxyReader.getAddressKeys('NETWORK', 'TOKEN'); + const [key2] = await proxyReader.getAddressKeys('NETWORK2', 'TOKEN2'); expect(key1).to.equal('token.FAMILY.NETWORK.TOKEN.address'); expect(key2).to.equal('token.FAMILY2.NETWORK2.TOKEN2.address'); - await proxyReader.connect(coinbase)[selector]( - ['NETWORK'], ['ANOTHER_FAMILY'], - ); + await proxyReader.connect(coinbase)[selector](['NETWORK'], ['ANOTHER_FAMILY']); - const [key3 ] = await proxyReader.getAddressKeys('NETWORK', 'TOKEN'); + const [key3] = await proxyReader.getAddressKeys('NETWORK', 'TOKEN'); expect(key3).to.equal('token.ANOTHER_FAMILY.NETWORK.TOKEN.address'); }); it('should emit SetNetworkFamily event', async () => { - await expect( - proxyReader.connect(coinbase)[selector]( - ['MATIC'], ['ETH'], - ), - ).to.emit(proxyReader, 'SetNetworkFamily').withArgs('MATIC'); + await expect(proxyReader.connect(coinbase)[selector](['MATIC'], ['ETH'])) + .to.emit(proxyReader, 'SetNetworkFamily') + .withArgs('MATIC'); - await expect( - proxyReader.connect(coinbase)[selector]( - ['MATIC', 'BSC'], ['ETH', 'ETH'], - ), - ).to.emit(proxyReader, 'SetNetworkFamily').withArgs('BSC'); + await expect(proxyReader.connect(coinbase)[selector](['MATIC', 'BSC'], ['ETH', 'ETH'])) + .to.emit(proxyReader, 'SetNetworkFamily') + .withArgs('BSC'); }); it('should revert if not owner', async () => { - await expect( - proxyReader.connect(reader)[selector]([], []), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(proxyReader.connect(reader)[selector]([], [])).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); it('should revert if args arrays have different lengths', async () => { - await expect( - proxyReader.connect(coinbase)[selector](['NETWORK'], []), - ).to.be.revertedWith('ProxyReader: LENGTH_NOT_EQUAL'); + await expect(proxyReader.connect(coinbase)[selector](['NETWORK'], [])).to.be.revertedWith( + 'ProxyReader: LENGTH_NOT_EQUAL', + ); }); }); @@ -1547,61 +1420,49 @@ describe('ProxyReader', () => { const selector = 'addBlockchainNetworks(string[],string)'; it('should save blockchain networks to families mapping', async () => { - await proxyReader.connect(coinbase)[selector]( - ['NETWORK', 'NETWORK2'], 'FAMILY', - ); + await proxyReader.connect(coinbase)[selector](['NETWORK', 'NETWORK2'], 'FAMILY'); - const [key1 ] = await proxyReader.getAddressKeys('NETWORK', 'TOKEN'); - const [key2 ] = await proxyReader.getAddressKeys('NETWORK2', 'TOKEN2'); + const [key1] = await proxyReader.getAddressKeys('NETWORK', 'TOKEN'); + const [key2] = await proxyReader.getAddressKeys('NETWORK2', 'TOKEN2'); expect(key1).to.equal('token.FAMILY.NETWORK.TOKEN.address'); expect(key2).to.equal('token.FAMILY.NETWORK2.TOKEN2.address'); - await proxyReader.connect(coinbase)[selector]( - ['NETWORK2'], 'ANOTHER_FAMILY', - ); + await proxyReader.connect(coinbase)[selector](['NETWORK2'], 'ANOTHER_FAMILY'); - const [key3 ] = await proxyReader.getAddressKeys('NETWORK2', 'TOKEN'); + const [key3] = await proxyReader.getAddressKeys('NETWORK2', 'TOKEN'); expect(key3).to.equal('token.ANOTHER_FAMILY.NETWORK2.TOKEN.address'); }); it('should emit SetNetworkFamily event', async () => { - await expect( - proxyReader.connect(coinbase)[selector]( - ['MATIC'], 'ETH', - ), - ).to.emit(proxyReader, 'SetNetworkFamily').withArgs('MATIC'); + await expect(proxyReader.connect(coinbase)[selector](['MATIC'], 'ETH')) + .to.emit(proxyReader, 'SetNetworkFamily') + .withArgs('MATIC'); - await expect( - proxyReader.connect(coinbase)[selector]( - ['MATIC', 'BSC'], 'ETH', - ), - ).to.emit(proxyReader, 'SetNetworkFamily').withArgs('BSC'); + await expect(proxyReader.connect(coinbase)[selector](['MATIC', 'BSC'], 'ETH')) + .to.emit(proxyReader, 'SetNetworkFamily') + .withArgs('BSC'); }); it('should revert if not owner', async () => { - await expect( - proxyReader.connect(reader)[selector](['NETWORK'], 'TOKEN'), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(proxyReader.connect(reader)[selector](['NETWORK'], 'TOKEN')).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); }); describe('addLegacyRecords(string[],string[][])', () => { it('should save legacy keys and overwrite existing', async () => { - await proxyReader.connect(coinbase)['addBlockchainNetworks(string[],string)']( - ['SOME_NETWORK', 'SOME_OTHER_NETWORK'], 'SOME_FAMILY', - ); + await proxyReader + .connect(coinbase) + ['addBlockchainNetworks(string[],string)'](['SOME_NETWORK', 'SOME_OTHER_NETWORK'], 'SOME_FAMILY'); - await proxyReader.connect(coinbase).addLegacyRecords( - [ - 'token.SOME_FAMILY.SOME_NETWORK.TOKEN.address', - 'token.SOME_FAMILY.SOME_OTHER_NETWORK.TOKEN.address', - ], - [ - ['legacyRecord', 'legacyRecord2'], - ['otherLegacyRecord'], - ], - ); + await proxyReader + .connect(coinbase) + .addLegacyRecords( + ['token.SOME_FAMILY.SOME_NETWORK.TOKEN.address', 'token.SOME_FAMILY.SOME_OTHER_NETWORK.TOKEN.address'], + [['legacyRecord', 'legacyRecord2'], ['otherLegacyRecord']], + ); const keys = await proxyReader.getAddressKeys('SOME_NETWORK', 'TOKEN'); const keys2 = await proxyReader.getAddressKeys('SOME_OTHER_NETWORK', 'TOKEN'); @@ -1613,14 +1474,12 @@ describe('ProxyReader', () => { expect(keys2.length).to.equal(4); expect(keys2[1]).to.equal('otherLegacyRecord'); - await proxyReader.connect(coinbase).addLegacyRecords( - [ - 'token.SOME_FAMILY.SOME_NETWORK.TOKEN.address', - ], - [ - ['legacyRecord', 'legacyRecord2', 'legacyRecord3'], - ], - ); + await proxyReader + .connect(coinbase) + .addLegacyRecords( + ['token.SOME_FAMILY.SOME_NETWORK.TOKEN.address'], + [['legacyRecord', 'legacyRecord2', 'legacyRecord3']], + ); const keys3 = await proxyReader.getAddressKeys('SOME_NETWORK', 'TOKEN'); @@ -1629,12 +1488,7 @@ describe('ProxyReader', () => { expect(keys3[2]).to.equal('legacyRecord2'); expect(keys3[3]).to.equal('legacyRecord3'); - await proxyReader.connect(coinbase).addLegacyRecords( - [ - 'token.SOME_FAMILY.SOME_NETWORK.TOKEN.address', - ], - [[]], - ); + await proxyReader.connect(coinbase).addLegacyRecords(['token.SOME_FAMILY.SOME_NETWORK.TOKEN.address'], [[]]); const keys4 = await proxyReader.getAddressKeys('SOME_NETWORK', 'TOKEN'); expect(keys4.length).to.equal(3); @@ -1644,33 +1498,25 @@ describe('ProxyReader', () => { const tokenKey1 = 'token.FAMILY.NETWORK.TOKEN.address'; const tokenKey2 = 'token.FAMILY2.NETWORK.TOKEN.address'; - await expect( - proxyReader.connect(coinbase).addLegacyRecords( - [tokenKey1], - [[]], - ), - ).to.emit(proxyReader, 'SetLegacyRecords') + await expect(proxyReader.connect(coinbase).addLegacyRecords([tokenKey1], [[]])) + .to.emit(proxyReader, 'SetLegacyRecords') .withArgs(tokenKey1); - await expect( - proxyReader.connect(coinbase).addLegacyRecords( - [tokenKey1, tokenKey2], - [[], []], - ), - ).to.emit(proxyReader, 'SetLegacyRecords') + await expect(proxyReader.connect(coinbase).addLegacyRecords([tokenKey1, tokenKey2], [[], []])) + .to.emit(proxyReader, 'SetLegacyRecords') .withArgs(tokenKey2); }); it('should revert if args arrays have different lengths', async () => { - await expect( - proxyReader.connect(coinbase).addLegacyRecords(['RECORD_KEY'], []), - ).to.be.revertedWith('ProxyReader: LENGTH_NOT_EQUAL'); + await expect(proxyReader.connect(coinbase).addLegacyRecords(['RECORD_KEY'], [])).to.be.revertedWith( + 'ProxyReader: LENGTH_NOT_EQUAL', + ); }); it('should revert if not owner', async () => { - await expect( - proxyReader.connect(reader).addLegacyRecords([], []), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(proxyReader.connect(reader).addLegacyRecords([], [])).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); }); }); @@ -1683,9 +1529,7 @@ describe('ProxyReader', () => { }); it('has an owner', async () => { - expect( - await proxyReader.owner(), - ).to.equal(coinbase.address); + expect(await proxyReader.owner()).to.equal(coinbase.address); }); describe('transferOwnership', () => { @@ -1698,15 +1542,15 @@ describe('ProxyReader', () => { }); it('reverts if non-owner', async () => { - await expect( - proxyReader.transferOwnership(newOwner.address), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(proxyReader.transferOwnership(newOwner.address)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); it('guards ownership against stuck state', async function () { - await expect( - proxyReader.connect(newOwner).transferOwnership(ZERO_ADDRESS), - ).to.be.revertedWith('Ownable: new owner is the zero address'); + await expect(proxyReader.connect(newOwner).transferOwnership(ZERO_ADDRESS)).to.be.revertedWith( + 'Ownable: new owner is the zero address', + ); }); }); @@ -1720,9 +1564,7 @@ describe('ProxyReader', () => { }); it('prevents non-owners from renouncement', async function () { - await expect( - proxyReader.renounceOwnership(), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(proxyReader.renounceOwnership()).to.be.revertedWith('Ownable: caller is not the owner'); }); }); }); diff --git a/test/ProxyReader.uns.test.ts b/test/ProxyReader.uns.test.ts index 7104ae2e..25911779 100644 --- a/test/ProxyReader.uns.test.ts +++ b/test/ProxyReader.uns.test.ts @@ -1,8 +1,7 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; - -import { BigNumber, utils } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { id } from 'ethers'; import { ProxyReader, UNSRegistry } from '../types/contracts'; import { ProxyReader__factory, UNSRegistry__factory } from '../types/factories/contracts'; import { getInterfaceId } from './helpers/proxy'; @@ -16,12 +15,12 @@ describe('ProxyReader (UNS only)', () => { let unsRegistry: UNSRegistry, proxyReader: ProxyReader; let signers: SignerWithAddress[], coinbase: SignerWithAddress, accounts: string[]; - let walletTokenId: BigNumber, cryptoTokenId: BigNumber; + let walletTokenId: bigint, cryptoTokenId: bigint; before(async () => { signers = await ethers.getSigners(); [coinbase] = signers; - [, ...accounts] = signers.map(s => s.address); + [, ...accounts] = signers.map((s) => s.address); // deploy UNS unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); @@ -49,7 +48,7 @@ describe('ProxyReader (UNS only)', () => { }); proxyReader = await new ProxyReader__factory(coinbase).deploy(); - await proxyReader.initialize(unsRegistry.address, ZERO_ADDRESS); + await proxyReader.initialize(unsRegistry.getAddress(), ZERO_ADDRESS); }); it('should support IERC165 interface', async () => { @@ -62,8 +61,17 @@ describe('ProxyReader (UNS only)', () => { describe('IRegistryReader', () => { it('should support IRegistryReader interface', async () => { const functions = [ - 'tokenURI', 'isApprovedOrOwner', 'resolverOf', 'namehash', 'balanceOf', - 'ownerOf', 'getApproved', 'isApprovedForAll', 'exists', 'reverseOf', 'reverseNameOf', + 'tokenURI', + 'isApprovedOrOwner', + 'resolverOf', + 'namehash', + 'balanceOf', + 'ownerOf', + 'getApproved', + 'isApprovedForAll', + 'exists', + 'reverseOf', + 'reverseNameOf', ]; const interfaceId = getInterfaceId(proxyReader, functions); @@ -71,9 +79,9 @@ describe('ProxyReader (UNS only)', () => { }); it('should revert isApprovedForAll call', async () => { - await expect( - proxyReader.isApprovedForAll(accounts[0], accounts[1]), - ).to.be.revertedWith('ProxyReader: UNSUPPORTED_METHOD'); + await expect(proxyReader.isApprovedForAll(accounts[0], accounts[1])).to.be.revertedWith( + 'ProxyReader: UNSUPPORTED_METHOD', + ); }); describe('getApproved', () => { @@ -165,7 +173,7 @@ describe('ProxyReader (UNS only)', () => { describe('ownerOf', () => { it('should return empty owner for unknown domain', async () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); - const owners = await proxyReader.callStatic.ownerOf(unknownTokenId); + const owners = await proxyReader.ownerOf.staticCall(unknownTokenId); expect(owners).to.be.equal(ZERO_ADDRESS); }); @@ -192,7 +200,7 @@ describe('ProxyReader (UNS only)', () => { const resolverResult = await unsRegistry.resolverOf(walletTokenId); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be.equal(unsRegistry.address); + expect(resolverResult).to.be.equal(await unsRegistry.getAddress()); }); it('should return resolver of .crypto domain', async () => { @@ -200,7 +208,7 @@ describe('ProxyReader (UNS only)', () => { const resolverResult = await unsRegistry.resolverOf(cryptoTokenId); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be.equal(unsRegistry.address); + expect(resolverResult).to.be.equal(await unsRegistry.getAddress()); }); it('should return false value when token does not exist', async () => { @@ -215,8 +223,9 @@ describe('ProxyReader (UNS only)', () => { const resolverResult = await unsRegistry.tokenURI(walletTokenId); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be - .equal('/40559307672254207728557027035302885851369665055277251407821151545011532191308'); + expect(resolverResult).to.be.equal( + '/40559307672254207728557027035302885851369665055277251407821151545011532191308', + ); }); it('should return tokenURI of .crypto domain', async () => { @@ -224,8 +233,9 @@ describe('ProxyReader (UNS only)', () => { const resolverResult = await unsRegistry.tokenURI(cryptoTokenId); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be - .equal('/107771857897517834290909154724501010203356272148473478760301214125032721342346'); + expect(resolverResult).to.be.equal( + '/107771857897517834290909154724501010203356272148473478760301214125032721342346', + ); }); it('should return empty tokenURI when token does not exist', async () => { @@ -240,8 +250,9 @@ describe('ProxyReader (UNS only)', () => { const resolverResult = await unsRegistry.namehash(['test', 'wallet']); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be - .equal('50586162622368517199428676025463367639931450566950616867100918499864570754504'); + expect(resolverResult).to.be.equal( + '50586162622368517199428676025463367639931450566950616867100918499864570754504', + ); }); it('should return namehash of .crypto domain', async () => { @@ -249,8 +260,9 @@ describe('ProxyReader (UNS only)', () => { const resolverResult = await unsRegistry.namehash(['test', 'crypto']); expect(proxyResult).to.be.equal(resolverResult); - expect(resolverResult).to.be - .equal('82856763987730893573226808376519199326595862773989062576563108342755511775491'); + expect(resolverResult).to.be.equal( + '82856763987730893573226808376519199326595862773989062576563108342755511775491', + ); }); }); @@ -405,7 +417,7 @@ describe('ProxyReader (UNS only)', () => { describe('getByHash', () => { it('should return value of record for .wallet domain', async () => { - const keyHash = utils.id('get_key_4235'); + const keyHash = id('get_key_4235'); await unsRegistry.set('get_key_4235', 'value1454', walletTokenId); const proxyResult = await proxyReader.getByHash(keyHash, walletTokenId); @@ -416,7 +428,7 @@ describe('ProxyReader (UNS only)', () => { }); it('should return value of record for .crypto domain', async () => { - const keyHash = utils.id('get_key_0946'); + const keyHash = id('get_key_0946'); await unsRegistry.set('get_key_0946', 'value4521', cryptoTokenId); const proxyResult = await proxyReader.getByHash(keyHash, cryptoTokenId); @@ -429,7 +441,7 @@ describe('ProxyReader (UNS only)', () => { describe('getManyByHash', () => { it('should return list with empty value for unregistered key', async () => { - const keyHash = utils.id('key_aaaaaa'); + const keyHash = id('key_aaaaaa'); const result = await proxyReader.getManyByHash([keyHash], walletTokenId); expect(result[0]).to.be.eql(['']); }); @@ -437,7 +449,7 @@ describe('ProxyReader (UNS only)', () => { it('should return list with single value for .wallet domain', async () => { const [key] = keys; const [value] = values; - const keyHash = utils.id(key); + const keyHash = id(key); await unsRegistry.set(key, value, walletTokenId); const proxyResult = await proxyReader.getManyByHash([keyHash], walletTokenId); @@ -450,7 +462,7 @@ describe('ProxyReader (UNS only)', () => { it('should return list with single value for .crypto domain', async () => { const [key] = keys; const [value] = values; - const keyHash = utils.id(key); + const keyHash = id(key); await unsRegistry.set(key, value, cryptoTokenId); const proxyResult = await proxyReader.getManyByHash([keyHash], cryptoTokenId); @@ -477,7 +489,7 @@ describe('ProxyReader (UNS only)', () => { const _tokenId = await unsRegistry.namehash([_domainName, 'wallet']); // act - const data = await proxyReader.callStatic.getData(keys, _tokenId); + const data = await proxyReader.getData.staticCall(keys, _tokenId); // asserts expect(data).to.be.eql([ZERO_ADDRESS, ZERO_ADDRESS, ['', '']]); @@ -489,7 +501,7 @@ describe('ProxyReader (UNS only)', () => { const _tokenId = await unsRegistry.namehash([_domainName, 'crypto']); // act - const data = await proxyReader.callStatic.getData(keys, _tokenId); + const data = await proxyReader.getData.staticCall(keys, _tokenId); // asserts expect(data).to.be.eql([ZERO_ADDRESS, ZERO_ADDRESS, ['', '']]); @@ -500,10 +512,10 @@ describe('ProxyReader (UNS only)', () => { const tokenId = await mintDomain({ unsRegistry, owner: coinbase.address, labels: ['hey_hoy_121', 'crypto'] }); // act - const data = await proxyReader.callStatic.getData(keys, tokenId); + const data = await proxyReader.getData.staticCall(keys, tokenId); // asserts - expect(data).to.be.eql([unsRegistry.address, coinbase.address, ['', '']]); + expect(data).to.be.eql([await unsRegistry.getAddress(), coinbase.address, ['', '']]); }); it('should return data for .wallet domain', async () => { @@ -511,16 +523,16 @@ describe('ProxyReader (UNS only)', () => { const tokenId = await mintDomain({ unsRegistry, owner: coinbase.address, labels: ['hey_hoy_121', 'wallet'] }); // act - const data = await proxyReader.callStatic.getData(keys, tokenId); + const data = await proxyReader.getData.staticCall(keys, tokenId); // asserts - expect(data).to.be.eql([unsRegistry.address, coinbase.address, ['', '']]); + expect(data).to.be.eql([await unsRegistry.getAddress(), coinbase.address, ['', '']]); }); }); describe('getDataForMany', () => { it('should return empty lists for empty list of domains', async () => { - const data = await proxyReader.callStatic.getDataForMany([], []); + const data = await proxyReader.getDataForMany.staticCall([], []); expect(data).to.be.eql([[], [], []]); }); @@ -532,10 +544,17 @@ describe('ProxyReader (UNS only)', () => { const _cryptoTokenId = await unsRegistry.namehash([_domainName, 'crypto']); // act - const data = await proxyReader.callStatic.getDataForMany(keys, [_walletTokenId, _cryptoTokenId]); + const data = await proxyReader.getDataForMany.staticCall(keys, [_walletTokenId, _cryptoTokenId]); // asserts - expect(data).to.be.eql([[ZERO_ADDRESS, ZERO_ADDRESS], [ZERO_ADDRESS, ZERO_ADDRESS], [['', ''], ['', '']]]); + expect(data).to.be.eql([ + [ZERO_ADDRESS, ZERO_ADDRESS], + [ZERO_ADDRESS, ZERO_ADDRESS], + [ + ['', ''], + ['', ''], + ], + ]); }); it('should return data for multiple .crypto|.wallet domains', async () => { @@ -550,13 +569,16 @@ describe('ProxyReader (UNS only)', () => { } // act - const data = await proxyReader.callStatic.getDataForMany(keys, [_walletTokenId, _cryptoTokenId]); + const data = await proxyReader.getDataForMany.staticCall(keys, [_walletTokenId, _cryptoTokenId]); // assert expect(data).to.be.eql([ - [unsRegistry.address, unsRegistry.address], + [await unsRegistry.getAddress(), await unsRegistry.getAddress()], [coinbase.address, coinbase.address], - [['test.value1', 'test.value2'], ['test.value1', 'test.value2']], + [ + ['test.value1', 'test.value2'], + ['test.value1', 'test.value2'], + ], ]); }); @@ -565,11 +587,11 @@ describe('ProxyReader (UNS only)', () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); // act - const data = await proxyReader.callStatic.getDataForMany([], [walletTokenId, unknownTokenId]); + const data = await proxyReader.getDataForMany.staticCall([], [walletTokenId, unknownTokenId]); // assert expect(data).to.be.eql([ - [unsRegistry.address, ZERO_ADDRESS], + [await unsRegistry.getAddress(), ZERO_ADDRESS], [coinbase.address, ZERO_ADDRESS], [[], []], ]); @@ -579,12 +601,12 @@ describe('ProxyReader (UNS only)', () => { describe('getDataByHash', () => { it('should return empty data for non-existing .wallet domain', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const _domainName = 'hey_hoy_29224'; const _tokenId = await unsRegistry.namehash([_domainName, 'wallet']); // act - const data = await proxyReader.callStatic.getDataByHash(hashes, _tokenId); + const data = await proxyReader.getDataByHash.staticCall(hashes, _tokenId); // asserts expect(data).to.be.eql([ZERO_ADDRESS, ZERO_ADDRESS, keys, ['', '']]); @@ -592,12 +614,12 @@ describe('ProxyReader (UNS only)', () => { it('should return empty data for non-existing .crypto domain', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const _domainName = 'hey_hoy_29228'; const _tokenId = await unsRegistry.namehash([_domainName, 'crypto']); // act - const data = await proxyReader.callStatic.getDataByHash(hashes, _tokenId); + const data = await proxyReader.getDataByHash.staticCall(hashes, _tokenId); // asserts expect(data).to.be.eql([ZERO_ADDRESS, ZERO_ADDRESS, keys, ['', '']]); @@ -605,74 +627,67 @@ describe('ProxyReader (UNS only)', () => { it('should return data by hashes for .crypto domain', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const tokenId = await mintDomain({ unsRegistry, owner: coinbase.address, labels: ['hey_hoy_292', 'crypto'] }); for (let i = 0; i < keys.length; i++) { await unsRegistry.set(keys[i], values[i], tokenId); } // act - const data = await proxyReader.callStatic.getDataByHash(hashes, tokenId); + const data = await proxyReader.getDataByHash.staticCall(hashes, tokenId); // assert - expect(data).to.be.eql([ - unsRegistry.address, - coinbase.address, - keys, - values, - ]); + expect(data).to.be.eql([await unsRegistry.getAddress(), coinbase.address, keys, values]); }); it('should return data by hashes for .wallet domain', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const tokenId = await mintDomain({ unsRegistry, owner: coinbase.address, labels: ['hey_hoy_292', 'wallet'] }); for (let i = 0; i < keys.length; i++) { await unsRegistry.set(keys[i], values[i], tokenId); } // act - const data = await proxyReader.callStatic.getDataByHash(hashes, tokenId); + const data = await proxyReader.getDataByHash.staticCall(hashes, tokenId); // assert - expect(data).to.be.eql([ - unsRegistry.address, - coinbase.address, - keys, - values, - ]); + expect(data).to.be.eql([await unsRegistry.getAddress(), coinbase.address, keys, values]); }); }); describe('getDataByHashForMany', () => { it('should return empty lists for empty list of domains', async () => { - const data = await proxyReader.callStatic.getDataByHashForMany([], []); + const data = await proxyReader.getDataByHashForMany.staticCall([], []); expect(data).to.be.eql([[], [], [], []]); }); it('should return empty data for non-existing .crypto|.wallet domains', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const _domainName = 'hey_hoy_1037'; const _walletTokenId = await unsRegistry.namehash([_domainName, 'wallet']); const _cryptoTokenId = await unsRegistry.namehash([_domainName, 'crypto']); // act - const data = await proxyReader.callStatic.getDataByHashForMany(hashes, [_walletTokenId, _cryptoTokenId]); + const data = await proxyReader.getDataByHashForMany.staticCall(hashes, [_walletTokenId, _cryptoTokenId]); // asserts expect(data).to.be.eql([ [ZERO_ADDRESS, ZERO_ADDRESS], [ZERO_ADDRESS, ZERO_ADDRESS], [keys, keys], - [['', ''], ['', '']], + [ + ['', ''], + ['', ''], + ], ]); }); it('should return data for multiple .crypto|.wallet domains', async () => { // arrange - const hashes = keys.map(utils.id); + const hashes = keys.map(id); const _domainName = 'test_1082q'; const _walletTokenId = await mintDomain({ unsRegistry, owner: coinbase, labels: [_domainName, 'wallet'] }); const _cryptoTokenId = await mintDomain({ unsRegistry, owner: coinbase, labels: [_domainName, 'crypto'] }); @@ -683,14 +698,20 @@ describe('ProxyReader (UNS only)', () => { } // act - const data = await proxyReader.callStatic.getDataByHashForMany(hashes, [_walletTokenId, _cryptoTokenId]); + const data = await proxyReader.getDataByHashForMany.staticCall(hashes, [_walletTokenId, _cryptoTokenId]); // assert expect(data).to.be.eql([ - [unsRegistry.address, unsRegistry.address], + [await unsRegistry.getAddress(), await unsRegistry.getAddress()], [coinbase.address, coinbase.address], - [['test.key1', 'test.key2'], ['test.key1', 'test.key2']], - [['test.value1', 'test.value2'], ['test.value1', 'test.value2']], + [ + ['test.key1', 'test.key2'], + ['test.key1', 'test.key2'], + ], + [ + ['test.value1', 'test.value2'], + ['test.value1', 'test.value2'], + ], ]); }); @@ -699,11 +720,11 @@ describe('ProxyReader (UNS only)', () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); // act - const data = await proxyReader.callStatic.getDataByHashForMany([], [walletTokenId, unknownTokenId]); + const data = await proxyReader.getDataByHashForMany.staticCall([], [walletTokenId, unknownTokenId]); // assert expect(data).to.be.eql([ - [unsRegistry.address, ZERO_ADDRESS], + [await unsRegistry.getAddress(), ZERO_ADDRESS], [coinbase.address, ZERO_ADDRESS], [[], []], [[], []], @@ -714,12 +735,12 @@ describe('ProxyReader (UNS only)', () => { describe('ownerOfForMany', () => { it('should return empty owner for unknown domain', async () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); - const owners = await proxyReader.callStatic.ownerOfForMany([unknownTokenId]); + const owners = await proxyReader.ownerOfForMany.staticCall([unknownTokenId]); expect(owners).to.be.eql([ZERO_ADDRESS]); }); it('should return empty list for empty list of domains', async () => { - const owners = await proxyReader.callStatic.ownerOfForMany([]); + const owners = await proxyReader.ownerOfForMany.staticCall([]); expect(owners).to.be.eql([]); }); @@ -730,7 +751,7 @@ describe('ProxyReader (UNS only)', () => { const _cryptoTokenId = await mintDomain({ unsRegistry, owner: coinbase, labels: [_domainName, 'crypto'] }); // act - const owners = await proxyReader.callStatic.ownerOfForMany([walletTokenId, _walletTokenId, _cryptoTokenId]); + const owners = await proxyReader.ownerOfForMany.staticCall([walletTokenId, _walletTokenId, _cryptoTokenId]); // assert expect(owners).to.be.eql([coinbase.address, accounts[0], coinbase.address]); @@ -741,7 +762,7 @@ describe('ProxyReader (UNS only)', () => { const unknownTokenId = await unsRegistry.namehash(['unknown', 'crypto']); // act - const owners = await proxyReader.callStatic.ownerOfForMany([walletTokenId, unknownTokenId]); + const owners = await proxyReader.ownerOfForMany.staticCall([walletTokenId, unknownTokenId]); // assert expect(owners).to.be.eql([coinbase.address, ZERO_ADDRESS]); @@ -757,24 +778,12 @@ describe('ProxyReader (UNS only)', () => { const ethLegacyKey = 'crypto.ETH.address'; beforeEach(async () => { - await proxyReader['addBlockchainNetworks(string[],string[])']( - ['MATIC', 'ETH'], - ['ETH', 'ETH'], - ); + await proxyReader['addBlockchainNetworks(string[],string[])'](['MATIC', 'ETH'], ['ETH', 'ETH']); - await proxyReader.addLegacyRecords( - ['token.ETH.MATIC.USDC.address'], - [[usdcMaticLegacyKey, usdcLegacyKey]], - ); - await proxyReader.addLegacyRecords( - ['token.ETH.ETH.USDC.address'], - [[usdcEthLegacyKey, usdcLegacyKey]], - ); + await proxyReader.addLegacyRecords(['token.ETH.MATIC.USDC.address'], [[usdcMaticLegacyKey, usdcLegacyKey]]); + await proxyReader.addLegacyRecords(['token.ETH.ETH.USDC.address'], [[usdcEthLegacyKey, usdcLegacyKey]]); - await proxyReader.addLegacyRecords( - ['token.ETH.ETH.ETH.address'], - [[ethLegacyKey]], - ); + await proxyReader.addLegacyRecords(['token.ETH.ETH.ETH.address'], [[ethLegacyKey]]); }); afterEach(async () => { @@ -790,9 +799,7 @@ describe('ProxyReader (UNS only)', () => { describe('getAddressKeys', () => { it('returns the list of address keys and legacy keys in the correct order', async () => { - expect( - await proxyReader.getAddressKeys('ETH', 'USDC'), - ).to.deep.equal([ + expect(await proxyReader.getAddressKeys('ETH', 'USDC')).to.deep.equal([ 'token.ETH.ETH.USDC.address', usdcEthLegacyKey, usdcLegacyKey, @@ -800,9 +807,7 @@ describe('ProxyReader (UNS only)', () => { 'token.ETH.address', ]); - expect( - await proxyReader.getAddressKeys('MATIC', 'USDC'), - ).to.deep.equal([ + expect(await proxyReader.getAddressKeys('MATIC', 'USDC')).to.deep.equal([ 'token.ETH.MATIC.USDC.address', usdcMaticLegacyKey, usdcLegacyKey, @@ -810,9 +815,7 @@ describe('ProxyReader (UNS only)', () => { 'token.ETH.address', ]); - expect( - await proxyReader.getAddressKeys('ETH', 'ETH'), - ).to.deep.equal([ + expect(await proxyReader.getAddressKeys('ETH', 'ETH')).to.deep.equal([ 'token.ETH.ETH.ETH.address', ethLegacyKey, 'token.ETH.ETH.address', @@ -821,17 +824,13 @@ describe('ProxyReader (UNS only)', () => { }); it('returns the list of address keys without legacy keys if they are not defined', async () => { - expect( - await proxyReader.getAddressKeys('ETH', 'USDT'), - ).to.deep.equal([ + expect(await proxyReader.getAddressKeys('ETH', 'USDT')).to.deep.equal([ 'token.ETH.ETH.USDT.address', 'token.ETH.ETH.address', 'token.ETH.address', ]); - expect( - await proxyReader.getAddressKeys('MATIC', 'MATIC'), - ).to.deep.equal([ + expect(await proxyReader.getAddressKeys('MATIC', 'MATIC')).to.deep.equal([ 'token.ETH.MATIC.MATIC.address', 'token.ETH.MATIC.address', 'token.ETH.address', @@ -839,163 +838,103 @@ describe('ProxyReader (UNS only)', () => { }); it('returns empty list when family is not defined', async () => { - expect( - await proxyReader.getAddressKeys('UDTOKEN', 'UDTOKEN'), - ).to.deep.equal([]); + expect(await proxyReader.getAddressKeys('UDTOKEN', 'UDTOKEN')).to.deep.equal([]); }); }); describe('getAddress', () => { + const getAddress = async (network: string, token: string, tokenId: bigint) => { + return await proxyReader.getFunction('getAddress')(network, token, tokenId); + }; + it('should return most specific record by address keys', async () => { - const [ - tokenKey, - legacyTokenKey1, - legacyTokenKey2, - networkKey, - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey1, legacyTokenKey2, networkKey, familyKey] = await proxyReader.getAddressKeys( + 'ETH', + 'USDC', + ); await unsRegistry.set(familyKey, 'family-level-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('family-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('family-level-record'); await unsRegistry.set(networkKey, 'network-level-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('network-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('network-level-record'); await unsRegistry.set(legacyTokenKey2, 'legacy-key-2-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('legacy-key-2-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('legacy-key-2-record'); await unsRegistry.set(legacyTokenKey1, 'legacy-key-1-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('legacy-key-1-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('legacy-key-1-record'); await unsRegistry.set(tokenKey, 'token-level-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('token-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('token-level-record'); }); it('should return most specific record by address keys with skipped levels', async () => { - const [ - tokenKey, - legacyTokenKey, - , - , - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey, , , familyKey] = await proxyReader.getAddressKeys('ETH', 'USDC'); await unsRegistry.set(tokenKey, 'token-level-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('token-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('token-level-record'); await unsRegistry.set(familyKey, 'family-level-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('token-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('token-level-record'); await unsRegistry.set(tokenKey, '', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('family-level-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('family-level-record'); await unsRegistry.set(legacyTokenKey, 'legacy-key-1-record', walletTokenId); - expect( - await proxyReader.getAddress('ETH', 'USDC', walletTokenId), - ).to.equal('legacy-key-1-record'); + expect(await getAddress('ETH', 'USDC', walletTokenId)).to.equal('legacy-key-1-record'); }); it('should return empty string if family is not defined', async () => { - expect( - await proxyReader.getAddress('UDTOKEN', 'UDTOKEN', walletTokenId), - ).to.equal(''); + expect(await getAddress('UDTOKEN', 'UDTOKEN', walletTokenId)).to.equal(''); }); it('should return empty string if token does not exist', async () => { - expect( - await proxyReader.getAddress('ETH', 'USDC', 0x42), - ).to.equal(''); + expect(await getAddress('ETH', 'USDC', BigInt(42))).to.equal(''); }); }); describe('getAddressKey', () => { it('should return most specific record key by address keys', async () => { - const [ - tokenKey, - legacyTokenKey, - networkKey, - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey, networkKey, familyKey] = await proxyReader.getAddressKeys('ETH', 'USDC'); await unsRegistry.set(familyKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(familyKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(familyKey); await unsRegistry.set(networkKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(networkKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(networkKey); await unsRegistry.set(legacyTokenKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(legacyTokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(legacyTokenKey); await unsRegistry.set(tokenKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(tokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(tokenKey); }); it('should return most specific record key by address keys with skipped levels', async () => { - const [ - tokenKey, - legacyTokenKey, - , - , - familyKey, - ] = await proxyReader.getAddressKeys('ETH', 'USDC'); + const [tokenKey, legacyTokenKey, , , familyKey] = await proxyReader.getAddressKeys('ETH', 'USDC'); await unsRegistry.set(tokenKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(tokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(tokenKey); await unsRegistry.set(familyKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(tokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(tokenKey); await unsRegistry.set(tokenKey, '', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(familyKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(familyKey); await unsRegistry.set(legacyTokenKey, '42', walletTokenId); - expect( - await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId), - ).to.equal(legacyTokenKey); + expect(await proxyReader.getAddressKey('ETH', 'USDC', walletTokenId)).to.equal(legacyTokenKey); }); it('should return empty string if token does not exist', async () => { - expect( - await proxyReader.getAddressKey('ETH', 'USDC', 0x42), - ).to.equal(''); + expect(await proxyReader.getAddressKey('ETH', 'USDC', 0x42)).to.equal(''); }); it('should return empty string if family is not defined', async () => { - expect( - await proxyReader.getAddressKey('UDTOKEN', 'UDTOKEN', walletTokenId), - ).to.equal(''); + expect(await proxyReader.getAddressKey('UDTOKEN', 'UDTOKEN', walletTokenId)).to.equal(''); }); }); }); @@ -1021,23 +960,23 @@ describe('ProxyReader (UNS only)', () => { it('should return value for .wallet domain', async () => { const tokenId = await mintDomain({ unsRegistry, owner: accounts[3], labels: ['hey_hoy_98hds', 'wallet'] }); const address = await proxyReader.registryOf(tokenId); - expect(address).to.be.equal(unsRegistry.address); + expect(address).to.be.equal(await unsRegistry.getAddress()); }); it('should return value for .crypto domain', async () => { const tokenId = await mintDomain({ unsRegistry, owner: accounts[3], labels: ['hey_hoy_98hds', 'crypto'] }); const address = await proxyReader.registryOf(tokenId); - expect(address).to.be.equal(unsRegistry.address); + expect(address).to.be.equal(await unsRegistry.getAddress()); }); it('should return value for .crypto TLD', async () => { const address = await proxyReader.registryOf(TLD.CRYPTO); - expect(address).to.be.equal(unsRegistry.address); + expect(address).to.be.equal(await unsRegistry.getAddress()); }); it('should return value for .wallet TLD', async () => { const address = await proxyReader.registryOf(TLD.WALLET); - expect(address).to.be.equal(unsRegistry.address); + expect(address).to.be.equal(await unsRegistry.getAddress()); }); }); }); diff --git a/test/RootRegistry.test.ts b/test/RootRegistry.test.ts index f5a448e6..b54c3277 100644 --- a/test/RootRegistry.test.ts +++ b/test/RootRegistry.test.ts @@ -1,9 +1,8 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { BigNumber, utils } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { AbiCoder, hexlify, keccak256 } from 'ethers'; import { MintingManager, UNSRegistry } from '../types/contracts'; - import { MintingManager__factory, UNSRegistry__factory } from '../types/factories/contracts'; import { CNSRegistry__factory, Resolver__factory } from '../types/factories/dot-crypto/contracts'; import { @@ -26,6 +25,7 @@ import { SimpleCheckpointManager } from '../types/contracts/@maticnetwork/pos-po import { buildPredicateExitInput, writeCheckpoint, buildExitInput } from './helpers/polygon'; import { sign, buildExecuteFunc, ExecuteFunc } from './helpers/metatx'; import { TLD, ZERO_ADDRESS } from './helpers/constants'; +import { getLatestBlockTimestamp } from './helpers/utils'; describe('RootRegistry', () => { let l1UnsRegistry: UNSRegistry, l2UnsRegistry: UNSRegistry, mintingManager: MintingManager, cnsRegistry: CNSRegistry; @@ -47,7 +47,7 @@ describe('RootRegistry', () => { let buildExecuteCnsParams: ExecuteFunc, buildExecuteUnsParams: ExecuteFunc; - const abiCoder = new utils.AbiCoder(); + const abiCoder = new AbiCoder(); const mintDomainL1 = async (owner: string, labels: string[]) => { await mintingManager.issueWithRecords(owner, labels, [], [], true); @@ -65,22 +65,27 @@ describe('RootRegistry', () => { l1UnsRegistry = await new UNSRegistry__factory(registryOwner).connect(registryOwner).deploy(); cnsRegistry = await new CNSRegistry__factory(registryOwner).deploy(); - mintingController = await new MintingController__factory(registryOwner).deploy(cnsRegistry.address); - await cnsRegistry.addController(mintingController.address); + mintingController = await new MintingController__factory(registryOwner).deploy(await cnsRegistry.getAddress()); + await cnsRegistry.addController(await mintingController.getAddress()); - signatureController = await new SignatureController__factory(registryOwner).deploy(cnsRegistry.address); - await cnsRegistry.addController(signatureController.address); - cnsForwarder = await new CNSRegistryForwarder__factory(registryOwner).deploy(signatureController.address); + signatureController = await new SignatureController__factory(registryOwner).deploy(await cnsRegistry.getAddress()); + await cnsRegistry.addController(await signatureController.getAddress()); + cnsForwarder = await new CNSRegistryForwarder__factory(registryOwner).deploy( + await signatureController.getAddress(), + ); - resolver = await new Resolver__factory(registryOwner).deploy(cnsRegistry.address, mintingController.address); + resolver = await new Resolver__factory(registryOwner).deploy( + await cnsRegistry.getAddress(), + await mintingController.getAddress(), + ); - uriPrefixController = await new URIPrefixController__factory(registryOwner).deploy(cnsRegistry.address); - await cnsRegistry.addController(uriPrefixController.address); + uriPrefixController = await new URIPrefixController__factory(registryOwner).deploy(await cnsRegistry.getAddress()); + await cnsRegistry.addController(await uriPrefixController.getAddress()); mintingManager = await new MintingManager__factory(registryOwner).deploy(); - await mintingController.addMinter(mintingManager.address); - await uriPrefixController.addWhitelisted(mintingManager.address); + await mintingController.addMinter(await mintingManager.getAddress()); + await uriPrefixController.addWhitelisted(await mintingManager.getAddress()); l2UnsRegistry = await new UNSRegistry__factory(registryOwner).connect(registryOwner).deploy(); @@ -92,40 +97,54 @@ describe('RootRegistry', () => { // deploy and init predicate predicate = await new MintableERC721Predicate__factory(predicateOwner).connect(predicateOwner).deploy(); - await predicate.initialize(predicateOwner.address); + await predicate.initialize(await predicateOwner.getAddress()); // deploy and setup root chain manager rootChainManager = await new RootChainManager__factory(rcmOwner).connect(rcmOwner).deploy(); await rootChainManager.initialize(rcmOwner.address); - await rootChainManager.setCheckpointManager(checkpointManager.address); - await rootChainManager.setStateSender(stateSender.address); - await rootChainManager.registerPredicate(utils.keccak256(l1UnsRegistry.address), predicate.address); + await rootChainManager.setCheckpointManager(await checkpointManager.getAddress()); + await rootChainManager.setStateSender(await stateSender.getAddress()); + await rootChainManager.registerPredicate(keccak256(await l1UnsRegistry.getAddress()), await predicate.getAddress()); await rootChainManager.mapToken( - l1UnsRegistry.address, - l2UnsRegistry.address, - utils.keccak256(l1UnsRegistry.address), + await l1UnsRegistry.getAddress(), + await l2UnsRegistry.getAddress(), + keccak256(await l1UnsRegistry.getAddress()), ); - await predicate.grantRole(await predicate.MANAGER_ROLE(), rootChainManager.address); + await predicate.grantRole(await predicate.MANAGER_ROLE(), await rootChainManager.getAddress()); // post-configuration - await l1UnsRegistry.initialize(mintingManager.address, cnsRegistry.address, rootChainManager.address, ZERO_ADDRESS); + await l1UnsRegistry.initialize( + await mintingManager.getAddress(), + await cnsRegistry.getAddress(), + await rootChainManager.getAddress(), + ZERO_ADDRESS, + ); - await l2UnsRegistry.initialize(registryOwner.address, ZERO_ADDRESS, ZERO_ADDRESS, registryOwner.address); + await l2UnsRegistry.initialize( + await registryOwner.getAddress(), + ZERO_ADDRESS, + ZERO_ADDRESS, + await registryOwner.getAddress(), + ); await l2UnsRegistry.mintTLD(TLD.WALLET, 'wallet'); await mintingManager.initialize( - l1UnsRegistry.address, - mintingController.address, - uriPrefixController.address, - resolver.address, + await l1UnsRegistry.getAddress(), + await mintingController.getAddress(), + await uriPrefixController.getAddress(), + await resolver.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ); await mintingManager.addMinter(registryOwner.address); await mintingManager.setTokenURIPrefix('https://metadata.unstoppabledomains.ooo/metadata/'); - buildExecuteCnsParams = buildExecuteFunc(cnsRegistry.interface, signatureController.address, cnsForwarder); - buildExecuteUnsParams = buildExecuteFunc(l1UnsRegistry.interface, l1UnsRegistry.address, l1UnsRegistry); + buildExecuteCnsParams = buildExecuteFunc( + cnsRegistry.interface, + await signatureController.getAddress(), + cnsForwarder, + ); + buildExecuteUnsParams = buildExecuteFunc(l1UnsRegistry.interface, await l1UnsRegistry.getAddress(), l1UnsRegistry); }); describe('Deposit', () => { @@ -135,9 +154,9 @@ describe('RootRegistry', () => { await expect(l1UnsRegistry.connect(owner).depositToPolygon(tokenId)) .to.emit(predicate, 'LockedMintableERC721') - .withArgs(l1UnsRegistry.address, owner.address, l1UnsRegistry.address, tokenId); + .withArgs(await l1UnsRegistry.getAddress(), owner.address, await l1UnsRegistry.getAddress(), tokenId); - expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(predicate.address); + expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(await predicate.getAddress()); }); it('should meta-deposit token through UNS registry', async () => { @@ -146,9 +165,9 @@ describe('RootRegistry', () => { const { req, signature } = await buildExecuteUnsParams('depositToPolygon(uint256)', [tokenId], owner, tokenId); await expect(l1UnsRegistry.execute(req, signature)) .to.emit(predicate, 'LockedMintableERC721') - .withArgs(l1UnsRegistry.address, owner.address, l1UnsRegistry.address, tokenId); + .withArgs(await l1UnsRegistry.getAddress(), owner.address, await l1UnsRegistry.getAddress(), tokenId); - expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(predicate.address); + expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(await predicate.getAddress()); }); it('should deposit CNS domains through MintingManager', async () => { @@ -159,14 +178,14 @@ describe('RootRegistry', () => { .connect(owner) ['safeTransferFrom(address,address,uint256,bytes)']( owner.address, - l1UnsRegistry.address, + await l1UnsRegistry.getAddress(), tokenId, abiCoder.encode(['bool'], [true]), ); await expect(cnsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: owner query for nonexistent token'); expect(await l1UnsRegistry.exists(tokenId)).to.be.equal(true); - expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(predicate.address); + expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(await predicate.getAddress()); }); it('should mate-deposit CNS domains through MintingManager', async () => { @@ -175,7 +194,7 @@ describe('RootRegistry', () => { const { req, signature } = await buildExecuteCnsParams( 'safeTransferFrom(address,address,uint256,bytes)', - [owner.address, l1UnsRegistry.address, tokenId, abiCoder.encode(['bool'], [true])], + [owner.address, await l1UnsRegistry.getAddress(), tokenId, abiCoder.encode(['bool'], [true])], owner, tokenId, ); @@ -184,7 +203,7 @@ describe('RootRegistry', () => { await expect(cnsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: owner query for nonexistent token'); expect(await l1UnsRegistry.exists(tokenId)).to.be.equal(true); - expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(predicate.address); + expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(await predicate.getAddress()); }); it('should mate-deposit(legacy) CNS domains through MintingManager', async () => { @@ -194,20 +213,26 @@ describe('RootRegistry', () => { const data = cnsRegistry.interface.encodeFunctionData('safeTransferFrom(address,address,uint256,bytes)', [ owner.address, - l1UnsRegistry.address, + await l1UnsRegistry.getAddress(), tokenId, abiCoder.encode(['bool'], [true]), ]); const nonce = await signatureController.nonceOf(tokenId); - const signature = await sign(data, signatureController.address, nonce, owner); + const signature = await sign(data, await signatureController.getAddress(), nonce, owner); await signatureController .connect(spender) - [funcSig](owner.address, l1UnsRegistry.address, tokenId, abiCoder.encode(['bool'], [true]), signature); + [funcSig]( + owner.address, + await l1UnsRegistry.getAddress(), + tokenId, + abiCoder.encode(['bool'], [true]), + signature, + ); await expect(cnsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: owner query for nonexistent token'); expect(await l1UnsRegistry.exists(tokenId)).to.be.equal(true); - expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(predicate.address); + expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(await predicate.getAddress()); }); }); @@ -215,14 +240,14 @@ describe('RootRegistry', () => { it('should deposit token', async () => { const tokenId = await mintDomainL1(owner.address, ['poly-2d-aq1', 'wallet']); - await l1UnsRegistry.connect(owner).approve(predicate.address, tokenId); + await l1UnsRegistry.connect(owner).approve(await predicate.getAddress(), tokenId); - const data = utils.defaultAbiCoder.encode(['uint256'], [tokenId]); - await expect(rootChainManager.connect(owner).depositFor(owner.address, l1UnsRegistry.address, data)) + const data = new AbiCoder().encode(['uint256'], [tokenId]); + await expect(rootChainManager.connect(owner).depositFor(owner.address, await l1UnsRegistry.getAddress(), data)) .to.emit(predicate, 'LockedMintableERC721') - .withArgs(owner.address, owner.address, l1UnsRegistry.address, tokenId); + .withArgs(owner.address, owner.address, await l1UnsRegistry.getAddress(), tokenId); - expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(predicate.address); + expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(await predicate.getAddress()); }); }); @@ -233,7 +258,7 @@ describe('RootRegistry', () => { await cnsRegistry .connect(owner) - ['safeTransferFrom(address,address,uint256)'](owner.address, l1UnsRegistry.address, tokenId); + ['safeTransferFrom(address,address,uint256)'](owner.address, await l1UnsRegistry.getAddress(), tokenId); await expect(cnsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: owner query for nonexistent token'); expect(await l1UnsRegistry.exists(tokenId)).to.be.equal(true); @@ -247,13 +272,15 @@ describe('RootRegistry', () => { const data = cnsRegistry.interface.encodeFunctionData('safeTransferFrom(address,address,uint256)', [ owner.address, - l1UnsRegistry.address, + await l1UnsRegistry.getAddress(), tokenId, ]); const nonce = await signatureController.nonceOf(tokenId); - const signature = await sign(data, signatureController.address, nonce, owner); + const signature = await sign(data, await signatureController.getAddress(), nonce, owner); - await signatureController.connect(spender)[funcSig](owner.address, l1UnsRegistry.address, tokenId, signature); + await signatureController + .connect(spender) + [funcSig](owner.address, await l1UnsRegistry.getAddress(), tokenId, signature); await expect(cnsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: owner query for nonexistent token'); expect(await l1UnsRegistry.exists(tokenId)).to.be.equal(true); @@ -268,7 +295,7 @@ describe('RootRegistry', () => { .connect(owner) ['safeTransferFrom(address,address,uint256,bytes)']( owner.address, - l1UnsRegistry.address, + await l1UnsRegistry.getAddress(), tokenId, abiCoder.encode(['bool'], [false]), ); @@ -285,16 +312,22 @@ describe('RootRegistry', () => { const data = cnsRegistry.interface.encodeFunctionData('safeTransferFrom(address,address,uint256,bytes)', [ owner.address, - l1UnsRegistry.address, + await l1UnsRegistry.getAddress(), tokenId, abiCoder.encode(['bool'], [false]), ]); const nonce = await signatureController.nonceOf(tokenId); - const signature = await sign(data, signatureController.address, nonce, owner); + const signature = await sign(data, await signatureController.getAddress(), nonce, owner); await signatureController .connect(spender) - [funcSig](owner.address, l1UnsRegistry.address, tokenId, abiCoder.encode(['bool'], [false]), signature); + [funcSig]( + owner.address, + await l1UnsRegistry.getAddress(), + tokenId, + abiCoder.encode(['bool'], [false]), + signature, + ); await expect(cnsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: owner query for nonexistent token'); expect(await l1UnsRegistry.exists(tokenId)).to.be.equal(true); @@ -309,7 +342,7 @@ describe('RootRegistry', () => { await expect( randomERC721 .connect(owner) - ['safeTransferFrom(address,address,uint256)'](owner.address, l1UnsRegistry.address, tokenId), + ['safeTransferFrom(address,address,uint256)'](owner.address, await l1UnsRegistry.getAddress(), tokenId), ).to.be.revertedWith('Registry: ERC721_RECEIVING_PROHIBITED'); }); }); @@ -319,10 +352,10 @@ describe('RootRegistry', () => { it('should withdraw a domain', async () => { const tokenId = await mintDomainL1(owner.address, ['poly-1w-as1', 'wallet']); await l1UnsRegistry.connect(owner).depositToPolygon(tokenId); - expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(predicate.address); + expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(await predicate.getAddress()); const inputData = buildPredicateExitInput(owner.address, ZERO_ADDRESS, tokenId); - await predicate.exitTokens(ZERO_ADDRESS, l1UnsRegistry.address, inputData); + await predicate.exitTokens(ZERO_ADDRESS, await l1UnsRegistry.getAddress(), inputData); expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(owner.address); }); @@ -332,7 +365,7 @@ describe('RootRegistry', () => { await expect(l1UnsRegistry.ownerOf(tokenId)).to.be.revertedWith('ERC721: invalid token ID'); const inputData = buildPredicateExitInput(owner.address, ZERO_ADDRESS, tokenId); - await predicate.exitTokens(ZERO_ADDRESS, l1UnsRegistry.address, inputData); + await predicate.exitTokens(ZERO_ADDRESS, await l1UnsRegistry.getAddress(), inputData); expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(owner.address); }); @@ -362,7 +395,7 @@ describe('RootRegistry', () => { 0, checkpointData.number, checkpointData.number, - utils.hexlify(checkpointData.header.root), + hexlify(checkpointData.header.root), ); }; @@ -375,7 +408,7 @@ describe('RootRegistry', () => { const { setCheckPointTx, checkpointData } = await writeCheckpoint(checkpointManager, rcmOwner, txn); await expectNewHeaderBlockEventEmitted(setCheckPointTx, checkpointData); - const data = await buildExitInput(checkpointManager, receipt, checkpointData); + const data = await buildExitInput(checkpointManager, receipt!, checkpointData); await rootChainManager.exit(data); expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(owner.address); @@ -390,7 +423,7 @@ describe('RootRegistry', () => { const { setCheckPointTx, checkpointData } = await writeCheckpoint(checkpointManager, rcmOwner, txn); await expectNewHeaderBlockEventEmitted(setCheckPointTx, checkpointData); - const data = await buildExitInput(checkpointManager, receipt, checkpointData); + const data = await buildExitInput(checkpointManager, receipt!, checkpointData); await l1UnsRegistry.connect(owner).withdrawFromPolygon(data, tokenId, [], []); expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(owner.address); @@ -405,7 +438,7 @@ describe('RootRegistry', () => { const { setCheckPointTx, checkpointData } = await writeCheckpoint(checkpointManager, rcmOwner, txn); await expectNewHeaderBlockEventEmitted(setCheckPointTx, checkpointData); - const data = await buildExitInput(checkpointManager, receipt, checkpointData); + const data = await buildExitInput(checkpointManager, receipt!, checkpointData); await l1UnsRegistry.connect(owner).withdrawFromPolygon(data, tokenId, ['k1'], ['v1']); expect(await l1UnsRegistry.ownerOf(tokenId)).to.be.equal(owner.address); @@ -421,7 +454,7 @@ describe('RootRegistry', () => { const { setCheckPointTx, checkpointData } = await writeCheckpoint(checkpointManager, rcmOwner, txn); await expectNewHeaderBlockEventEmitted(setCheckPointTx, checkpointData); - const data = await buildExitInput(checkpointManager, receipt, checkpointData); + const data = await buildExitInput(checkpointManager, receipt!, checkpointData); const { req, signature } = await buildExecuteUnsParams( 'withdrawFromPolygon(bytes,uint256,string[],string[])', [data, tokenId, ['k2'], ['v2']], @@ -436,48 +469,35 @@ describe('RootRegistry', () => { }); describe('Expirable tokens transfers', async () => { - let tokenId: BigNumber; + let tokenId: bigint; before(async () => { - const { timestamp } = await ethers.provider.getBlock('latest'); + const timestamp = await getLatestBlockTimestamp(); const labels = ['expirable-predicate-test', 'com']; - await mintingManager.issueExpirableWithRecords( - owner.address, - labels, - [], - [], - timestamp + 60 * 60 * 24, - true, - ); + await mintingManager.issueExpirableWithRecords(owner.address, labels, [], [], timestamp + 60 * 60 * 24, true); tokenId = await l1UnsRegistry.namehash(labels); }); it('should revert setOwner to predicate', async () => { - await expect( - l1UnsRegistry.connect(owner).setOwner(predicate.address, tokenId), - ).to.be.revertedWith( + await expect(l1UnsRegistry.connect(owner).setOwner(await predicate.getAddress(), tokenId)).to.be.revertedWith( 'Registry: TOKEN_EXPIRABLE', ); }); it('should revert transferFrom to predicate', async () => { await expect( - l1UnsRegistry.connect(owner).transferFrom(owner.address, predicate.address, tokenId), - ).to.be.revertedWith( - 'Registry: TOKEN_EXPIRABLE', - ); + l1UnsRegistry.connect(owner).transferFrom(owner.address, await predicate.getAddress(), tokenId), + ).to.be.revertedWith('Registry: TOKEN_EXPIRABLE'); }); it('should revert safeTransferFrom to predicate', async () => { const selector = 'safeTransferFrom(address,address,uint256)'; await expect( - l1UnsRegistry.connect(owner)[selector](owner.address, predicate.address, tokenId), - ).to.be.revertedWith( - 'Registry: TOKEN_EXPIRABLE', - ); + l1UnsRegistry.connect(owner)[selector](owner.address, await predicate.getAddress(), tokenId), + ).to.be.revertedWith('Registry: TOKEN_EXPIRABLE'); }); it('should revert safeTransferFrom to predicate', async () => { @@ -485,22 +505,16 @@ describe('RootRegistry', () => { const selectorWithBytes = 'safeTransferFrom(address,address,uint256,bytes)'; await expect( - l1UnsRegistry.connect(owner)[selector](owner.address, predicate.address, tokenId), - ).to.be.revertedWith( - 'Registry: TOKEN_EXPIRABLE', - ); + l1UnsRegistry.connect(owner)[selector](owner.address, await predicate.getAddress(), tokenId), + ).to.be.revertedWith('Registry: TOKEN_EXPIRABLE'); await expect( - l1UnsRegistry.connect(owner)[selectorWithBytes](owner.address, predicate.address, tokenId, '0x'), - ).to.be.revertedWith( - 'Registry: TOKEN_EXPIRABLE', - ); + l1UnsRegistry.connect(owner)[selectorWithBytes](owner.address, await predicate.getAddress(), tokenId, '0x'), + ).to.be.revertedWith('Registry: TOKEN_EXPIRABLE'); }); it('should revert depositToPolygon', async () => { - await expect( - l1UnsRegistry.connect(owner).depositToPolygon(tokenId), - ).to.be.revertedWith( + await expect(l1UnsRegistry.connect(owner).depositToPolygon(tokenId)).to.be.revertedWith( 'Registry: TOKEN_EXPIRABLE', ); }); diff --git a/test/UNSOperator.test.ts b/test/UNSOperator.test.ts index bc382968..8e5581fe 100644 --- a/test/UNSOperator.test.ts +++ b/test/UNSOperator.test.ts @@ -1,6 +1,6 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import type { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { UNSOperator } from '../types/contracts'; import { UNSOperator__factory } from '../types/factories/contracts'; diff --git a/test/UNSRegistry.metatx.test.ts b/test/UNSRegistry.metatx.test.ts index 623d445c..c7fd0801 100644 --- a/test/UNSRegistry.metatx.test.ts +++ b/test/UNSRegistry.metatx.test.ts @@ -1,16 +1,14 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { utils, BigNumber, Contract, BigNumberish } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { FunctionFragment } from 'ethers/lib/utils'; -import { Block } from '@ethersproject/abstract-provider'; +import { BigNumberish, FunctionFragment, id, Fragment, BaseContract, solidityPacked } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { UNSRegistry } from '../types/contracts'; import { UNSRegistry__factory } from '../types/factories/contracts'; import { sign, buildExecuteFunc, ExecuteFunc } from './helpers/metatx'; import { TLD, ZERO_ADDRESS } from './helpers/constants'; import { mintDomain, mintRandomDomain } from './helpers/registry'; import { getFuncSignature } from './helpers/proxy'; -import { increaseTimeBy } from './helpers/utils'; +import { getLatestBlockTimestamp, increaseTimeBy } from './helpers/utils'; describe('UNSRegistry (metatx)', () => { let unsRegistry: UNSRegistry, buildExecuteParams: ExecuteFunc; @@ -22,7 +20,7 @@ describe('UNSRegistry (metatx)', () => { accessControl: SignerWithAddress, operator: SignerWithAddress; - let latestBlock: Block; + let latestBlockTimestamp: number; before(async () => { signers = await ethers.getSigners(); @@ -34,11 +32,11 @@ describe('UNSRegistry (metatx)', () => { await unsRegistry.mintTLD(TLD.CRYPTO, 'crypto'); await unsRegistry.setTokenURIPrefix('/'); - buildExecuteParams = buildExecuteFunc(unsRegistry.interface, unsRegistry.address, unsRegistry); + buildExecuteParams = buildExecuteFunc(unsRegistry.interface, await unsRegistry.getAddress(), unsRegistry); }); beforeEach(async () => { - latestBlock = await ethers.provider.getBlock('latest'); + latestBlockTimestamp = await getLatestBlockTimestamp(); }); describe('General', () => { @@ -86,7 +84,7 @@ describe('UNSRegistry (metatx)', () => { }); it('should revert meta-setOwner for expired token', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintDomain({ unsRegistry, owner, @@ -158,7 +156,7 @@ describe('UNSRegistry (metatx)', () => { }); it('should revert meta-transferFrom for expired token', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintDomain({ unsRegistry, owner, @@ -206,7 +204,7 @@ describe('UNSRegistry (metatx)', () => { }); it('should revert meta-safeTransferFrom for expired token', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintDomain({ unsRegistry, owner, @@ -253,7 +251,7 @@ describe('UNSRegistry (metatx)', () => { }); it('should revert meta-safeTransferFrom for expired token', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintDomain({ unsRegistry, owner, @@ -292,9 +290,13 @@ describe('UNSRegistry (metatx)', () => { describe('ABI-based', () => { const registryFuncs = () => { - return Object.values(unsRegistry.interface.functions).filter( - (fragment: FunctionFragment) => !['view', 'pure'].includes(fragment.stateMutability), - ); + return Object.values(unsRegistry.interface.fragments).filter((fragment: Fragment) => { + if (fragment instanceof FunctionFragment) { + return !['view', 'pure'].includes(fragment.stateMutability); + } + + return false; + }) as FunctionFragment[]; }; const buidRequest = async ( @@ -303,7 +305,7 @@ describe('UNSRegistry (metatx)', () => { tokenId: BigNumberish, paramsMap: any, // eslint-disable-line @typescript-eslint/no-explicit-any ) => { - const contract: Contract = unsRegistry; + const contract = unsRegistry as BaseContract; const req = { from, @@ -324,31 +326,25 @@ describe('UNSRegistry (metatx)', () => { values: ['value1'], uri: 'awesome-uri', labels: ['token-based', 'crypto'], - tokenId: '', + tokenId: BigInt(0), to: '', }; - const included = [ - 'issueWithRecords', - 'unlockWithRecords', - 'unlock', - 'mintTLD', - ]; + const included = ['issueWithRecords', 'unlockWithRecords', 'unlock', 'mintTLD']; const getFuncs = () => { - return registryFuncs() - .filter((x) => included.includes(x.name) || included.includes(getFuncSignature(x))); + return registryFuncs().filter((x) => included.includes(x.name) || included.includes(getFuncSignature(x))); }; before(async () => { paramValueMap.to = receiver.address; - paramValueMap.tokenId = (await unsRegistry.namehash(paramValueMap.labels)).toHexString(); + paramValueMap.tokenId = await unsRegistry.namehash(paramValueMap.labels); }); it('should execute all functions successfully', async () => { for (const func of getFuncs()) { const req = await buidRequest(func, coinbase.address, paramValueMap.tokenId, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, coinbase); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, coinbase); await unsRegistry.execute(req, signature); } }); @@ -360,13 +356,13 @@ describe('UNSRegistry (metatx)', () => { data: '0x', key: 'key_t1', keys: ['key_t1'], - keyHash: BigNumber.from(utils.id('key_t1')), - keyHashes: [BigNumber.from(utils.id('key_t1'))], + keyHash: BigInt(id('key_t1')), + keyHashes: [BigInt(id('key_t1'))], value: 'value', values: ['value1'], from: '', to: '', - tokenId: BigNumber.from('0x0'), + tokenId: BigInt('0x0'), }; const excluded = [ @@ -388,7 +384,7 @@ describe('UNSRegistry (metatx)', () => { 'removeReverse', 'addProxyReader', 'setExpiry', // onlyMintingManager action, covered in separate test case - 'unlock', // onlyMintingManager action, covered in a separate test case + 'unlock', // onlyMintingManager action, covered in a separate test case ]; const getFuncs = () => { @@ -406,12 +402,12 @@ describe('UNSRegistry (metatx)', () => { it('should execute all functions successfully', async () => { for (const func of getFuncs()) { - const funcSigHash = utils.id(`${getFuncSignature(func)}_ok`); + const funcSigHash = id(`${getFuncSignature(func)}_ok`); paramValueMap.tokenId = await mintDomain({ unsRegistry, owner, labels: [funcSigHash, 'crypto'] }); const req = await buidRequest(func, owner.address, paramValueMap.tokenId, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, owner); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, owner); await unsRegistry.execute(req, signature); } }); @@ -419,12 +415,12 @@ describe('UNSRegistry (metatx)', () => { it('should revert execution of all token-based functions when used signature', async () => { for (const func of getFuncs()) { const funcSig = getFuncSignature(func); - const funcSigHash = utils.id(`${funcSig}_doubleUse`); + const funcSigHash = id(`${funcSig}_doubleUse`); paramValueMap.tokenId = await mintDomain({ unsRegistry, owner, labels: [funcSigHash, 'crypto'] }); const req = await buidRequest(func, owner.address, paramValueMap.tokenId, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, owner); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, owner); await unsRegistry.execute(req, signature); await expect(unsRegistry.execute(req, signature)).to.be.revertedWith( @@ -436,12 +432,12 @@ describe('UNSRegistry (metatx)', () => { it('should revert execution of all token-based functions when nonce invalidated', async () => { for (const func of getFuncs()) { const funcSig = getFuncSignature(func); - const funcSigHash = utils.id(`${funcSig}_nonceInvalidated`); + const funcSigHash = id(`${funcSig}_nonceInvalidated`); paramValueMap.tokenId = await mintDomain({ unsRegistry, owner, labels: [funcSigHash, 'crypto'] }); const req = await buidRequest(func, owner.address, paramValueMap.tokenId, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, owner); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, owner); await unsRegistry.connect(owner).set('key', 'value', paramValueMap.tokenId); @@ -454,33 +450,33 @@ describe('UNSRegistry (metatx)', () => { it('should fail execution of all token-based functions when tokenId does not match', async () => { for (const func of getFuncs()) { const funcSig = getFuncSignature(func); - const funcSigHash = utils.id(`${funcSig}_wrongToken`); + const funcSigHash = id(`${funcSig}_wrongToken`); paramValueMap.tokenId = await mintDomain({ unsRegistry, owner, labels: [funcSigHash, 'crypto'] }); - const tokenIdForwarder = await unsRegistry.namehash([utils.id(`_${funcSig}`), 'crypto']); + const tokenIdForwarder = await unsRegistry.namehash([id(`_${funcSig}`), 'crypto']); const req = await buidRequest(func, owner.address, tokenIdForwarder, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, owner); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, owner); await expect(unsRegistry.execute(req, signature)).to.be.revertedWith('Registry: TOKEN_INVALID'); } }); it('should fail execution of all token-based functions when tokenId is empty', async () => { for (const func of getFuncs()) { - const funcSigHash = utils.id(`${getFuncSignature(func)}_emptyTokenId`); + const funcSigHash = id(`${getFuncSignature(func)}_emptyTokenId`); paramValueMap.tokenId = await mintDomain({ unsRegistry, owner, labels: [funcSigHash, 'crypto'] }); const req = await buidRequest(func, owner.address, 0, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, owner); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, owner); await expect(unsRegistry.execute(req, signature)).to.be.revertedWith('Registry: TOKEN_INVALID'); } }); it('should execute setExpiry via forwarder', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, @@ -496,7 +492,7 @@ describe('UNSRegistry (metatx)', () => { tokenId, }); - const signature = await sign(req.data, unsRegistry.address, req.nonce, coinbase); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, coinbase); await unsRegistry.execute(req, signature); @@ -504,7 +500,7 @@ describe('UNSRegistry (metatx)', () => { }); it('should execute unlock via forwarder', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, owner, @@ -518,7 +514,7 @@ describe('UNSRegistry (metatx)', () => { tokenId, }); - const signature = await sign(req.data, unsRegistry.address, req.nonce, coinbase); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, coinbase); await unsRegistry.execute(req, signature); @@ -537,7 +533,7 @@ describe('UNSRegistry (metatx)', () => { values: ['value1'], approved: true, prefix: '/', - tld: BigNumber.from('0x0'), + tld: BigInt('0x0'), account: '', to: '', operator: '', @@ -573,10 +569,10 @@ describe('UNSRegistry (metatx)', () => { it('should execute all functions successfully', async () => { for (const func of getFuncs()) { const funcSig = getFuncSignature(func); - paramValueMap.labels = [utils.id(`${funcSig}_label`), 'crypto']; + paramValueMap.labels = [id(`${funcSig}_label`), 'crypto']; const req = await buidRequest(func, coinbase.address, 0, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, coinbase); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, coinbase); await unsRegistry.execute(req, signature); } }); @@ -586,10 +582,10 @@ describe('UNSRegistry (metatx)', () => { .filter((x) => !x.inputs.filter((i) => i.name === 'tokenId').length) .filter((x) => x.name === 'setReverse')[0]; const funcSig = getFuncSignature(setReverseFunc); - paramValueMap.labels = [utils.id(`${funcSig}_label`), 'crypto']; + paramValueMap.labels = [id(`${funcSig}_label`), 'crypto']; const tokenId = await mintDomain({ unsRegistry, owner, labels: paramValueMap.labels }); const req = await buidRequest(setReverseFunc, owner.address, tokenId, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, owner); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, owner); await unsRegistry.execute(req, signature); }); @@ -598,22 +594,22 @@ describe('UNSRegistry (metatx)', () => { .filter((x) => !x.inputs.filter((i) => i.name === 'tokenId').length) .filter((x) => x.name === 'unlockWithRecords')[0]; const funcSig = getFuncSignature(unlockWithRecordsLabels); - paramValueMap.labels = [utils.id(`${funcSig}_label`), 'crypto']; + paramValueMap.labels = [id(`${funcSig}_label`), 'crypto']; const tokenId = await mintDomain({ unsRegistry, owner, labels: paramValueMap.labels }); const req = await buidRequest(unlockWithRecordsLabels, coinbase.address, tokenId, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, coinbase); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, coinbase); await unsRegistry.execute(req, signature); }); it('should revert execution of all functions when used signature', async () => { for (const func of getFuncs()) { const funcSig = getFuncSignature(func); - paramValueMap.labels = [utils.id(`${funcSig}_doubleUse`), 'crypto']; - paramValueMap.key = utils.id(`${funcSig}_doubleUse`); + paramValueMap.labels = [id(`${funcSig}_doubleUse`), 'crypto']; + paramValueMap.key = id(`${funcSig}_doubleUse`); - const tokenIdForwarder = await unsRegistry.namehash([utils.id(`_${funcSig}`), 'crypto']); + const tokenIdForwarder = await unsRegistry.namehash([id(`_${funcSig}`), 'crypto']); const req = await buidRequest(func, coinbase.address, tokenIdForwarder, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, coinbase); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, coinbase); await unsRegistry.execute(req, signature); await expect(unsRegistry.execute(req, signature)).to.be.revertedWith( @@ -625,15 +621,15 @@ describe('UNSRegistry (metatx)', () => { it('should revert execution of all functions when used signature and tokenId is empty', async () => { for (const func of getFuncs()) { const funcSig = getFuncSignature(func); - paramValueMap.labels = [utils.id(`${funcSig}_doubleUse_0`), 'crypto']; + paramValueMap.labels = [id(`${funcSig}_doubleUse_0`), 'crypto']; const tokenId = 0; const nonce = await unsRegistry.nonceOf(tokenId); const req = await buidRequest(func, coinbase.address, tokenId, paramValueMap); - const signature = await sign(req.data, unsRegistry.address, req.nonce, coinbase); + const signature = await sign(req.data, await unsRegistry.getAddress(), req.nonce, coinbase); await unsRegistry.execute(req, signature); - expect(await unsRegistry.nonceOf(tokenId)).to.be.equal(nonce.add(1)); + expect(await unsRegistry.nonceOf(tokenId)).to.be.equal(nonce + BigInt(1)); await expect(unsRegistry.execute(req, signature)).to.be.revertedWith( 'UNSRegistryForwarder: SIGNATURE_INVALID', ); @@ -667,7 +663,7 @@ describe('UNSRegistry (metatx)', () => { const labels = ['res_label_mb3_expirable', 'com']; const tokenId = await unsRegistry.namehash(labels); - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const { req, signature } = await buildExecuteParams( 'multicall(bytes[])', @@ -696,7 +692,7 @@ describe('UNSRegistry (metatx)', () => { [owner.address, labels, [], [], false], coinbase, tokenId, - BigNumber.from(0), + BigInt(0), ); const transferMetaParams = await buildExecuteParams( @@ -704,7 +700,7 @@ describe('UNSRegistry (metatx)', () => { [receiver.address, tokenId], owner, tokenId, - BigNumber.from(1), + BigInt(1), ); await unsRegistry.multicall([ @@ -724,7 +720,7 @@ describe('UNSRegistry (metatx)', () => { [receiver.address, tokenId], owner, tokenId, - BigNumber.from(0), + BigInt(0), ); await unsRegistry.multicall([ @@ -745,20 +741,23 @@ describe('UNSRegistry (metatx)', () => { 'multicall(bytes[])', [ [ - ethers.utils.solidityPack(['bytes', 'address', 'uint256'], [ - unsRegistry.interface.encodeFunctionData('setOwner', [nonOwner.address, tokenId]), - owner.address, - tokenId, - ]), + solidityPacked( + ['bytes', 'address', 'uint256'], + [ + unsRegistry.interface.encodeFunctionData('setOwner', [nonOwner.address, tokenId]), + owner.address, + tokenId, + ], + ), ], ], nonOwner, tokenId, ); - await expect( - unsRegistry.connect(nonOwner).execute(req, signature), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(unsRegistry.connect(nonOwner).execute(req, signature)).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', + ); }); }); }); diff --git a/test/UNSRegistry.multicall.test.ts b/test/UNSRegistry.multicall.test.ts index 619fe441..1817058d 100644 --- a/test/UNSRegistry.multicall.test.ts +++ b/test/UNSRegistry.multicall.test.ts @@ -1,6 +1,6 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { UNSRegistry, UNSRegistry__factory } from '../types'; import { TLD, ZERO_ADDRESS } from './helpers/constants'; diff --git a/test/UNSRegistry.proxy.test.ts b/test/UNSRegistry.proxy.test.ts index b26b7ec1..b6bb39b4 100644 --- a/test/UNSRegistry.proxy.test.ts +++ b/test/UNSRegistry.proxy.test.ts @@ -1,10 +1,11 @@ -import { ethers, upgrades } from 'hardhat'; +import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { utils, BigNumber } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { id } from 'ethers'; import { UNSRegistry } from '../types/contracts'; import { UNSRegistry__factory } from '../types/factories/contracts'; import { UNSRegistryV07__factory } from '../types'; +import { deployProxy, upgradeProxy } from '../src/helpers'; import { mintDomain } from './helpers/registry'; import { TLD, ZERO_ADDRESS } from './helpers/constants'; import { buildExecuteFunc, ExecuteFunc } from './helpers/metatx'; @@ -25,19 +26,15 @@ describe('UNSRegistry (proxy)', () => { unsRegistryV07Factory = new UNSRegistryV07__factory(owner); unsRegistryFactory = new UNSRegistry__factory(owner); - unsRegistry = (await upgrades.deployProxy( - unsRegistryV07Factory, - [owner.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], - { - initializer: 'initialize', - unsafeAllow: ['delegatecall'], - }, - )) as UNSRegistry; + unsRegistry = (await deployProxy(unsRegistryV07Factory, [owner.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], { + initializer: 'initialize', + unsafeAllow: ['delegatecall'], + })) as unknown as UNSRegistry; await unsRegistry.mintTLD(TLD.CRYPTO, 'crypto'); await unsRegistry.setTokenURIPrefix('/'); - buildExecuteParams = buildExecuteFunc(unsRegistry.interface, unsRegistry.address, unsRegistry); + buildExecuteParams = buildExecuteFunc(unsRegistry.interface, await unsRegistry.getAddress(), unsRegistry); }); describe('Registry', () => { @@ -104,7 +101,7 @@ describe('UNSRegistry (proxy)', () => { await unsRegistry.set(expectedKey, 'value', tokenId); - const keyFromHash = await unsRegistry.getKey(BigNumber.from(utils.id(expectedKey))); + const keyFromHash = await unsRegistry.getKey(BigInt(id(expectedKey))); expect(keyFromHash).to.be.equal(expectedKey); }); @@ -114,7 +111,7 @@ describe('UNSRegistry (proxy)', () => { await unsRegistry.setMany(expectedKeys, ['value', 'value'], tokenId); - const expectedKeyHashes = expectedKeys.map((key) => BigNumber.from(utils.id(key))); + const expectedKeyHashes = expectedKeys.map((key) => BigInt(id(key))); const keysFromHashes = await unsRegistry.getKeys(expectedKeyHashes); expect(keysFromHashes).to.be.eql(expectedKeys); }); @@ -125,7 +122,7 @@ describe('UNSRegistry (proxy)', () => { const newKeyHashTxReceipt = await newKeyHashTx.wait(); const exitsKeyHashTx = await unsRegistry.set('keyhash-gas', 'value', tokenId); const exitsKeyHashTxReceipt = await exitsKeyHashTx.wait(); - expect(newKeyHashTxReceipt.gasUsed).to.be.above(exitsKeyHashTxReceipt.gasUsed); + expect(newKeyHashTxReceipt?.gasUsed).to.be.above(exitsKeyHashTxReceipt?.gasUsed); const newKeyHashTx2 = await unsRegistry.setMany( ['keyhash-gas-1', 'keyhash-gas-2'], @@ -139,7 +136,7 @@ describe('UNSRegistry (proxy)', () => { tokenId, ); const exitsKeyHashTxReceipt2 = await exitsKeyHashTx2.wait(); - expect(newKeyHashTxReceipt2.gasUsed).to.be.above(exitsKeyHashTxReceipt2.gasUsed); + expect(newKeyHashTxReceipt2?.gasUsed).to.be.above(exitsKeyHashTxReceipt2?.gasUsed); const newKeyHashTx3 = await unsRegistry.setMany( ['keyhash-gas-3', 'keyhash-gas-4', 'keyhash-gas-5'], @@ -153,7 +150,7 @@ describe('UNSRegistry (proxy)', () => { tokenId, ); const exitsKeyHashTxReceipt3 = await exitsKeyHashTx3.wait(); - expect(newKeyHashTxReceipt3.gasUsed).to.be.above(exitsKeyHashTxReceipt3.gasUsed); + expect(newKeyHashTxReceipt3?.gasUsed).to.be.above(exitsKeyHashTxReceipt3?.gasUsed); }); it('should get value by key hash', async () => { @@ -163,7 +160,7 @@ describe('UNSRegistry (proxy)', () => { await unsRegistry.set(key, expectedValue, tokenId); - const result = await unsRegistry.getByHash(utils.id(key), tokenId); + const result = await unsRegistry.getByHash(id(key), tokenId); expect(result.value).to.be.equal(expectedValue); expect(result.key).to.be.equal(key); }); @@ -175,7 +172,7 @@ describe('UNSRegistry (proxy)', () => { await unsRegistry.setMany(keys, expectedValues, tokenId); - const hashedKeys = keys.map((key) => BigNumber.from(utils.id(key))); + const hashedKeys = keys.map((key) => BigInt(id(key))); const result = await unsRegistry.getManyByHash(hashedKeys, tokenId); expect(result).to.be.eql([keys, expectedValues]); }); @@ -185,9 +182,7 @@ describe('UNSRegistry (proxy)', () => { const key = 'new-key'; const value = 'value'; - await expect(unsRegistry.set(key, value, tokenId)) - .to.emit(unsRegistry, 'NewKey') - .withArgs(tokenId, utils.id(key), key); + await expect(unsRegistry.set(key, value, tokenId)).to.emit(unsRegistry, 'NewKey').withArgs(tokenId, key, key); await expect(unsRegistry.set(key, value, tokenId)).not.to.emit(unsRegistry, 'NewKey'); }); @@ -199,7 +194,7 @@ describe('UNSRegistry (proxy)', () => { await expect(unsRegistry.set(key, value, tokenId)) .to.emit(unsRegistry, 'Set') - .withArgs(tokenId, utils.id(key), utils.id(value), key, value); + .withArgs(tokenId, key, value, key, value); }); it('should reconfigure resolver with new values', async () => { @@ -229,9 +224,9 @@ describe('UNSRegistry (proxy)', () => { await unsRegistry.execute(params1.req, params1.signature); expect(await unsRegistry.nonceOf(tokenId)).to.be.equal(1); - unsRegistry = (await upgrades.upgradeProxy(unsRegistry.address, unsRegistryFactory, { + await upgradeProxy(await unsRegistry.getAddress(), unsRegistryFactory, { unsafeAllow: ['delegatecall'], - })) as UNSRegistry; + }); expect(await unsRegistry.nonceOf(tokenId)).to.be.equal(1); diff --git a/test/UNSRegistry.reverse.test.ts b/test/UNSRegistry.reverse.test.ts index c2e3c1cc..cc41c92f 100644 --- a/test/UNSRegistry.reverse.test.ts +++ b/test/UNSRegistry.reverse.test.ts @@ -1,6 +1,7 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { EventLog } from 'ethers'; import { UNSRegistry } from '../types/contracts'; import { UNSRegistryMock } from '../types/contracts/mocks'; import { UNSRegistry__factory } from '../types/factories/contracts'; @@ -33,11 +34,7 @@ describe('UNSRegistry (reverse)', () => { await unsRegistry.mintTLD(TLD.X, 'x'); await unsRegistry.setTokenURIPrefix('/'); - buildExecuteParams = buildExecuteFunc( - unsRegistry.interface, - unsRegistry.address, - unsRegistry, - ); + buildExecuteParams = buildExecuteFunc(unsRegistry.interface, await unsRegistry.getAddress(), unsRegistry); await unsRegistry.addProxyReader(reader.address); @@ -52,20 +49,14 @@ describe('UNSRegistry (reverse)', () => { describe('Minting', () => { it('should produce NewURI and SetReverse events', async () => { - const mintTx = await unsRegistry.mintWithRecords( - owner.address, - ['testminting', 'crypto'], - [], - [], - true, - ); + const mintTx = await unsRegistry.mintWithRecords(owner.address, ['testminting', 'crypto'], [], [], true); const mintTxReceipt = await mintTx.wait(); - const newUriEventIndex = mintTxReceipt.events?.findIndex( - ({ event }) => event === 'NewURI', + const newUriEventIndex = mintTxReceipt?.logs.findIndex((log) => + log instanceof EventLog ? log.eventName === 'NewURI' : false, ); - const setReverseIndex = mintTxReceipt.events?.findIndex( - ({ event }) => event === 'SetReverse', + const setReverseIndex = mintTxReceipt?.logs.findIndex((log) => + log instanceof EventLog ? log.eventName === 'SetReverse' : false, ); expect(newUriEventIndex).to.be.greaterThan(0); @@ -73,20 +64,14 @@ describe('UNSRegistry (reverse)', () => { }); it('should only produce NewURI and not SetReverse events with setReverse = false', async () => { - const mintTx = await unsRegistry.mintWithRecords( - owner.address, - ['testminting2', 'crypto'], - [], - [], - false, - ); + const mintTx = await unsRegistry.mintWithRecords(owner.address, ['testminting2', 'crypto'], [], [], false); const mintTxReceipt = await mintTx.wait(); - const newUriEventIndex = mintTxReceipt.events?.findIndex( - ({ event }) => event === 'NewURI', + const newUriEventIndex = mintTxReceipt?.logs.findIndex((log) => + log instanceof EventLog ? log.eventName === 'NewURI' : false, ); - const setReverseIndex = mintTxReceipt.events?.findIndex( - ({ event }) => event === 'SetReverse', + const setReverseIndex = mintTxReceipt?.logs.findIndex((log) => + log instanceof EventLog ? log.eventName === 'SetReverse' : false, ); expect(newUriEventIndex).to.be.greaterThan(0); @@ -98,75 +83,42 @@ describe('UNSRegistry (reverse)', () => { const uri = labels.join('.'); const tokenId = await unsRegistry.namehash(labels); - await unsRegistry.mintWithRecords( - coinbase.address, - labels, - ['key_1'], - ['value_1'], - true, - ); + await unsRegistry.mintWithRecords(coinbase.address, labels, ['key_1'], ['value_1'], true); - expect(await unsRegistry.ownerOf(tokenId)).to.be.equal( - coinbase.address, - ); - expect(await unsRegistry.reverseOf(coinbase.address)).to.be.equal( - tokenId, - ); - expect(await unsRegistry.reverseNameOf(coinbase.address)).to.be.equal( - uri, - ); + expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(coinbase.address); + expect(await unsRegistry.reverseOf(coinbase.address)).to.be.equal(tokenId); + expect(await unsRegistry.reverseNameOf(coinbase.address)).to.be.equal(uri); }); it('should not set reverse resolution on mint if withReverse = false', async () => { const labels = ['reversemint4_21', 'crypto']; const tokenId = await unsRegistry.namehash(labels); - await unsRegistry.mintWithRecords( - coinbase.address, - labels, - ['key_1'], - ['value_1'], - false, - ); + await unsRegistry.mintWithRecords(coinbase.address, labels, ['key_1'], ['value_1'], false); - expect(await unsRegistry.ownerOf(tokenId)).to.be.equal( - coinbase.address, - ); - expect(await unsRegistry.reverseOf(coinbase.address)).to.be.equal( - ZERO_ADDRESS, - ); - expect(await unsRegistry.reverseNameOf(coinbase.address)).to.be.equal( - '', - ); + expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(coinbase.address); + expect(await unsRegistry.reverseOf(coinbase.address)).to.be.equal(ZERO_ADDRESS); + expect(await unsRegistry.reverseNameOf(coinbase.address)).to.be.equal(''); }); it('should produce SetReverse event after NewURI', async () => { const labels = ['reversemint41_2', 'crypto']; const tokenId = await unsRegistry.namehash(labels); - const mintTx = await unsRegistry.mintWithRecords( - coinbase.address, - labels, - ['key_1'], - ['value_1'], - true, - ); + const mintTx = await unsRegistry.mintWithRecords(coinbase.address, labels, ['key_1'], ['value_1'], true); const mintTxReceipt = await mintTx.wait(); - const newUriEventIndex = mintTxReceipt.events?.findIndex( - ({ event }) => event === 'NewURI', + const newUriEventIndex = mintTxReceipt?.logs.findIndex((log) => + log instanceof EventLog ? log.eventName === 'NewURI' : false, ); - const setReverseIndex = mintTxReceipt.events?.findIndex( - ({ event }) => event === 'SetReverse', + const setReverseIndex = mintTxReceipt?.logs.findIndex((log) => + log instanceof EventLog ? log.eventName === 'SetReverse' : false, ); expect(setReverseIndex).to.be.greaterThan(0); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - expect(mintTxReceipt.events?.[setReverseIndex!].args).to.deep.equal([ - coinbase.address, - tokenId, - ]); + const setReverseEvent = mintTxReceipt?.logs?.[setReverseIndex!] as EventLog; + expect(setReverseEvent.args).to.deep.equal([coinbase.address, tokenId]); expect(setReverseIndex).to.be.greaterThan(newUriEventIndex); }); @@ -175,31 +127,18 @@ describe('UNSRegistry (reverse)', () => { const labels = ['reversemint42_2', 'crypto']; const uri = labels.join('.'); const tokenId = await mintDomain({ unsRegistry, owner: coinbase.address, labels }); - expect(await unsRegistry.reverseOf(coinbase.address)).to.be.equal( - tokenId, - ); - expect(await unsRegistry.reverseNameOf(coinbase.address)).to.be.equal( - uri, - ); + expect(await unsRegistry.reverseOf(coinbase.address)).to.be.equal(tokenId); + expect(await unsRegistry.reverseNameOf(coinbase.address)).to.be.equal(uri); const labels1 = ['reversemint43', 'crypto']; - await expect( - unsRegistry.mintWithRecords( - coinbase.address, - labels1, - ['key_1'], - ['value_1'], - true, - ), - ).not.to.emit(unsRegistry, 'SetReverse'); - - expect(await unsRegistry.reverseOf(coinbase.address)).to.be.equal( - tokenId, - ); - expect(await unsRegistry.reverseNameOf(coinbase.address)).to.be.equal( - uri, + await expect(unsRegistry.mintWithRecords(coinbase.address, labels1, ['key_1'], ['value_1'], true)).not.to.emit( + unsRegistry, + 'SetReverse', ); + + expect(await unsRegistry.reverseOf(coinbase.address)).to.be.equal(tokenId); + expect(await unsRegistry.reverseNameOf(coinbase.address)).to.be.equal(uri); }); }); @@ -212,7 +151,7 @@ describe('UNSRegistry (reverse)', () => { owner, labels: ['res_1', 'x'], withoutReverse: true, - } ); + }); const _unsRegistry = unsRegistry.connect(owner); await expect(_unsRegistry['setReverse(string[])'](labels)) @@ -252,19 +191,11 @@ describe('UNSRegistry (reverse)', () => { .to.emit(unsRegistry, 'SetReverse') .withArgs(owner.address, tokenId.toString()); - expect( - await unsRegistry.reverseOf(ethers.utils.getAddress(owner.address)), - ).to.be.equal(tokenId); - expect( - await unsRegistry.reverseOf(owner.address.toLowerCase()), - ).to.be.equal(tokenId); - - expect( - await unsRegistry.reverseNameOf(ethers.utils.getAddress(owner.address)), - ).to.be.equal(uri); - expect( - await unsRegistry.reverseNameOf(owner.address.toLowerCase()), - ).to.be.equal(uri); + expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(tokenId); + expect(await unsRegistry.reverseOf(owner.address.toLowerCase())).to.be.equal(tokenId); + + expect(await unsRegistry.reverseNameOf(owner.address)).to.be.equal(uri); + expect(await unsRegistry.reverseNameOf(owner.address.toLowerCase())).to.be.equal(uri); }); it('revert setting reverse record by non-owner', async () => { @@ -277,9 +208,7 @@ describe('UNSRegistry (reverse)', () => { }); const _unsRegistry = unsRegistry.connect(receiver); - await expect( - _unsRegistry['setReverse(string[])'](labels), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_OWNER'); + await expect(_unsRegistry['setReverse(string[])'](labels)).to.be.revertedWith('Registry: SENDER_IS_NOT_OWNER'); expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(0); }); @@ -312,9 +241,7 @@ describe('UNSRegistry (reverse)', () => { expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(tokenId); expect(await unsRegistry.reverseNameOf(owner.address)).to.be.equal(uri); - await unsRegistry - .connect(owner) - .transferFrom(owner.address, receiver.address, tokenId2); + await unsRegistry.connect(owner).transferFrom(owner.address, receiver.address, tokenId2); expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(tokenId); expect(await unsRegistry.reverseOf(receiver.address)).to.be.equal(0); @@ -332,9 +259,7 @@ describe('UNSRegistry (reverse)', () => { expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(tokenId); expect(await unsRegistry.reverseNameOf(owner.address)).to.be.equal(uri); - await expect(_unsRegistry.removeReverse()) - .to.emit(unsRegistry, 'RemoveReverse') - .withArgs(owner.address); + await expect(_unsRegistry.removeReverse()).to.emit(unsRegistry, 'RemoveReverse').withArgs(owner.address); expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(0); expect(await unsRegistry.reverseNameOf(owner.address)).to.be.equal(''); @@ -346,9 +271,7 @@ describe('UNSRegistry (reverse)', () => { expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(0); expect(await unsRegistry.reverseNameOf(owner.address)).to.be.equal(''); - await expect(_unsRegistry.removeReverse()).to.be.revertedWith( - 'Registry: REVERSE_RECORD_IS_EMPTY', - ); + await expect(_unsRegistry.removeReverse()).to.be.revertedWith('Registry: REVERSE_RECORD_IS_EMPTY'); }); it('should set reverse resolution for labels', async () => { @@ -378,8 +301,7 @@ describe('UNSRegistry (reverse)', () => { }); const _unsRegistry = unsRegistry.connect(reader); - await expect(_unsRegistry['setReverse(string[])'](labels)) - .to.be.revertedWith('Registry: SENDER_IS_NOT_OWNER'); + await expect(_unsRegistry['setReverse(string[])'](labels)).to.be.revertedWith('Registry: SENDER_IS_NOT_OWNER'); }); }); @@ -394,12 +316,7 @@ describe('UNSRegistry (reverse)', () => { withoutReverse: true, }); - const params = await buildExecuteParams( - 'setReverse(string[])', - [labels], - owner, - tokenId, - ); + const params = await buildExecuteParams('setReverse(string[])', [labels], owner, tokenId); await unsRegistry.execute(params.req, params.signature); expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(tokenId); @@ -415,12 +332,7 @@ describe('UNSRegistry (reverse)', () => { withoutReverse: true, }); - const params = await buildExecuteParams( - 'setReverse(string[])', - [labels], - receiver, - tokenId, - ); + const params = await buildExecuteParams('setReverse(string[])', [labels], receiver, tokenId); await expect(unsRegistry.execute(params.req, params.signature)).to.be.revertedWith( 'Registry: SENDER_IS_NOT_OWNER', ); @@ -438,15 +350,8 @@ describe('UNSRegistry (reverse)', () => { withoutReverse: true, }); - const params = await buildExecuteParams( - 'setReverse(string[])', - [labels], - owner, - 1, - ); - await expect(unsRegistry.execute(params.req, params.signature)).to.be.revertedWith( - 'Registry: TOKEN_INVALID', - ); + const params = await buildExecuteParams('setReverse(string[])', [labels], owner, 1); + await expect(unsRegistry.execute(params.req, params.signature)).to.be.revertedWith('Registry: TOKEN_INVALID'); expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(0); expect(await unsRegistry.reverseNameOf(owner.address)).to.be.equal(''); @@ -459,12 +364,7 @@ describe('UNSRegistry (reverse)', () => { expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(tokenId); expect(await unsRegistry.reverseNameOf(owner.address)).to.be.equal(uri); - const { req, signature } = await buildExecuteParams( - 'removeReverse()', - [], - owner, - owner.address, - ); + const { req, signature } = await buildExecuteParams('removeReverse()', [], owner, owner.address); await unsRegistry.execute(req, signature); expect(await unsRegistry.reverseOf(owner.address)).to.be.equal(0); diff --git a/test/UNSRegistry.test.ts b/test/UNSRegistry.test.ts index 7625ee40..55cde363 100644 --- a/test/UNSRegistry.test.ts +++ b/test/UNSRegistry.test.ts @@ -1,16 +1,14 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import namehash from 'eth-ens-namehash'; -import { utils, BigNumber } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { Block } from '@ethersproject/abstract-provider'; +import { id, namehash } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { UNSRegistry } from '../types/contracts'; import { UNSRegistryMock } from '../types/contracts/mocks'; import { UNSRegistry__factory } from '../types/factories/contracts'; import { UNSRegistryMock__factory } from '../types/factories/contracts/mocks'; import { EXPIRABLE_TLDS, TLD, ZERO_ADDRESS } from './helpers/constants'; import { mintDomain, mintRandomDomain } from './helpers/registry'; -import { increaseTimeBy } from './helpers/utils'; +import { getLatestBlockTimestamp, increaseTimeBy } from './helpers/utils'; describe('UNSRegistry', () => { let unsRegistry: UNSRegistry; @@ -24,7 +22,7 @@ describe('UNSRegistry', () => { sender: SignerWithAddress, accounts: string[]; - let latestBlock: Block; + let latestBlockTimestamp: number; before(async () => { signers = await ethers.getSigners(); @@ -47,7 +45,7 @@ describe('UNSRegistry', () => { }); beforeEach(async () => { - latestBlock = await ethers.provider.getBlock('latest'); + latestBlockTimestamp = await getLatestBlockTimestamp(); }); describe('General', () => { @@ -57,13 +55,13 @@ describe('UNSRegistry', () => { it('should resolve properly', async () => { const tokenId = await mintDomain({ unsRegistry, owner: coinbase.address, labels: ['resolution', 'crypto'] }); - expect(await unsRegistry.resolverOf(tokenId)).to.be.equal(unsRegistry.address); + expect(await unsRegistry.resolverOf(tokenId)).to.be.equal(await unsRegistry.getAddress()); await unsRegistry.burn(tokenId); expect(await unsRegistry.resolverOf(tokenId)).to.be.equal(ZERO_ADDRESS); await mintDomain({ unsRegistry, owner: coinbase.address, labels: ['resolution', 'crypto'] }); - expect(await unsRegistry.resolverOf(tokenId)).to.be.equal(unsRegistry.address); + expect(await unsRegistry.resolverOf(tokenId)).to.be.equal(await unsRegistry.getAddress()); }); it('should set URI prefix', async () => { @@ -78,7 +76,7 @@ describe('UNSRegistry', () => { for (const key of Object.keys(TLD)) { it(`should be possible to mint .${key} domain`, async () => { - const expiry = EXPIRABLE_TLDS.includes(key) ? latestBlock.timestamp + 60 * 60 * 24 : 0; + const expiry = EXPIRABLE_TLDS.includes(key) ? latestBlockTimestamp + 60 * 60 * 24 : 0; const tokenId = await mintDomain({ unsRegistry, @@ -93,7 +91,7 @@ describe('UNSRegistry', () => { describe('namehash', () => { it('should return valid namehash', async () => { const tokenId = await unsRegistry.namehash(['12ew3', 'crypto']); - expect(tokenId).to.be.equal(namehash.hash('12ew3.crypto')); + expect(tokenId).to.be.equal(namehash('12ew3.crypto')); }); it('should revert when childId lable is empty', async () => { @@ -117,14 +115,14 @@ describe('UNSRegistry', () => { unsRegistry, owner: coinbase.address, tld: 'com', - expiry: latestBlock.timestamp + 60 * 60 * 24, + expiry: latestBlockTimestamp + 60 * 60 * 24, }); expect(await unsRegistry.exists(tokenId)).to.be.equal(true); }); it('should return true with expired token', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, @@ -148,13 +146,13 @@ describe('UNSRegistry', () => { }); it('should return owner of expirable token', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'crypto', expiry }); expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(coinbase.address); }); it('should return zero address if token is expired', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'com', expiry }); await increaseTimeBy(60 * 60 * 24); @@ -187,7 +185,7 @@ describe('UNSRegistry', () => { }); describe('burn', () => { - let tokenId: BigNumber; + let tokenId: bigint; beforeEach(async () => { tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'crypto' }); @@ -202,7 +200,7 @@ describe('UNSRegistry', () => { }); it('should revert with expirable token', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'com', expiry }); await expect(unsRegistry.burn(tokenId)).to.be.revertedWith('Registry: TOKEN_EXPIRABLE'); @@ -228,7 +226,7 @@ describe('UNSRegistry', () => { }); it('should revert with expired token', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'com', expiry }); await increaseTimeBy(60 * 60 * 24); @@ -284,9 +282,11 @@ describe('UNSRegistry', () => { coinbase.address, labels, ['key1'], - ['42'], true, + ['42'], + true, ), - ).to.emit(unsRegistry, 'NewURI') + ) + .to.emit(unsRegistry, 'NewURI') .withArgs(tokenId, 'label_38f7.crypto'); expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(coinbase.address); @@ -294,7 +294,7 @@ describe('UNSRegistry', () => { it('should revert re-minting an expired domain', async () => { const labels = ['label_38f8', 'com']; - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintDomain({ unsRegistry, @@ -307,15 +307,9 @@ describe('UNSRegistry', () => { expect(await unsRegistry.isExpired(tokenId)).to.be.eq(true); - await expect( - unsRegistry.mintWithRecords( - receiver.address, - labels, - [], - [], - true, - ), - ).to.be.revertedWith('ERC721: token already minted'); + await expect(unsRegistry.mintWithRecords(receiver.address, labels, [], [], true)).to.be.revertedWith( + 'ERC721: token already minted', + ); }); it('should not allow minting subdomain if not minting manager', async () => { @@ -333,7 +327,7 @@ describe('UNSRegistry', () => { const labels = ['label_38qwex', 'crypto']; const parentTokenId = await mintDomain({ unsRegistry: unsRegistryMock, owner, labels }); - await unsRegistryMock.connect(coinbase).upgradeAll([ parentTokenId ]); + await unsRegistryMock.connect(coinbase).upgradeAll([parentTokenId]); labels.unshift('sub'); @@ -342,9 +336,8 @@ describe('UNSRegistry', () => { unsRegistry: unsRegistryMock, owner, labels, - })).to.be.revertedWith( - 'Registry: TOKEN_UPGRADED', - ); + }), + ).to.be.revertedWith('Registry: TOKEN_UPGRADED'); }); }); @@ -370,7 +363,7 @@ describe('UNSRegistry', () => { it('should properly unlock expirable domain', async () => { const labels = ['label_12324_unlock', 'com']; - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintDomain({ labels, unsRegistry, @@ -397,7 +390,7 @@ describe('UNSRegistry', () => { it('should fail if called by non-allowed address', async () => { const labels = ['label_12325_unlock_fail', 'com']; - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintDomain({ labels, @@ -408,9 +401,9 @@ describe('UNSRegistry', () => { expiry, }); - await expect( - unsRegistry.connect(receiver).unlock(receiver.address, tokenId), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_MINTING_MANAGER'); + await expect(unsRegistry.connect(receiver).unlock(receiver.address, tokenId)).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_MINTING_MANAGER', + ); }); }); @@ -475,7 +468,7 @@ describe('UNSRegistry', () => { it('should unlock expired domain to new owner, set records and reverse', async () => { const labels = ['label_38f01', 'com']; - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const initialOwnerBalance = await unsRegistry.balanceOf(owner.address); @@ -488,12 +481,8 @@ describe('UNSRegistry', () => { await increaseTimeBy(60 * 60 * 24); - expect( - await unsRegistry.isExpired(tokenId), - ).to.be.eq(true); - expect( - (await unsRegistry.balanceOf(owner.address)).sub(initialOwnerBalance), - ).to.be.eq(1); + expect(await unsRegistry.isExpired(tokenId)).to.be.eq(true); + expect((await unsRegistry.balanceOf(owner.address)) - initialOwnerBalance).to.be.eq(1); const newExpiry = expiry + 60 * 60 * 24; const initialReceiverBalance = await unsRegistry.balanceOf(receiver.address); @@ -502,23 +491,12 @@ describe('UNSRegistry', () => { await unsRegistry.setExpiry(newExpiry, tokenId); await unsRegistry.connect(receiver).removeReverse(); - await expect( - unsRegistry.unlockWithRecords( - receiver.address, - labels, - ['key1'], - ['42'], - true, - ), - ).to.emit(unsRegistry, 'Transfer') + await expect(unsRegistry.unlockWithRecords(receiver.address, labels, ['key1'], ['42'], true)) + .to.emit(unsRegistry, 'Transfer') .withArgs(owner.address, receiver.address, tokenId); - expect( - await unsRegistry.balanceOf(owner.address), - ).to.be.eq(initialOwnerBalance); - expect( - (await unsRegistry.balanceOf(receiver.address)).sub(initialReceiverBalance), - ).to.be.eq(1); + expect(await unsRegistry.balanceOf(owner.address)).to.be.eq(initialOwnerBalance); + expect((await unsRegistry.balanceOf(receiver.address)) - initialReceiverBalance).to.be.eq(1); expect(await unsRegistry.ownerOf(tokenId)).to.eq(receiver.address); expect(await unsRegistry.expiryOf(tokenId)).to.eq(newExpiry); @@ -552,8 +530,8 @@ describe('UNSRegistry', () => { }); describe('Registry (ownership management)', () => { - let tokenId: BigNumber; - let expirableTokenId: BigNumber; + let tokenId: bigint; + let expirableTokenId: bigint; beforeEach(async () => { tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'crypto' }); @@ -561,24 +539,22 @@ describe('UNSRegistry', () => { unsRegistry, owner: coinbase.address, tld: 'com', - expiry: latestBlock.timestamp + 60 * 60 * 24, + expiry: latestBlockTimestamp + 60 * 60 * 24, }); }); describe('setOwner', () => { it('sets owner correctly', async () => { - await expect( - unsRegistry.setOwner(owner.address, tokenId), - ).to.emit(unsRegistry, 'Transfer') + await expect(unsRegistry.setOwner(owner.address, tokenId)) + .to.emit(unsRegistry, 'Transfer') .withArgs(coinbase.address, owner.address, tokenId); expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(owner.address); }); it('sets owner correctly for expirable token', async () => { - await expect( - unsRegistry.setOwner(owner.address, expirableTokenId), - ).to.emit(unsRegistry, 'Transfer') + await expect(unsRegistry.setOwner(owner.address, expirableTokenId)) + .to.emit(unsRegistry, 'Transfer') .withArgs(coinbase.address, owner.address, expirableTokenId); expect(await unsRegistry.ownerOf(expirableTokenId)).to.be.equal(owner.address); @@ -587,9 +563,9 @@ describe('UNSRegistry', () => { it('reverts if token is expired', async () => { await increaseTimeBy(60 * 60 * 24); - await expect( - unsRegistry.setOwner(owner.address, expirableTokenId), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(unsRegistry.setOwner(owner.address, expirableTokenId)).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', + ); }); it('reverts if expired and sender is approved', async () => { @@ -597,9 +573,9 @@ describe('UNSRegistry', () => { await increaseTimeBy(60 * 60 * 24); - await expect( - unsRegistry.connect(sender).setOwner(owner.address, expirableTokenId), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(unsRegistry.connect(sender).setOwner(owner.address, expirableTokenId)).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', + ); }); it('reverts if expired and sender is approvedForAll', async () => { @@ -607,15 +583,15 @@ describe('UNSRegistry', () => { await increaseTimeBy(60 * 60 * 24); - await expect( - unsRegistry.connect(sender).setOwner(owner.address, expirableTokenId), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(unsRegistry.connect(sender).setOwner(owner.address, expirableTokenId)).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', + ); }); it('reverts if not owner', async () => { - await expect( - unsRegistry.connect(signers[1]).setOwner(owner.address, tokenId), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(unsRegistry.connect(signers[1]).setOwner(owner.address, tokenId)).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', + ); }); it('sets owner correctly even if token is upgraded', async () => { @@ -640,9 +616,7 @@ describe('UNSRegistry', () => { await unsRegistry.set('key_16', 'value_23', tokenId); expect(await unsRegistry.get('key_16', tokenId)).to.be.equal('value_23'); - await expect(unsRegistry.setOwner(owner.address, tokenId)) - .to.not.emit(unsRegistry, 'ResetRecords') - .withArgs(tokenId); + await expect(unsRegistry.setOwner(owner.address, tokenId)).to.not.emit(unsRegistry, 'ResetRecords'); expect(await unsRegistry.get('key_16', tokenId)).to.be.equal('value_23'); }); }); @@ -663,9 +637,7 @@ describe('UNSRegistry', () => { it('reverts if token is expired', async () => { await increaseTimeBy(60 * 60 * 24); - await expect( - unsRegistry.transferFrom(coinbase.address, owner.address, expirableTokenId), - ).to.be.revertedWith( + await expect(unsRegistry.transferFrom(coinbase.address, owner.address, expirableTokenId)).to.be.revertedWith( 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', ); }); @@ -735,9 +707,7 @@ describe('UNSRegistry', () => { it('reverts if token is expired', async () => { await increaseTimeBy(60 * 60 * 24); - await expect( - unsRegistry[selector](coinbase.address, owner.address, expirableTokenId), - ).to.be.revertedWith( + await expect(unsRegistry[selector](coinbase.address, owner.address, expirableTokenId)).to.be.revertedWith( 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', ); }); @@ -762,11 +732,7 @@ describe('UNSRegistry', () => { it('reverts if not owner', async () => { await expect( - unsRegistry.connect(signers[1])[selector]( - coinbase.address, - owner.address, - tokenId, - ), + unsRegistry.connect(signers[1])[selector](coinbase.address, owner.address, tokenId), ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); }); @@ -795,32 +761,22 @@ describe('UNSRegistry', () => { const selector = 'safeTransferFrom(address,address,uint256,bytes)'; it('transfers domain correctly', async () => { - await unsRegistry[selector]( - coinbase.address, - owner.address, - tokenId, - '0x', - ); + await unsRegistry[selector](coinbase.address, owner.address, tokenId, '0x'); expect(await unsRegistry.ownerOf(tokenId)).to.be.equal(owner.address); }); it('transfers expirable domain correctly', async () => { - await unsRegistry[selector]( - coinbase.address, - owner.address, - expirableTokenId, - '0x', - ); + await unsRegistry[selector](coinbase.address, owner.address, expirableTokenId, '0x'); expect(await unsRegistry.ownerOf(expirableTokenId)).to.be.equal(owner.address); }); it('reverts if domain is expired', async () => { await increaseTimeBy(60 * 60 * 24); - await expect( - unsRegistry[selector](coinbase.address, owner.address, expirableTokenId, '0x'), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(unsRegistry[selector](coinbase.address, owner.address, expirableTokenId, '0x')).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', + ); }); it('reverts if domain is expired and sender is approved', async () => { @@ -843,12 +799,7 @@ describe('UNSRegistry', () => { it('reverts if not owner', async () => { await expect( - unsRegistry.connect(signers[1])[selector]( - coinbase.address, - owner.address, - tokenId, - '0x', - ), + unsRegistry.connect(signers[1])[selector](coinbase.address, owner.address, tokenId, '0x'), ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); }); @@ -856,12 +807,7 @@ describe('UNSRegistry', () => { tokenId = await mintRandomDomain({ unsRegistry: unsRegistryMock, owner: coinbase.address, tld: 'crypto' }); await unsRegistryMock.upgradeAll([tokenId]); - await unsRegistryMock[selector]( - coinbase.address, - owner.address, - tokenId, - '0x', - ); + await unsRegistryMock[selector](coinbase.address, owner.address, tokenId, '0x'); expect(await unsRegistryMock.ownerOf(tokenId)).to.be.equal(owner.address); }); @@ -870,9 +816,7 @@ describe('UNSRegistry', () => { await unsRegistry.set('key_12', 'value_23', tokenId); expect(await unsRegistry.get('key_12', tokenId)).to.be.equal('value_23'); - await expect( - unsRegistry[selector](coinbase.address, accounts[0], tokenId, '0x'), - ) + await expect(unsRegistry[selector](coinbase.address, accounts[0], tokenId, '0x')) .to.emit(unsRegistry, 'ResetRecords') .withArgs(tokenId); expect(await unsRegistry.get('key_12', tokenId)).to.be.equal(''); @@ -883,11 +827,11 @@ describe('UNSRegistry', () => { describe('Registry (records management)', () => { const initializeKey = async (key: string) => { await unsRegistry.addKey(key); - return BigNumber.from(utils.id(key)); + return BigInt(id(key)); }; - let tokenId: BigNumber; - let expirableTokenId: BigNumber; + let tokenId: bigint; + let expirableTokenId: bigint; beforeEach(async () => { tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'crypto' }); @@ -895,7 +839,7 @@ describe('UNSRegistry', () => { unsRegistry, owner: coinbase.address, tld: 'com', - expiry: latestBlock.timestamp + 60 * 60 * 24, + expiry: latestBlockTimestamp + 60 * 60 * 24, }); }); @@ -966,9 +910,7 @@ describe('UNSRegistry', () => { const key = 'new-key'; const value = 'value'; - await expect(unsRegistry.set(key, value, tokenId)) - .to.emit(unsRegistry, 'NewKey') - .withArgs(tokenId, utils.id(key), key); + await expect(unsRegistry.set(key, value, tokenId)).to.emit(unsRegistry, 'NewKey').withArgs(tokenId, key, key); await expect(unsRegistry.set(key, value, tokenId)).not.to.emit(unsRegistry, 'NewKey'); }); @@ -979,7 +921,7 @@ describe('UNSRegistry', () => { await expect(unsRegistry.set(key, value, tokenId)) .to.emit(unsRegistry, 'Set') - .withArgs(tokenId, utils.id(key), utils.id(value), key, value); + .withArgs(tokenId, key, value, key, value); }); }); @@ -1081,9 +1023,9 @@ describe('UNSRegistry', () => { it('should fail with expired token', async () => { await increaseTimeBy(60 * 60 * 24); - await expect( - unsRegistry.reset(expirableTokenId), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(unsRegistry.reset(expirableTokenId)).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', + ); }); it('should fail with expired token and sender is approved', async () => { @@ -1091,9 +1033,9 @@ describe('UNSRegistry', () => { await increaseTimeBy(60 * 60 * 24); - await expect( - unsRegistry.connect(sender).reset(expirableTokenId), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(unsRegistry.connect(sender).reset(expirableTokenId)).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', + ); }); it('should fail with expired token and sender is approvedForAll', async () => { @@ -1101,9 +1043,9 @@ describe('UNSRegistry', () => { await increaseTimeBy(60 * 60 * 24); - await expect( - unsRegistry.connect(sender).reset(expirableTokenId), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(unsRegistry.connect(sender).reset(expirableTokenId)).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', + ); }); }); @@ -1112,7 +1054,7 @@ describe('UNSRegistry', () => { const expectedKey = 'new-hashed-key'; await unsRegistry.set(expectedKey, 'value', tokenId); - const keyFromHash = await unsRegistry.getKey(BigNumber.from(utils.id(expectedKey))); + const keyFromHash = await unsRegistry.getKey(BigInt(id(expectedKey))); expect(keyFromHash).to.be.equal(expectedKey); }); @@ -1120,7 +1062,7 @@ describe('UNSRegistry', () => { const expectedKey = 'new-hashed-key'; await unsRegistry.set(expectedKey, 'value', expirableTokenId); - const keyFromHash = await unsRegistry.getKey(BigNumber.from(utils.id(expectedKey))); + const keyFromHash = await unsRegistry.getKey(BigInt(id(expectedKey))); expect(keyFromHash).to.be.equal(expectedKey); }); @@ -1130,7 +1072,7 @@ describe('UNSRegistry', () => { await increaseTimeBy(60 * 60 * 24); - const keyHash = BigNumber.from(utils.id(expectedKey)); + const keyHash = BigInt(id(expectedKey)); expect(await unsRegistry.getKey(keyHash)).to.be.equal(expectedKey); expect(await unsRegistry.getKeys([keyHash])).to.be.eql([expectedKey]); @@ -1140,7 +1082,7 @@ describe('UNSRegistry', () => { const expectedKeys = ['keyhash-many-1', 'keyhash-many-2']; await unsRegistry.setMany(expectedKeys, ['value', 'value'], tokenId); - const expectedKeyHashes = expectedKeys.map((key) => BigNumber.from(utils.id(key))); + const expectedKeyHashes = expectedKeys.map((key) => BigInt(id(key))); const keysFromHashes = await unsRegistry.getKeys(expectedKeyHashes); expect(keysFromHashes).to.be.eql(expectedKeys); }); @@ -1164,9 +1106,9 @@ describe('UNSRegistry', () => { it('should fail when trying to reconfigure expired domain', async () => { await increaseTimeBy(60 * 60 * 24); - await expect( - unsRegistry.reconfigure(['new-key'], ['new-value'], expirableTokenId), - ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); + await expect(unsRegistry.reconfigure(['new-key'], ['new-value'], expirableTokenId)).to.be.revertedWith( + 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', + ); }); it('should fail when trying to reconfigure expired domain and sender is approved', async () => { @@ -1196,7 +1138,7 @@ describe('UNSRegistry', () => { const expectedValue = 'get-key-by-hash-value'; await unsRegistry.set(key, expectedValue, tokenId); - const result = await unsRegistry.getByHash(utils.id(key), tokenId); + const result = await unsRegistry.getByHash(id(key), tokenId); expect(result.value).to.be.equal(expectedValue); expect(result.key).to.be.equal(key); }); @@ -1206,14 +1148,11 @@ describe('UNSRegistry', () => { const value = 'get-key-by-hash-value'; await unsRegistry.set(key, value, expirableTokenId); - const result = await unsRegistry.getByHash(utils.id(key), expirableTokenId); + const result = await unsRegistry.getByHash(id(key), expirableTokenId); expect(result.key).to.be.equal(key); expect(result.value).to.be.equal(value); - expect(await unsRegistry.getManyByHash([utils.id(key)], expirableTokenId)).to.be.eql([ - [key], - [value], - ]); + expect(await unsRegistry.getManyByHash([id(key)], expirableTokenId)).to.be.eql([[key], [value]]); }); it('should return empty value by keyhash if reader is ProxyReader and token is upgraded', async () => { @@ -1224,9 +1163,9 @@ describe('UNSRegistry', () => { await unsRegistryMock.set(key, value, tokenId); await unsRegistryMock.upgradeAll([tokenId]); - expect((await unsRegistryMock.connect(reader).getByHash(utils.id(key), tokenId)).value).to.be.equal(''); + expect((await unsRegistryMock.connect(reader).getByHash(id(key), tokenId)).value).to.be.equal(''); - expect((await unsRegistryMock.connect(coinbase).getByHash(utils.id(key), tokenId)).value).to.be.equal(value); + expect((await unsRegistryMock.connect(coinbase).getByHash(id(key), tokenId)).value).to.be.equal(value); }); it('should revert setting new values by key hashes with expired token', async () => { @@ -1237,36 +1176,28 @@ describe('UNSRegistry', () => { await increaseTimeBy(60 * 60 * 24); - expect( - await unsRegistry.getByHash(utils.id(key), expirableTokenId), - ).to.be.eql([key, value]); + expect(await unsRegistry.getByHash(id(key), expirableTokenId)).to.be.eql([key, value]); - expect(await unsRegistry.getManyByHash( - [utils.id(key)], expirableTokenId), - ).to.be.eql([ [key], [value] ]); + expect(await unsRegistry.getManyByHash([id(key)], expirableTokenId)).to.be.eql([[key], [value]]); - await expect(unsRegistry.setByHash(utils.id(key), 'new-value', expirableTokenId)).to.be.revertedWith( + await expect(unsRegistry.setByHash(id(key), 'new-value', expirableTokenId)).to.be.revertedWith( 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', ); - await expect(unsRegistry.setManyByHash([utils.id(key)], ['new-value'], expirableTokenId)).to.be.revertedWith( + await expect(unsRegistry.setManyByHash([id(key)], ['new-value'], expirableTokenId)).to.be.revertedWith( 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', ); await unsRegistry.approve(sender.address, expirableTokenId); - await expect( - unsRegistry.connect(sender).setByHash(utils.id(key), 'new-value', expirableTokenId), - ).to.be.revertedWith( + await expect(unsRegistry.connect(sender).setByHash(id(key), 'new-value', expirableTokenId)).to.be.revertedWith( 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', ); await unsRegistry.setApprovalForAll(sender.address, true); await expect( - unsRegistry.connect(sender).setManyByHash([utils.id(key)], ['new-value'], expirableTokenId), - ).to.be.revertedWith( - 'Registry: SENDER_IS_NOT_APPROVED_OR_OWNER', - ); + unsRegistry.connect(sender).setManyByHash([id(key)], ['new-value'], expirableTokenId), + ).to.be.revertedWith('Registry: SENDER_IS_NOT_APPROVED_OR_OWNER'); }); it('should get multiple values by hashes', async () => { @@ -1274,7 +1205,7 @@ describe('UNSRegistry', () => { const expectedValues = ['value-42', 'value-43']; await unsRegistry.setMany(keys, expectedValues, tokenId); - const hashedKeys = keys.map((key) => BigNumber.from(utils.id(key))); + const hashedKeys = keys.map((key) => BigInt(id(key))); const result = await unsRegistry.getManyByHash(hashedKeys, tokenId); expect(result).to.be.eql([keys, expectedValues]); }); @@ -1287,7 +1218,7 @@ describe('UNSRegistry', () => { await unsRegistryMock.setMany(keys, values, tokenId); await unsRegistryMock.upgradeAll([tokenId]); - const hashedKeys = keys.map((key) => BigNumber.from(utils.id(key))); + const hashedKeys = keys.map((key) => BigInt(id(key))); const [, resultingValues] = await unsRegistryMock.connect(reader).getManyByHash(hashedKeys, tokenId); @@ -1311,7 +1242,7 @@ describe('UNSRegistry', () => { it('should revert setting record by hash when key is not registered', async () => { const expectedKey = 'key_23f3c'; - const keyHash = BigNumber.from(utils.id(expectedKey)); + const keyHash = BigInt(id(expectedKey)); await expect(unsRegistry.setByHash(keyHash, 'value', tokenId)).to.be.revertedWith( 'RecordStorage: KEY_NOT_FOUND', @@ -1345,7 +1276,7 @@ describe('UNSRegistry', () => { const key1 = 'key_2d83c'; const key2 = 'key_4o83f'; const key1Hash = await initializeKey(key1); - const key2Hash = BigNumber.from(utils.id(key2)); + const key2Hash = BigInt(id(key2)); await expect(unsRegistry.setManyByHash([key1Hash, key2Hash], ['value1', 'value2'], tokenId)).to.be.revertedWith( 'RecordStorage: KEY_NOT_FOUND', @@ -1358,7 +1289,7 @@ describe('UNSRegistry', () => { const exitsKeyHashTx = await unsRegistry.set('keyhash-gas', 'value', tokenId); const exitsKeyHashTxReceipt = await exitsKeyHashTx.wait(); - expect(newKeyHashTxReceipt.gasUsed).to.be.above(exitsKeyHashTxReceipt.gasUsed); + expect(newKeyHashTxReceipt?.gasUsed).to.be.above(exitsKeyHashTxReceipt?.gasUsed); const newKeyHashTx2 = await unsRegistry.setMany( ['keyhash-gas-1', 'keyhash-gas-2'], @@ -1373,7 +1304,7 @@ describe('UNSRegistry', () => { ); const exitsKeyHashTxReceipt2 = await exitsKeyHashTx2.wait(); - expect(newKeyHashTxReceipt2.gasUsed).to.be.above(exitsKeyHashTxReceipt2.gasUsed); + expect(newKeyHashTxReceipt2?.gasUsed).to.be.above(exitsKeyHashTxReceipt2?.gasUsed); const newKeyHashTx3 = await unsRegistry.setMany( ['keyhash-gas-3', 'keyhash-gas-4', 'keyhash-gas-5'], @@ -1388,7 +1319,7 @@ describe('UNSRegistry', () => { ); const exitsKeyHashTxReceipt3 = await exitsKeyHashTx3.wait(); - expect(newKeyHashTxReceipt3.gasUsed).to.be.above(exitsKeyHashTxReceipt3.gasUsed); + expect(newKeyHashTxReceipt3?.gasUsed).to.be.above(exitsKeyHashTxReceipt3?.gasUsed); }); }); }); @@ -1396,7 +1327,7 @@ describe('UNSRegistry', () => { describe('Registry (renewals)', () => { describe('expiryOf', () => { it('should return expiry of a token', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase, tld: 'com', expiry }); expect(await unsRegistry.expiryOf(tokenId)).to.be.equal(expiry); @@ -1410,14 +1341,14 @@ describe('UNSRegistry', () => { describe('isExpired', () => { it('should return false if token is not expired', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'com', expiry }); expect(await unsRegistry.isExpired(tokenId)).to.be.equal(false); }); it('should return true if token is expired', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'com', expiry }); await increaseTimeBy(60 * 60 * 24 + 1); @@ -1433,21 +1364,21 @@ describe('UNSRegistry', () => { describe('setExpiry', () => { it('should set expiry for a token', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'com' }); const newExpiry = expiry + 60 * 60 * 24; - await expect( - unsRegistry.setExpiry(newExpiry, tokenId), - ).to.emit(unsRegistry, 'SetExpiry').withArgs(tokenId, newExpiry); + await expect(unsRegistry.setExpiry(newExpiry, tokenId)) + .to.emit(unsRegistry, 'SetExpiry') + .withArgs(tokenId, newExpiry); expect(await unsRegistry.expiryOf(tokenId)).to.be.equal(newExpiry); }); it('should not allow setting expiry in the past', async () => { - const expiry = latestBlock.timestamp + 60 * 60 * 24; + const expiry = latestBlockTimestamp + 60 * 60 * 24; const tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'com' }); await expect(unsRegistry.setExpiry(expiry - 60 * 60 * 24, tokenId)).to.be.revertedWith( @@ -1458,7 +1389,7 @@ describe('UNSRegistry', () => { it('should not allow setting expiry for non-existent token', async () => { const tokenId = await unsRegistry.namehash(['some_invalid_label', 'crypto']); - await expect(unsRegistry.setExpiry(latestBlock.timestamp + 60 * 60 * 24, tokenId)).to.be.revertedWith( + await expect(unsRegistry.setExpiry(latestBlockTimestamp + 60 * 60 * 24, tokenId)).to.be.revertedWith( 'ERC721: invalid token ID', ); }); @@ -1467,13 +1398,8 @@ describe('UNSRegistry', () => { const tokenId = await mintRandomDomain({ unsRegistry, owner: coinbase.address, tld: 'com' }); await expect( - unsRegistry.connect(signers[1]).setExpiry( - latestBlock.timestamp + 60 * 60 * 24, - tokenId, - ), - ).to.be.revertedWith( - 'Registry: SENDER_IS_NOT_MINTING_MANAGER', - ); + unsRegistry.connect(signers[1]).setExpiry(latestBlockTimestamp + 60 * 60 * 24, tokenId), + ).to.be.revertedWith('Registry: SENDER_IS_NOT_MINTING_MANAGER'); }); }); }); diff --git a/test/consumption/CNSRegistry.gas.test.ts b/test/consumption/CNSRegistry.gas.test.ts index b564f1a0..662c41d7 100644 --- a/test/consumption/CNSRegistry.gas.test.ts +++ b/test/consumption/CNSRegistry.gas.test.ts @@ -1,4 +1,4 @@ -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { ethers } from 'hardhat'; import { CNSRegistryForwarder } from '../../types/contracts/metatx'; import { CNSRegistry } from '../../types/dot-crypto/contracts'; @@ -32,15 +32,15 @@ describe('CNSRegistry (consumption)', () => { [owner, receiver, spender] = signers; registry = await new CNSRegistry__factory(owner).deploy(); - mintingController = await new MintingController__factory(owner).deploy(registry.address); - signatureController = await new SignatureController__factory(owner).deploy(registry.address); + mintingController = await new MintingController__factory(owner).deploy(await registry.getAddress()); + signatureController = await new SignatureController__factory(owner).deploy(await registry.getAddress()); - await registry.addController(mintingController.address); - await registry.addController(signatureController.address); + await registry.addController(await mintingController.getAddress()); + await registry.addController(await signatureController.getAddress()); - forwarder = await new CNSRegistryForwarder__factory(owner).deploy(signatureController.address); + forwarder = await new CNSRegistryForwarder__factory(owner).deploy(await signatureController.getAddress()); - buildExecuteParams = buildExecuteFunc(registry.interface, signatureController.address, forwarder); + buildExecuteParams = buildExecuteFunc(registry.interface, await signatureController.getAddress(), forwarder); }); it('`transferFrom` consumption', async () => { @@ -51,7 +51,7 @@ describe('CNSRegistry (consumption)', () => { const tokenId = await mintDomain(label, owner.address); const directTx = await registry.connect(owner).transferFrom(owner.address, receiver.address, tokenId); - const directTxReceipt = await directTx.wait(); + const directTxReceipt = (await directTx.wait())!; // Old meta-tx const tokenIdFor = await mintDomain(label + 'for', owner.address); @@ -61,12 +61,12 @@ describe('CNSRegistry (consumption)', () => { tokenIdFor, ]); const nonceFor = await signatureController.nonceOf(tokenIdFor); - const signatureFor = await sign(dataFor, signatureController.address, nonceFor, owner); + const signatureFor = await sign(dataFor, await signatureController.getAddress(), nonceFor, owner); const forTx = await signatureController .connect(spender) .transferFromFor(owner.address, receiver.address, tokenIdFor, signatureFor); - const forTxReceipt = await forTx.wait(); + const forTxReceipt = (await forTx.wait())!; // Forwarder const tokenIdForward = await mintDomain(label + 'forward', owner.address); @@ -78,15 +78,15 @@ describe('CNSRegistry (consumption)', () => { ); const forwardTx = await forwarder.connect(spender).execute(req, signature); - const forwardTxReceipt = await forwardTx.wait(); + const forwardTxReceipt = (await forwardTx.wait())!; result.push({ selector: 'transferFrom(address,address,uint256)', directTx: directTxReceipt.gasUsed.toString(), forTx: forTxReceipt.gasUsed.toString(), - diff1: percDiff(directTxReceipt.gasUsed.toNumber(), forTxReceipt.gasUsed.toNumber()) + ' %', + diff1: percDiff(directTxReceipt.gasUsed, forTxReceipt.gasUsed) + ' %', forwardTx: forwardTxReceipt.gasUsed.toString(), - diff2: percDiff(forTxReceipt.gasUsed.toNumber(), forwardTxReceipt.gasUsed.toNumber()) + ' %', + diff2: percDiff(forTxReceipt.gasUsed, forwardTxReceipt.gasUsed) + ' %', }); console.table(result); }); diff --git a/test/consumption/DotCoinBurner.gas.test.ts b/test/consumption/DotCoinBurner.gas.test.ts index 4e21bfe2..02e55300 100644 --- a/test/consumption/DotCoinBurner.gas.test.ts +++ b/test/consumption/DotCoinBurner.gas.test.ts @@ -1,14 +1,10 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { solidityKeccak256 } from 'ethers/lib/utils'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { BigNumber } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { solidityPackedKeccak256 } from 'ethers'; import { DotCoinBurner__factory, UNSRegistry__factory } from '../../types/factories/contracts'; import { DotCoinBurner, UNSRegistry } from '../../types/contracts'; -import { - DEAD_ADDRESS, - ZERO_ADDRESS, -} from '../helpers/constants'; +import { DEAD_ADDRESS, ZERO_ADDRESS } from '../helpers/constants'; import { mintDomain } from '../helpers/registry'; // Gas estimations is not needed to be ran due to temporary nature of DotCoinBurner contract @@ -28,7 +24,7 @@ describe.skip('DotCoinBurner (consumption)', () => { beforeEach(async () => { // deploy Dot Coin Burner - dotCoinBurner = await new DotCoinBurner__factory(coinbase).deploy(unsRegistry.address); + dotCoinBurner = await new DotCoinBurner__factory(coinbase).deploy(await unsRegistry.getAddress()); }); describe('Estimate gas spendings', () => { @@ -42,15 +38,16 @@ describe.skip('DotCoinBurner (consumption)', () => { }); async function verifyMultipleDomainsBurn (amount: number, labelPrefix: string) { - const mintedTokenIds: BigNumber[] = []; + const mintedTokenIds: bigint[] = []; const labelHashes: string[] = []; for (let i = 0; i < amount; i++) { const label = `${labelPrefix}-${i}`; - labelHashes.push(solidityKeccak256(['string'], [label])); + labelHashes.push(solidityPackedKeccak256(['string'], [label])); mintedTokenIds.push(await mintDomain({ unsRegistry, owner: accounts[0], labels: [label, 'coin'] })); } - await unsRegistry.connect(accounts[0]).setApprovalForAll(dotCoinBurner.address, true); - const txReceipt = await (await dotCoinBurner.burnAll(labelHashes)).wait(); + await unsRegistry.connect(accounts[0]).setApprovalForAll(await dotCoinBurner.getAddress(), true); + const tx = await dotCoinBurner.burnAll(labelHashes); + const txReceipt = (await tx.wait())!; expect(mintedTokenIds).to.have.lengthOf(amount); for (let i = 0; i < mintedTokenIds.length; i++) { diff --git a/test/consumption/MintingManager.gas.test.ts b/test/consumption/MintingManager.gas.test.ts index 01029fd2..13ed2d7e 100644 --- a/test/consumption/MintingManager.gas.test.ts +++ b/test/consumption/MintingManager.gas.test.ts @@ -1,6 +1,6 @@ -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { getBytes, parseEther, solidityPackedKeccak256 } from 'ethers'; import { ethers, network } from 'hardhat'; -import { Block } from '@ethersproject/abstract-provider'; import { ERC20Mock, ERC20Mock__factory } from '../../types'; import { MintingManager, UNSRegistry } from '../../types/contracts'; import { MintingManagerForwarder } from '../../types/contracts/metatx'; @@ -9,7 +9,7 @@ import { MintingManagerForwarder__factory } from '../../types/factories/contract import { ZERO_ADDRESS } from '../helpers/constants'; import { percDiff } from '../helpers/consumption'; import { buildExecuteFunc, ExecuteFunc } from '../helpers/metatx'; -import { increaseTimeBy } from '../helpers/utils'; +import { getLatestBlockTimestamp, increaseTimeBy } from '../helpers/utils'; describe('MintingManager (consumption)', () => { let unsRegistry: UNSRegistry, mintingManager: MintingManager, forwarder: MintingManagerForwarder; @@ -18,7 +18,7 @@ describe('MintingManager (consumption)', () => { receiver: SignerWithAddress, spender: SignerWithAddress; - let latestBlock: Block; + let latestBlockTimestamp: number; let buildExecuteParams: ExecuteFunc; @@ -36,12 +36,12 @@ describe('MintingManager (consumption)', () => { unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); - forwarder = await new MintingManagerForwarder__factory(coinbase).deploy(mintingManager.address); + forwarder = await new MintingManagerForwarder__factory(coinbase).deploy(await mintingManager.getAddress()); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, @@ -50,13 +50,13 @@ describe('MintingManager (consumption)', () => { ); await mintingManager.addMinter(coinbase.address); await mintingManager.setTokenURIPrefix('/'); - await mintingManager.setForwarder(forwarder.address); + await mintingManager.setForwarder(await forwarder.getAddress()); - buildExecuteParams = buildExecuteFunc(mintingManager.interface, mintingManager.address, forwarder); + buildExecuteParams = buildExecuteFunc(mintingManager.interface, await mintingManager.getAddress(), forwarder); }); beforeEach(async () => { - latestBlock = await ethers.provider.getBlock('latest'); + latestBlockTimestamp = await getLatestBlockTimestamp(); }); describe('Mint consumption', () => { @@ -100,7 +100,7 @@ describe('MintingManager (consumption)', () => { const { req, signature } = await buildExecuteParams(selector, executeParams, coinbase, tokenId); const executeTx = await forwarder.connect(spender).execute(req, signature); - const executeTxReceipt = await executeTx.wait(); + const executeTxReceipt = (await executeTx.wait())!; await removeReverse(); @@ -116,11 +116,11 @@ describe('MintingManager (consumption)', () => { reverse: params[4], execute: executeTxReceipt.gasUsed.toString(), send: tx.receipt.gasUsed.toString(), - increase: percDiff(tx.receipt.gasUsed.toNumber(), executeTxReceipt.gasUsed.toNumber()) + ' %', + increase: percDiff(tx.receipt.gasUsed, executeTxReceipt.gasUsed) + ' %', }); - await unsRegistry.connect(receiver).setOwner(mintingManager.address, tokenId); - await unsRegistry.connect(receiver).setOwner(mintingManager.address, tokenId2); + await unsRegistry.connect(receiver).setOwner(await mintingManager.getAddress(), tokenId); + await unsRegistry.connect(receiver).setOwner(await mintingManager.getAddress(), tokenId2); } console.table(result); }); @@ -128,7 +128,7 @@ describe('MintingManager (consumption)', () => { describe('Mint expirable consumption', () => { const getCases = () => { - const expiry = latestBlock.timestamp + 2 * 60 * 60 * 24; + const expiry = latestBlockTimestamp + 2 * 60 * 60 * 24; return [ { @@ -158,15 +158,17 @@ describe('MintingManager (consumption)', () => { await mintingManager.issueExpirableWithRecords( spender.address, ['expired-consumption', 'com'], - [], [], - latestBlock.timestamp + 60 * 60 * 24, + [], + [], + latestBlockTimestamp + 60 * 60 * 24, true, ); await mintingManager.issueExpirableWithRecords( spender.address, ['expired-consumption-meta', 'com'], - [], [], - latestBlock.timestamp + 60 * 60 * 24, + [], + [], + latestBlockTimestamp + 60 * 60 * 24, true, ); await increaseTimeBy(60 * 60 * 24); @@ -184,7 +186,7 @@ describe('MintingManager (consumption)', () => { const { req, signature } = await buildExecuteParams(selector, executeParams, coinbase, tokenId); const executeTx = await forwarder.connect(spender).execute(req, signature); - const executeTxReceipt = await executeTx.wait(); + const executeTxReceipt = (await executeTx.wait())!; await removeReverse(); @@ -200,11 +202,11 @@ describe('MintingManager (consumption)', () => { reverse: params[5], execute: executeTxReceipt.gasUsed.toString(), send: tx.receipt.gasUsed.toString(), - increase: percDiff(tx.receipt.gasUsed.toNumber(), executeTxReceipt.gasUsed.toNumber()) + ' %', + increase: percDiff(tx.receipt.gasUsed, executeTxReceipt.gasUsed) + ' %', }); - await unsRegistry.connect(receiver).setOwner(mintingManager.address, tokenId); - await unsRegistry.connect(receiver).setOwner(mintingManager.address, tokenId2); + await unsRegistry.connect(receiver).setOwner(await mintingManager.getAddress(), tokenId); + await unsRegistry.connect(receiver).setOwner(await mintingManager.getAddress(), tokenId2); } console.table(result); @@ -368,7 +370,7 @@ describe('MintingManager (consumption)', () => { const { req, signature } = await buildExecuteParams(selector, executeParams, coinbase, tokenId); const executeTx = await forwarder.connect(spender).execute(req, signature); - const executeTxReceipt = await executeTx.wait(); + const executeTxReceipt = (await executeTx.wait())!; await removeReverse(); @@ -384,11 +386,11 @@ describe('MintingManager (consumption)', () => { reverse: params[4], execute: executeTxReceipt.gasUsed.toString(), send: tx.receipt.gasUsed.toString(), - increase: percDiff(tx.receipt.gasUsed.toNumber(), executeTxReceipt.gasUsed.toNumber()) + ' %', + increase: percDiff(tx.receipt.gasUsed, executeTxReceipt.gasUsed) + ' %', }); - await unsRegistry.connect(receiver).setOwner(mintingManager.address, tokenId); - await unsRegistry.connect(receiver).setOwner(mintingManager.address, tokenId2); + await unsRegistry.connect(receiver).setOwner(await mintingManager.getAddress(), tokenId); + await unsRegistry.connect(receiver).setOwner(await mintingManager.getAddress(), tokenId2); } console.table(result); }); @@ -399,78 +401,78 @@ describe('MintingManager (consumption)', () => { const chainId = network.config.chainId; const buyDomain = async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = parseEther('1'); const labels = ['onchainpurchase-consumption', 'nft']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = getBytes( + solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], + [await mintingManager.getAddress(), chainId, spender.address, tokenId, expiry, price, ZERO_ADDRESS], ), ); const signature = await coinbase.signMessage(purchaseHash); - const tx = await mintingManager.connect(spender).buy( - spender.address, - labels, - ['key'], ['value'], - expiry, - price, - signature, - { value: price }, - ); + const tx = await mintingManager + .connect(spender) + .buy(spender.address, labels, ['key'], ['value'], expiry, price, signature, { value: price }); - return tx.wait(); + return (await tx.wait())!; }; const buyDomainForErc20 = async () => { - const expiry = latestBlock.timestamp + 24 * 60 * 60; - const price = ethers.utils.parseEther('1'); + const expiry = latestBlockTimestamp + 24 * 60 * 60; + const price = parseEther('1'); const labels = ['onchainpurchase-consumption-erc20', 'nft']; const tokenId = await unsRegistry.namehash(labels); - const purchaseHash = ethers.utils.arrayify( - ethers.utils.solidityKeccak256( + const purchaseHash = getBytes( + solidityPackedKeccak256( ['address', 'uint256', 'address', 'uint256', 'uint64', 'uint256', 'address'], - [mintingManager.address, chainId, spender.address, tokenId, expiry, price, erc20Mock.address], + [ + await mintingManager.getAddress(), + chainId, + spender.address, + tokenId, + expiry, + price, + await erc20Mock.getAddress(), + ], ), ); const signature = await coinbase.signMessage(purchaseHash); - await erc20Mock.connect(spender).approve(mintingManager.address, price); - - const tx = await mintingManager.connect(spender).buyForErc20( - spender.address, - labels, - ['key'], ['value'], - expiry, - erc20Mock.address, - price, - signature, - ); - - return tx.wait(); + await erc20Mock.connect(spender).approve(await mintingManager.getAddress(), price); + + const tx = await mintingManager + .connect(spender) + .buyForErc20( + spender.address, + labels, + ['key'], + ['value'], + expiry, + await erc20Mock.getAddress(), + price, + signature, + ); + + return (await tx.wait())!; }; before(async () => { erc20Mock = await new ERC20Mock__factory(coinbase).deploy(); - await erc20Mock.mint(spender.address, ethers.utils.parseEther('1')); + await erc20Mock.mint(spender.address, parseEther('1')); }); it('Consumption', async () => { const result: unknown[] = []; - await mintingManager.connect(coinbase).issueWithRecords( - spender.address, - ['reverse', 'x'], - [], [], - true, - ); + await mintingManager.connect(coinbase).issueWithRecords(spender.address, ['reverse', 'x'], [], [], true); const buyDomainReceipt = await buyDomain(); const buyDomainErc20Receipt = await buyDomainForErc20(); diff --git a/test/consumption/UNSRegistry.gas.test.ts b/test/consumption/UNSRegistry.gas.test.ts index e7ec30c6..108f37ce 100644 --- a/test/consumption/UNSRegistry.gas.test.ts +++ b/test/consumption/UNSRegistry.gas.test.ts @@ -1,6 +1,6 @@ +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { ContractTransactionReceipt, id } from 'ethers'; import { ethers } from 'hardhat'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { BigNumber, utils } from 'ethers'; import { UNSRegistry } from '../../types/contracts'; import { UNSRegistry__factory } from '../../types/factories/contracts'; import { TLD, ZERO_ADDRESS } from '../helpers/constants'; @@ -10,9 +10,9 @@ describe('UNSRegistry (consumption)', () => { let unsRegistry: UNSRegistry; let signers: SignerWithAddress[], coinbase: SignerWithAddress; - const initializeKey = async (key) => { + const initializeKey = async (key: string) => { await unsRegistry.addKey(key); - return BigNumber.from(utils.id(key)); + return BigInt(id(key)); }; before(async () => { @@ -66,6 +66,7 @@ describe('UNSRegistry (consumption)', () => { params2: ['9898219.c054e083d016bc5000000000000000000000000000000000000000000000000000000000000.f4240', 'v1'], }, ]; + for (let i = 0; i < cases.length; i++) { const { name, selector1, selector2, labels1, labels2, params1, params2 } = cases[i]; @@ -79,17 +80,17 @@ describe('UNSRegistry (consumption)', () => { const keyHash = await initializeKey(key); const tx1 = await unsRegistry[selector1](...params1, tokenId1); - tx1.receipt = await tx1.wait(); + const tx1Receipt = (await tx1.wait()) as ContractTransactionReceipt; const tx2 = await unsRegistry[selector2](keyHash, value, tokenId2); - tx2.receipt = await tx2.wait(); + const tx2Receipt = (await tx2.wait()) as ContractTransactionReceipt; result.push({ name, recordLen: params1[0].length, - set: tx1.receipt.gasUsed.toString(), - setByHash: tx2.receipt.gasUsed.toString(), - increase: percDiff(tx1.receipt.gasUsed.toNumber(), tx2.receipt.gasUsed.toNumber()) + ' %', + set: tx1Receipt.gasUsed.toString(), + setByHash: tx2Receipt.gasUsed.toString(), + increase: percDiff(tx1Receipt.gasUsed, tx2Receipt.gasUsed) + ' %', }); } console.table(result); @@ -152,17 +153,17 @@ describe('UNSRegistry (consumption)', () => { const keyHashes = keys.map(async (key) => await initializeKey(key)); const tx1 = await unsRegistry[selector1](...params1, tokenId1); - tx1.receipt = await tx1.wait(); + const tx1Receipt = (await tx1.wait()) as ContractTransactionReceipt; const tx2 = await unsRegistry[selector2](keyHashes, values, tokenId2); - tx2.receipt = await tx2.wait(); + const tx2Receipt = (await tx2.wait()) as ContractTransactionReceipt; result.push({ name, records: params1[0].length, - setMany: tx1.receipt.gasUsed.toString(), - setManyByHash: tx2.receipt.gasUsed.toString(), - increase: percDiff(tx1.receipt.gasUsed.toNumber(), tx2.receipt.gasUsed.toNumber()) + ' %', + setMany: tx1Receipt.gasUsed.toString(), + setManyByHash: tx2Receipt.gasUsed.toString(), + increase: percDiff(tx1Receipt.gasUsed, tx2Receipt.gasUsed) + ' %', }); } console.table(result); diff --git a/test/consumption/UNSRegistry.multicall.gas.test.ts b/test/consumption/UNSRegistry.multicall.gas.test.ts index f834fa58..21c00035 100644 --- a/test/consumption/UNSRegistry.multicall.gas.test.ts +++ b/test/consumption/UNSRegistry.multicall.gas.test.ts @@ -1,6 +1,6 @@ +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { ContractTransactionReceipt, Interface } from 'ethers'; import { ethers } from 'hardhat'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { Interface } from 'ethers/lib/utils'; import { UNSRegistry } from '../../types/contracts'; import { UNSRegistry__factory } from '../../types/factories/contracts'; import { TLD, ZERO_ADDRESS } from '../helpers/constants'; @@ -133,12 +133,12 @@ describe('UNSRegistry Multicall (consumption)', () => { for (let i = 0; i < cases.length; i++) { const { name, labels, selectors, params } = cases[i]; - let cumGasUsed = 0; + let cumGasUsed = BigInt(0); const params1 = await prepParams(params, labels); for (let i = 0; i < selectors.length; i++) { const tx = await unsRegistry[selectors[i]](...params1[i]); - const receipt = await tx.wait(); - cumGasUsed += receipt.gasUsed.toNumber(); + const receipt = (await tx.wait()) as ContractTransactionReceipt; + cumGasUsed += receipt.gasUsed; } const labels2 = [labels[0] + '-multi', labels[1]]; @@ -147,16 +147,16 @@ describe('UNSRegistry Multicall (consumption)', () => { const iface: Interface = unsRegistry.interface; const tx = await unsRegistry.multicall( selectors.map((selector, index) => - iface.encodeFunctionData(unsRegistry.interface.functions[selector].name, params2[index]), + iface.encodeFunctionData(unsRegistry.interface.getFunctionName(selector), params2[index]), ), ); - const receipt = await tx.wait(); + const receipt = (await tx.wait())!; result.push({ name, seq: cumGasUsed.toString(), multicall: receipt.gasUsed.toString(), - increase: percDiff(cumGasUsed, receipt.gasUsed.toNumber()) + ' %', + increase: percDiff(cumGasUsed, receipt.gasUsed) + ' %', }); } console.table(result); diff --git a/test/consumption/UNSRegistry.reverse.gas.test.ts b/test/consumption/UNSRegistry.reverse.gas.test.ts index dfbcf346..8f8492b6 100644 --- a/test/consumption/UNSRegistry.reverse.gas.test.ts +++ b/test/consumption/UNSRegistry.reverse.gas.test.ts @@ -1,6 +1,6 @@ import * as crypto from 'crypto'; import { ethers } from 'hardhat'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { UNSRegistry } from '../../types/contracts'; import { UNSRegistry__factory } from '../../types/factories/contracts'; import { buildExecuteFunc, ExecuteFunc } from '../helpers/metatx'; @@ -10,9 +10,7 @@ import { mintDomain } from '../helpers/registry'; describe('UNSRegistry Set Reverse (consumption)', () => { let unsRegistry: UNSRegistry; - let signers: SignerWithAddress[], - coinbase: SignerWithAddress, - owner: SignerWithAddress; + let signers: SignerWithAddress[], coinbase: SignerWithAddress, owner: SignerWithAddress; let buildExecuteParams: ExecuteFunc; before(async () => { @@ -26,11 +24,7 @@ describe('UNSRegistry Set Reverse (consumption)', () => { await unsRegistry.initialize(coinbase.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await unsRegistry.mintTLD(TLD.X, 'x'); - buildExecuteParams = buildExecuteFunc( - unsRegistry.interface, - unsRegistry.address, - unsRegistry, - ); + buildExecuteParams = buildExecuteFunc(unsRegistry.interface, await unsRegistry.getAddress(), unsRegistry); }); describe('Set Reverse Consumption', () => { @@ -49,14 +43,10 @@ describe('UNSRegistry Set Reverse (consumption)', () => { const uri = labels.join('.'); const tokenId = await mintDomain({ unsRegistry, owner, labels }); - const newSetReverseParams = await buildExecuteParams( - 'setReverse(string[])', - [labels], - owner, - tokenId, - ); - const newTxReceipt = - await (await unsRegistry.execute(newSetReverseParams.req, newSetReverseParams.signature)).wait(); + const newSetReverseParams = await buildExecuteParams('setReverse(string[])', [labels], owner, tokenId); + const newTxReceipt = await ( + await unsRegistry.execute(newSetReverseParams.req, newSetReverseParams.signature) + ).wait(); const subdomainLabels = ['a', ...labels]; const subdomainUri = subdomainLabels.join('.'); @@ -67,12 +57,9 @@ describe('UNSRegistry Set Reverse (consumption)', () => { owner, subdomainTokenId, ); - const newSubdomainTxReceipt = - await (await unsRegistry - .execute( - newSubdomainsSetReverseParams.req, - newSubdomainsSetReverseParams.signature, - )).wait(); + const newSubdomainTxReceipt = await ( + await unsRegistry.execute(newSubdomainsSetReverseParams.req, newSubdomainsSetReverseParams.signature) + ).wait(); const secondLevelSubdomainLabels = ['b', ...subdomainLabels]; const secondLevelSubdomainUri = secondLevelSubdomainLabels.join('.'); @@ -83,20 +70,20 @@ describe('UNSRegistry Set Reverse (consumption)', () => { owner, secondLevelSubdomainTokenId, ); - const newSecondLevelSubdomainTxReceipt = - await (await unsRegistry - .execute( - newSecondLevelSubdomainSetReverseParams.req, - newSecondLevelSubdomainSetReverseParams.signature, - )).wait(); + const newSecondLevelSubdomainTxReceipt = await ( + await unsRegistry.execute( + newSecondLevelSubdomainSetReverseParams.req, + newSecondLevelSubdomainSetReverseParams.signature, + ) + ).wait(); return { - 'length': uri.length, - 'gas': newTxReceipt.gasUsed.toString(), + length: uri.length, + gas: newTxReceipt?.gasUsed.toString(), '1 level subdomain length': subdomainUri.length, - '1 level subdomain gas': newSubdomainTxReceipt.gasUsed.toString(), + '1 level subdomain gas': newSubdomainTxReceipt?.gasUsed.toString(), '2 level subdomain length': secondLevelSubdomainUri.length, - '2 level subdomain gas': newSecondLevelSubdomainTxReceipt.gasUsed.toString(), + '2 level subdomain gas': newSecondLevelSubdomainTxReceipt?.gasUsed.toString(), }; } }); diff --git a/test/custody/ENSCustody.metatx.test.ts b/test/custody/ENSCustody.metatx.test.ts index 5b1a7da0..54fef61e 100644 --- a/test/custody/ENSCustody.metatx.test.ts +++ b/test/custody/ENSCustody.metatx.test.ts @@ -1,40 +1,56 @@ -import { ethers, upgrades } from 'hardhat'; +import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { namehash } from 'ethers/lib/utils'; +import { namehash, Wallet } from 'ethers'; import { sha3 } from 'web3-utils'; -import { BigNumber } from 'ethers'; +import { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { + BaseRegistrarImplementation, BaseRegistrarImplementation__factory, DummyOracle__factory, + ENSCustody, ENSCustody__factory, + ENSRegistry, ENSRegistry__factory, + ETHRegistrarController, ETHRegistrarController__factory, + NameWrapper, NameWrapper__factory, + ReverseRegistrar, ReverseRegistrar__factory, + StablePriceOracle, StablePriceOracle__factory, } from '../../types'; import { REGISTRATION_TIME, ZERO_ADDRESS, ZERO_WORD } from '../helpers/constants'; import { ExecuteFunc, buildExecuteFunc } from '../helpers/metatx'; import { increaseTimeBy } from '../helpers/utils'; +import { deployProxy } from '../../src/helpers'; describe('ENSCustody (metatx)', function () { - let provider; - let ens; - let baseRegistrar; - let controller; - let priceOracle; - let reverseRegistrar; - let nameWrapper; - let custody; + let provider: HardhatEthersProvider; + let ens: ENSRegistry; + let baseRegistrar: BaseRegistrarImplementation; + let controller: ETHRegistrarController; + let priceOracle: StablePriceOracle; + let reverseRegistrar: ReverseRegistrar; + let nameWrapper: NameWrapper; + let custody: ENSCustody; const secret = '0x0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF'; let buildExecuteParams: ExecuteFunc; - let signers, owner, registrant, minter, spender; - let ownerAddress, registrantAddress; - let result; - - async function registerAndParkName (name, minter, resolver = ZERO_ADDRESS, selfCustody = false, txOptions = {}) { + let signers: SignerWithAddress[], owner: SignerWithAddress, registrant: SignerWithAddress, spender: SignerWithAddress; + let minter: Wallet; + let ownerAddress: string, registrantAddress: string; + let result: unknown; + + async function registerAndParkName ( + name: string, + minter: Wallet, + resolver = ZERO_ADDRESS, + selfCustody = false, + txOptions = {}, + ) { // make commitment const commitment = await custody.makeCommitment( name, @@ -48,10 +64,11 @@ describe('ENSCustody (metatx)', function () { selfCustody, ); const commitTx = await custody.commit(commitment); - const { timestamp } = await provider.getBlock(commitTx.blockNumber); + const block = await provider.getBlock(commitTx.blockNumber!); + const { timestamp } = block!; expect(await controller.commitments(commitment)).to.equal(timestamp); - await increaseTimeBy((await controller.minCommitmentAge()).toNumber()); + await increaseTimeBy(await controller.minCommitmentAge()); // register const tokenId = namehash(`${name}.eth`); @@ -60,31 +77,31 @@ describe('ENSCustody (metatx)', function () { [name, registrantAddress, REGISTRATION_TIME, secret, resolver, [], false, 0, selfCustody], minter, tokenId, - BigNumber.from(0), + BigInt(0), ); const registerTx = await custody.connect(spender).execute(req, signature, txOptions); return [commitTx, registerTx]; } - async function topupCustody (name) { + async function topupCustody (name: string) { const [base, premium] = await controller.rentPrice(name, REGISTRATION_TIME); - const price = base.add(premium); - await owner.sendTransaction({ to: custody.address, value: price }); + const price = base + premium; + await owner.sendTransaction({ to: await custody.getAddress(), value: price }); return price; } - async function assertOwnership (name, owner, selfCustody = false) { - const tokenId = sha3(name); + async function assertOwnership (name: string, owner: string, selfCustody = false) { + const tokenId = sha3(name)!; const node = namehash(`${name}.eth`); expect(await controller.available(name)).to.equal(false); - expect(await ens.owner(node)).to.equal(nameWrapper.address); - expect(await baseRegistrar.ownerOf(tokenId)).to.equal(nameWrapper.address); + expect(await ens.owner(node)).to.equal(await nameWrapper.getAddress()); + expect(await baseRegistrar.ownerOf(tokenId)).to.equal(await nameWrapper.getAddress()); if (selfCustody) { expect(await nameWrapper.ownerOf(node)).to.equal(owner); } else { - expect(await nameWrapper.ownerOf(node)).to.equal(custody.address); + expect(await nameWrapper.ownerOf(node)).to.equal(await custody.getAddress()); expect(await custody.ownerOf(node)).to.equal(owner); } } @@ -98,42 +115,46 @@ describe('ENSCustody (metatx)', function () { minter = new ethers.Wallet('0x' + '1'.repeat(64), provider); ens = await new ENSRegistry__factory(owner).deploy(); - baseRegistrar = await new BaseRegistrarImplementation__factory(owner).deploy(ens.address, namehash('eth')); - reverseRegistrar = await new ReverseRegistrar__factory(owner).deploy(ens.address); + baseRegistrar = await new BaseRegistrarImplementation__factory(owner).deploy( + await ens.getAddress(), + namehash('eth'), + ); + reverseRegistrar = await new ReverseRegistrar__factory(owner).deploy(await ens.getAddress()); - await ens.setSubnodeOwner(ZERO_WORD, sha3('reverse'), ownerAddress); - await ens.setSubnodeOwner(namehash('reverse'), sha3('addr'), reverseRegistrar.address); + await ens.setSubnodeOwner(ZERO_WORD, sha3('reverse')!, ownerAddress); + await ens.setSubnodeOwner(namehash('reverse'), sha3('addr')!, await reverseRegistrar.getAddress()); - nameWrapper = await new NameWrapper__factory(owner).deploy(ens.address, baseRegistrar.address, ownerAddress); + nameWrapper = await new NameWrapper__factory(owner).deploy( + await ens.getAddress(), + await baseRegistrar.getAddress(), + ownerAddress, + ); - await ens.setSubnodeOwner(ZERO_WORD, sha3('eth'), baseRegistrar.address); + await ens.setSubnodeOwner(ZERO_WORD, sha3('eth')!, await baseRegistrar.getAddress()); const dummyOracle = await new DummyOracle__factory(owner).deploy('100000000'); - priceOracle = await new StablePriceOracle__factory(owner).deploy(dummyOracle.address, [0, 0, 4, 2, 1]); + priceOracle = await new StablePriceOracle__factory(owner).deploy(await dummyOracle.getAddress(), [0, 0, 4, 2, 1]); controller = await new ETHRegistrarController__factory(owner).deploy( - baseRegistrar.address, - priceOracle.address, + await baseRegistrar.getAddress(), + await priceOracle.getAddress(), 600, 86400, - reverseRegistrar.address, - nameWrapper.address, - ens.address, - ); - await nameWrapper.setController(controller.address, true); - await baseRegistrar.addController(nameWrapper.address); - await reverseRegistrar.setController(controller.address, true); - - custody = await upgrades.deployProxy( - new ENSCustody__factory(owner), - [ - controller.address, - nameWrapper.address, - baseRegistrar.address, - ], + await reverseRegistrar.getAddress(), + await nameWrapper.getAddress(), + await ens.getAddress(), ); + await nameWrapper.setController(await controller.getAddress(), true); + await baseRegistrar.addController(await nameWrapper.getAddress()); + await reverseRegistrar.setController(await controller.getAddress(), true); + + custody = await deployProxy(new ENSCustody__factory(owner), [ + await controller.getAddress(), + await nameWrapper.getAddress(), + await baseRegistrar.getAddress(), + ]); await custody.addMinter(minter.address); - buildExecuteParams = buildExecuteFunc(custody.interface, custody.address, custody); + buildExecuteParams = buildExecuteFunc(custody.interface, await custody.getAddress(), custody); }); beforeEach(async () => { @@ -192,7 +213,11 @@ describe('ENSCustody (metatx)', function () { tokenId, await custody.nonceOf(tokenId), ); - await expect(custody.connect(spender).execute(req, signature)).to.be.revertedWith('Unauthorised'); + + await expect(custody.connect(spender).execute(req, signature)).to.be.revertedWithCustomError( + custody, + 'Unauthorised', + ); }); it('should revert with invalid signature error when invalid nonce', async () => { @@ -208,9 +233,12 @@ describe('ENSCustody (metatx)', function () { [registrantAddress, tokenId], minter, tokenId, - BigNumber.from(0), + BigInt(42), + ); + await expect(custody.connect(spender).execute(req, signature)).to.be.revertedWithCustomError( + custody, + 'InvalidSignature', ); - await expect(custody.connect(spender).execute(req, signature)).to.be.revertedWith('InvalidSignature'); }); it('should revert with unauthorised error when invalid signer', async () => { @@ -228,7 +256,10 @@ describe('ENSCustody (metatx)', function () { tokenId, await custody.nonceOf(tokenId), ); - await expect(custody.connect(spender).execute(req, signature)).to.be.revertedWith('Unauthorised'); + await expect(custody.connect(spender).execute(req, signature)).to.be.revertedWithCustomError( + custody, + 'Unauthorised', + ); }); it('should revert with invalid token error when forwarded token incorrect', async () => { @@ -246,6 +277,9 @@ describe('ENSCustody (metatx)', function () { 1, await custody.nonceOf(1), ); - await expect(custody.connect(spender).execute(req, signature)).to.be.revertedWith('InvalidForwardedToken'); + await expect(custody.connect(spender).execute(req, signature)).to.be.revertedWithCustomError( + custody, + 'InvalidForwardedToken', + ); }); }); diff --git a/test/custody/ENSCustody.proxy.test.ts b/test/custody/ENSCustody.proxy.test.ts index 081af54d..7377eda8 100644 --- a/test/custody/ENSCustody.proxy.test.ts +++ b/test/custody/ENSCustody.proxy.test.ts @@ -1,38 +1,52 @@ import { ethers, upgrades } from 'hardhat'; import { expect } from 'chai'; -import { namehash } from 'ethers/lib/utils'; import { sha3 } from 'web3-utils'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { namehash } from 'ethers'; import { + BaseRegistrarImplementation, BaseRegistrarImplementation__factory, DummyOracle__factory, + ENSCustody, ENSCustody__factory, + ENSRegistry, ENSRegistry__factory, + ETHRegistrarController, ETHRegistrarController__factory, + NameWrapper, NameWrapper__factory, + ReverseRegistrar, ReverseRegistrar__factory, + StablePriceOracle, StablePriceOracle__factory, } from '../../types'; import { REGISTRATION_TIME, ZERO_ADDRESS, ZERO_WORD } from '../helpers/constants'; -import { increaseTimeBy } from '../helpers/utils'; +import { getLatestBlockTimestamp, increaseTimeBy } from '../helpers/utils'; +import { deployProxy } from '../../src/helpers'; describe('ENSCustody (proxy)', function () { - let provider; - let ens; - let baseRegistrar; - let controller; - let priceOracle; - let reverseRegistrar; - let nameWrapper; - let custodyFactory; - let custody; + let ens: ENSRegistry; + let baseRegistrar: BaseRegistrarImplementation; + let controller: ETHRegistrarController; + let priceOracle: StablePriceOracle; + let reverseRegistrar: ReverseRegistrar; + let nameWrapper: NameWrapper; + let custodyFactory: ENSCustody__factory; + let custody: ENSCustody; const secret = '0x0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF'; - let signers, owner, registrant, minter; - let ownerAddress, registrantAddress; - let result; - - async function registerAndParkName (name, minter, resolver = ZERO_ADDRESS, selfCustody = false, txOptions = {}) { + let signers: SignerWithAddress[], owner: SignerWithAddress, registrant: SignerWithAddress, minter: SignerWithAddress; + let ownerAddress: string, registrantAddress: string; + let result: unknown; + + async function registerAndParkName ( + name: string, + minter: SignerWithAddress, + resolver = ZERO_ADDRESS, + selfCustody = false, + txOptions = {}, + ) { // make commitment const commitment = await custody.makeCommitment( name, @@ -46,10 +60,10 @@ describe('ENSCustody (proxy)', function () { selfCustody, ); const commitTx = await custody.commit(commitment); - const { timestamp } = await provider.getBlock(commitTx.blockNumber); + const timestamp = await getLatestBlockTimestamp(); expect(await controller.commitments(commitment)).to.equal(timestamp); - await increaseTimeBy((await controller.minCommitmentAge()).toNumber()); + await increaseTimeBy(await controller.minCommitmentAge()); // register const registerTx = await custody @@ -58,85 +72,93 @@ describe('ENSCustody (proxy)', function () { return [commitTx, registerTx]; } - async function topupCustody (name) { + async function topupCustody (name: string) { const [base, premium] = await controller.rentPrice(name, REGISTRATION_TIME); - const price = base.add(premium); - await owner.sendTransaction({ to: custody.address, value: price }); + const price = base + premium; + await owner.sendTransaction({ to: await custody.getAddress(), value: price }); return price; } - async function assertOwnership (name, owner, selfCustody = false) { - const tokenId = sha3(name); + async function assertOwnership (name: string, owner: string, selfCustody = false) { + const tokenId = sha3(name)!; const node = namehash(`${name}.eth`); expect(await controller.available(name)).to.equal(false); - expect(await ens.owner(node)).to.equal(nameWrapper.address); - expect(await baseRegistrar.ownerOf(tokenId)).to.equal(nameWrapper.address); + expect(await ens.owner(node)).to.equal(await nameWrapper.getAddress()); + expect(await baseRegistrar.ownerOf(tokenId)).to.equal(await nameWrapper.getAddress()); if (selfCustody) { expect(await nameWrapper.ownerOf(node)).to.equal(owner); } else { - expect(await nameWrapper.ownerOf(node)).to.equal(custody.address); + expect(await nameWrapper.ownerOf(node)).to.equal(await custody.getAddress()); expect(await custody.ownerOf(node)).to.equal(owner); } } before(async () => { - provider = ethers.provider; signers = await ethers.getSigners(); [owner, registrant, minter] = signers; ownerAddress = await owner.getAddress(); registrantAddress = await registrant.getAddress(); ens = await new ENSRegistry__factory(owner).deploy(); - baseRegistrar = await new BaseRegistrarImplementation__factory(owner).deploy(ens.address, namehash('eth')); - reverseRegistrar = await new ReverseRegistrar__factory(owner).deploy(ens.address); + baseRegistrar = await new BaseRegistrarImplementation__factory(owner).deploy( + await ens.getAddress(), + namehash('eth'), + ); + reverseRegistrar = await new ReverseRegistrar__factory(owner).deploy(await ens.getAddress()); - await ens.setSubnodeOwner(ZERO_WORD, sha3('reverse'), ownerAddress); - await ens.setSubnodeOwner(namehash('reverse'), sha3('addr'), reverseRegistrar.address); + await ens.setSubnodeOwner(ZERO_WORD, sha3('reverse')!, ownerAddress); + await ens.setSubnodeOwner(namehash('reverse'), sha3('addr')!, await reverseRegistrar.getAddress()); - nameWrapper = await new NameWrapper__factory(owner).deploy(ens.address, baseRegistrar.address, ownerAddress); + nameWrapper = await new NameWrapper__factory(owner).deploy( + await ens.getAddress(), + await baseRegistrar.getAddress(), + ownerAddress, + ); - await ens.setSubnodeOwner(ZERO_WORD, sha3('eth'), baseRegistrar.address); + await ens.setSubnodeOwner(ZERO_WORD, sha3('eth')!, await baseRegistrar.getAddress()); const dummyOracle = await new DummyOracle__factory(owner).deploy('100000000'); - priceOracle = await new StablePriceOracle__factory(owner).deploy(dummyOracle.address, [0, 0, 4, 2, 1]); + priceOracle = await new StablePriceOracle__factory(owner).deploy(await dummyOracle.getAddress(), [0, 0, 4, 2, 1]); controller = await new ETHRegistrarController__factory(owner).deploy( - baseRegistrar.address, - priceOracle.address, + await baseRegistrar.getAddress(), + await priceOracle.getAddress(), 600, 86400, - reverseRegistrar.address, - nameWrapper.address, - ens.address, + await reverseRegistrar.getAddress(), + await nameWrapper.getAddress(), + await ens.getAddress(), ); - await nameWrapper.setController(controller.address, true); - await baseRegistrar.addController(nameWrapper.address); - await reverseRegistrar.setController(controller.address, true); + await nameWrapper.setController(await controller.getAddress(), true); + await baseRegistrar.addController(await nameWrapper.getAddress()); + await reverseRegistrar.setController(await controller.getAddress(), true); custodyFactory = new ENSCustody__factory(owner); - custody = await upgrades.deployProxy(custodyFactory, [], { initializer: false }); - await custody.initialize(controller.address, nameWrapper.address, baseRegistrar.address); + custody = await deployProxy(custodyFactory, [], { initializer: false }); + await custody.initialize( + await controller.getAddress(), + await nameWrapper.getAddress(), + await baseRegistrar.getAddress(), + ); await custody.addMinter(minter.address); }); beforeEach(async () => { - result = await provider.send('evm_snapshot', []); + result = await ethers.provider.send('evm_snapshot', []); }); afterEach(async () => { - await provider.send('evm_revert', [result]); + await ethers.provider.send('evm_revert', [result]); }); it('should not allow initialize twice', async () => { await expect( custody.initialize( - controller.address, - nameWrapper.address, - baseRegistrar.address, + await controller.getAddress(), + await nameWrapper.getAddress(), + await baseRegistrar.getAddress(), ), - ).to.be.revertedWith( - 'Initializable: contract is already initialized', - ); + ).to.be.revertedWith('Initializable: contract is already initialized'); }); it('should register and park name', async () => { @@ -169,7 +191,7 @@ describe('ENSCustody (proxy)', function () { await registerAndParkName(name, minter, ZERO_ADDRESS, false); await assertOwnership(name, registrantAddress); - await expect(custody.safeTransfer(registrantAddress, node)).to.be.revertedWith('Unauthorised'); + await expect(custody.safeTransfer(registrantAddress, node)).to.be.revertedWithCustomError(custody, 'Unauthorised'); }); it('should keep state after upgrade', async () => { @@ -180,7 +202,7 @@ describe('ENSCustody (proxy)', function () { await registerAndParkName(name, minter, ZERO_ADDRESS, false); await assertOwnership(name, registrantAddress); - custody = await upgrades.upgradeProxy(custody.address, custodyFactory); + custody = (await upgrades.upgradeProxy(await custody.getAddress(), custodyFactory)) as unknown as ENSCustody; await assertOwnership(name, registrantAddress); expect(await custody.nonceOf(node)).to.be.equal(1); diff --git a/test/custody/ENSCustody.test.ts b/test/custody/ENSCustody.test.ts index 0c7af718..bd135515 100644 --- a/test/custody/ENSCustody.test.ts +++ b/test/custody/ENSCustody.test.ts @@ -1,9 +1,9 @@ -import { ethers, upgrades } from 'hardhat'; +import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { namehash } from 'ethers/lib/utils'; +import { ContractTransactionResponse, EventLog, namehash } from 'ethers'; import { sha3Raw as sha3 } from 'web3-utils'; -import { BigNumber, ContractTransaction } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { HardhatEthersProvider } from '@nomicfoundation/hardhat-ethers/internal/hardhat-ethers-provider'; import { BaseRegistrarImplementation__factory, DummyOracle__factory, @@ -28,11 +28,12 @@ import { } from '../../types'; import { BUFFERED_REGISTRATION_COST, DAY, REGISTRATION_TIME, ZERO_ADDRESS, ZERO_WORD } from '../helpers/constants'; import { makeInterfaceId } from '../helpers/makeInterfaceId'; -import { increaseTimeBy } from '../helpers/utils'; +import { getLatestBlockTimestamp, increaseTimeBy } from '../helpers/utils'; +import { deployProxy } from '../../src/helpers'; describe('ENSCustody', function () { - let provider; - let result; + let provider: HardhatEthersProvider; + let result: unknown; let ensRegistry: ENSRegistry; let resolver: PublicResolver; @@ -65,10 +66,10 @@ describe('ENSCustody', function () { 0, ); let tx = await controller.commit(commitment); - const { timestamp } = await provider.getBlock(tx.blockNumber); + const timestamp = await getLatestBlockTimestamp(); expect(await controller.commitments(commitment)).to.equal(timestamp); - await increaseTimeBy((await controller.minCommitmentAge()).toNumber()); + await increaseTimeBy(await controller.minCommitmentAge()); tx = await controller.register( name, @@ -106,10 +107,10 @@ describe('ENSCustody', function () { selfCustody, ); const commitTx = await custody.connect(minter).commit(commitment); - const { timestamp } = await provider.getBlock(commitTx.blockNumber); + const timestamp = await getLatestBlockTimestamp(); expect(await controller.commitments(commitment)).to.equal(timestamp); - await increaseTimeBy((await controller.minCommitmentAge()).toNumber()); + await increaseTimeBy(await controller.minCommitmentAge()); // register const registerTx = await custody @@ -146,19 +147,21 @@ describe('ENSCustody', function () { async function topupCustody (name: string, registrationTime = REGISTRATION_TIME) { const [base, premium] = await controller.rentPrice(name, registrationTime); - const price = base.add(premium); - await owner.sendTransaction({ to: custody.address, value: price }); + const price = base + premium; + await owner.sendTransaction({ to: await custody.getAddress(), value: price }); return price; } - async function assertGasSpent (address: string, prevBalance: BigNumber, txs: ContractTransaction[]) { - let spent = BigNumber.from(0); + async function assertGasSpent (address: string, prevBalance: bigint, txs: ContractTransactionResponse[]) { + let spent = BigInt(0); + for (const tx of txs) { const receipt = await provider.getTransactionReceipt(tx.hash); - const gasFee = receipt.gasUsed.mul(tx.gasPrice); - spent = spent.add(gasFee); + const gasFee = receipt!.gasUsed * tx.gasPrice; + spent = spent + gasFee; } - expect(await provider.getBalance(address)).to.equal(prevBalance.sub(spent)); + + expect(await provider.getBalance(address)).to.equal(prevBalance - spent); } async function assertOwnership (name: string, owner: string, selfCustody = false) { @@ -168,15 +171,15 @@ describe('ENSCustody', function () { // if 2LD if (name.split('.').length === 1) { expect(await controller.available(name)).to.equal(false); - expect(await baseRegistrar.ownerOf(tokenId)).to.equal(nameWrapper.address); + expect(await baseRegistrar.ownerOf(tokenId)).to.equal(await nameWrapper.getAddress()); } - expect(await ensRegistry.owner(node)).to.equal(nameWrapper.address); + expect(await ensRegistry.owner(node)).to.equal(await nameWrapper.getAddress()); if (selfCustody) { expect(await nameWrapper.ownerOf(node)).to.equal(owner); } else { - expect(await nameWrapper.ownerOf(node)).to.equal(custody.address); + expect(await nameWrapper.ownerOf(node)).to.equal(await custody.getAddress()); expect(await custody.ownerOf(node)).to.equal(owner); } } @@ -197,48 +200,51 @@ describe('ENSCustody', function () { newOwnerAddress = await newOwner.getAddress(); ensRegistry = await new ENSRegistry__factory(owner).deploy(); - baseRegistrar = await new BaseRegistrarImplementation__factory(owner).deploy(ensRegistry.address, namehash('eth')); - reverseRegistrar = await new ReverseRegistrar__factory(owner).deploy(ensRegistry.address); + baseRegistrar = await new BaseRegistrarImplementation__factory(owner).deploy( + await ensRegistry.getAddress(), + namehash('eth'), + ); + reverseRegistrar = await new ReverseRegistrar__factory(owner).deploy(await ensRegistry.getAddress()); await ensRegistry.setSubnodeOwner(ZERO_WORD, sha3('reverse'), ownerAddress); - await ensRegistry.setSubnodeOwner(namehash('reverse'), sha3('addr'), reverseRegistrar.address); + await ensRegistry.setSubnodeOwner(namehash('reverse'), sha3('addr'), await reverseRegistrar.getAddress()); nameWrapper = await new NameWrapper__factory(owner).deploy( - ensRegistry.address, - baseRegistrar.address, + await ensRegistry.getAddress(), + await baseRegistrar.getAddress(), ownerAddress, ); - await ensRegistry.setSubnodeOwner(ZERO_WORD, sha3('eth'), baseRegistrar.address); + await ensRegistry.setSubnodeOwner(ZERO_WORD, sha3('eth'), await baseRegistrar.getAddress()); const dummyOracle = await new DummyOracle__factory(owner).deploy('100000000'); - priceOracle = await new StablePriceOracle__factory(owner).deploy(dummyOracle.address, [0, 0, 4, 2, 1]); + priceOracle = await new StablePriceOracle__factory(owner).deploy(await dummyOracle.getAddress(), [0, 0, 4, 2, 1]); controller = await new ETHRegistrarController__factory(owner).deploy( - baseRegistrar.address, - priceOracle.address, + await baseRegistrar.getAddress(), + await priceOracle.getAddress(), 600, 86400, - reverseRegistrar.address, - nameWrapper.address, - ensRegistry.address, + await reverseRegistrar.getAddress(), + await nameWrapper.getAddress(), + await ensRegistry.getAddress(), ); - await nameWrapper.setController(controller.address, true); - await baseRegistrar.addController(nameWrapper.address); - await reverseRegistrar.setController(controller.address, true); + await nameWrapper.setController(await controller.getAddress(), true); + await baseRegistrar.addController(await nameWrapper.getAddress()); + await reverseRegistrar.setController(await controller.getAddress(), true); resolver = await new PublicResolver__factory(owner).deploy( - ensRegistry.address, - nameWrapper.address, - controller.address, - reverseRegistrar.address, + await ensRegistry.getAddress(), + await nameWrapper.getAddress(), + await controller.getAddress(), + await reverseRegistrar.getAddress(), ); - custody = (await upgrades.deployProxy(new ENSCustody__factory(owner), [ - controller.address, - nameWrapper.address, - baseRegistrar.address, + custody = (await deployProxy(new ENSCustody__factory(owner), [ + await controller.getAddress(), + await nameWrapper.getAddress(), + await baseRegistrar.getAddress(), ])) as ENSCustody; - await custody.addMinter(minter.address); + await custody.addMinter(await minter.getAddress()); erc1155 = await new ERC1155Mock__factory(owner).deploy(''); }); @@ -258,15 +264,15 @@ describe('ENSCustody', function () { await registerName(name); expect(await controller.available(name)).to.equal(false); - expect(await ensRegistry.owner(node)).to.equal(nameWrapper.address); - expect(await baseRegistrar.ownerOf(tokenId)).to.equal(nameWrapper.address); + expect(await ensRegistry.owner(node)).to.equal(await nameWrapper.getAddress()); + expect(await baseRegistrar.ownerOf(tokenId)).to.equal(await nameWrapper.getAddress()); expect(await nameWrapper.ownerOf(node)).to.equal(registrantAddress); }); it('should return correct rent price', async () => { const name = 'ts-pa92'; const [base, premium] = await controller.rentPrice(name, REGISTRATION_TIME); - const price = base.add(premium); + const price = base + premium; expect(await custody.rentPrice(name, REGISTRATION_TIME)).to.equal(price); }); @@ -279,13 +285,15 @@ describe('ENSCustody', function () { await registerName(name); await expect( - nameWrapper.connect(registrant).safeTransferFrom( - registrantAddress, - custody.address, - node, - 1, - new ethers.utils.AbiCoder().encode(['address'], [registrantAddress]), - ), + nameWrapper + .connect(registrant) + .safeTransferFrom( + registrantAddress, + await custody.getAddress(), + node, + 1, + new ethers.AbiCoder().encode(['address'], [registrantAddress]), + ), ).to.emit(custody, 'Parked'); await assertOwnership(name, registrantAddress, false); @@ -297,13 +305,15 @@ describe('ENSCustody', function () { await registerName(name); - await nameWrapper.connect(registrant).safeTransferFrom( - registrantAddress, - custody.address, - node, - 1, - new ethers.utils.AbiCoder().encode(['address'], [newOwnerAddress]), - ); + await nameWrapper + .connect(registrant) + .safeTransferFrom( + registrantAddress, + await custody.getAddress(), + node, + 1, + new ethers.AbiCoder().encode(['address'], [newOwnerAddress]), + ); await assertOwnership(name, newOwnerAddress, false); }); @@ -315,13 +325,7 @@ describe('ENSCustody', function () { await registerName(name); await expect( - nameWrapper.connect(registrant).safeTransferFrom( - registrantAddress, - custody.address, - node, - 1, - '0x', - ), + nameWrapper.connect(registrant).safeTransferFrom(registrantAddress, await custody.getAddress(), node, 1, '0x'), ).to.be.reverted; }); @@ -332,13 +336,15 @@ describe('ENSCustody', function () { await registerName(name); await expect( - nameWrapper.connect(registrant).safeTransferFrom( - registrantAddress, - custody.address, - node, - 1, - new ethers.utils.AbiCoder().encode(['address'], [ZERO_ADDRESS]), - ), + nameWrapper + .connect(registrant) + .safeTransferFrom( + registrantAddress, + await custody.getAddress(), + node, + 1, + new ethers.AbiCoder().encode(['address'], [ZERO_ADDRESS]), + ), ).to.be.revertedWith('ERC1155: transfer to non ERC1155Receiver implementer'); }); @@ -350,10 +356,10 @@ describe('ENSCustody', function () { await expect( erc1155.safeTransferFrom( owner.address, - custody.address, + await custody.getAddress(), erc1155TokenId1, 1, - new ethers.utils.AbiCoder().encode(['address'], [ownerAddress]), + new ethers.AbiCoder().encode(['address'], [ownerAddress]), ), ).to.be.revertedWith('ERC1155: transfer to non ERC1155Receiver implementer'); }); @@ -372,10 +378,10 @@ describe('ENSCustody', function () { .connect(registrant) .safeBatchTransferFrom( registrantAddress, - custody.address, + await custody.getAddress(), [node1, node2], [1, 1], - new ethers.utils.AbiCoder().encode(['address'], [registrantAddress]), + new ethers.AbiCoder().encode(['address'], [registrantAddress]), ), ).to.emit(custody, 'Parked'); @@ -397,10 +403,10 @@ describe('ENSCustody', function () { .connect(registrant) .safeBatchTransferFrom( registrantAddress, - custody.address, + await custody.getAddress(), [node1, node2], [1, 1], - new ethers.utils.AbiCoder().encode(['address'], [ZERO_ADDRESS]), + new ethers.AbiCoder().encode(['address'], [ZERO_ADDRESS]), ), ).to.be.revertedWith('ERC1155: transfer to non ERC1155Receiver implementer'); }); @@ -415,13 +421,10 @@ describe('ENSCustody', function () { await expect( erc1155.safeBatchTransferFrom( owner.address, - custody.address, - [ - erc1155TokenId1, - erc1155TokenId2, - ], + await custody.getAddress(), + [erc1155TokenId1, erc1155TokenId2], [1, 1], - new ethers.utils.AbiCoder().encode(['address'], [registrantAddress]), + new ethers.AbiCoder().encode(['address'], [registrantAddress]), ), ).to.be.revertedWith('ERC1155: transfer to non ERC1155Receiver implementer'); }); @@ -433,21 +436,23 @@ describe('ENSCustody', function () { const node = namehash(`${name}.eth`); const subNode = namehash(`${subName}.eth`); - const { timestamp } = await provider.getBlock('latest'); + const timestamp = await getLatestBlockTimestamp(); await registerName(name); - const expiry = timestamp + (await controller.minCommitmentAge()).toNumber(); + const expiry = BigInt(timestamp) + (await controller.minCommitmentAge()); await nameWrapper.connect(registrant).setSubnodeOwner(node, 'sub', registrantAddress, 0, expiry); await assertOwnership(subName, registrantAddress, true); await expect( - nameWrapper.connect(registrant).safeTransferFrom( - registrantAddress, - custody.address, - subNode, - 1, - new ethers.utils.AbiCoder().encode(['address'], [registrantAddress]), - ), + nameWrapper + .connect(registrant) + .safeTransferFrom( + registrantAddress, + await custody.getAddress(), + subNode, + 1, + new ethers.AbiCoder().encode(['address'], [registrantAddress]), + ), ).to.emit(custody, 'Parked'); await assertOwnership(subName, registrantAddress, false); @@ -460,21 +465,23 @@ describe('ENSCustody', function () { const node = namehash(`${name}.eth`); const subNode = namehash(`${subName}.eth`); - const { timestamp } = await provider.getBlock('latest'); + const timestamp = await getLatestBlockTimestamp(); await registerName(name); - const expiry = timestamp + (await controller.minCommitmentAge()).toNumber(); + const expiry = BigInt(timestamp) + (await controller.minCommitmentAge()); await nameWrapper.connect(registrant).setSubnodeOwner(node, 'sub', registrantAddress, 0, expiry); await assertOwnership(subName, registrantAddress, true); await expect( - nameWrapper.connect(registrant).safeBatchTransferFrom( - registrantAddress, - custody.address, - [subNode], - [1], - new ethers.utils.AbiCoder().encode(['address'], [newOwnerAddress]), - ), + nameWrapper + .connect(registrant) + .safeBatchTransferFrom( + registrantAddress, + await custody.getAddress(), + [subNode], + [1], + new ethers.AbiCoder().encode(['address'], [newOwnerAddress]), + ), ).to.emit(custody, 'Parked'); await assertOwnership(subName, newOwnerAddress, false); @@ -489,18 +496,15 @@ describe('ENSCustody', function () { await registerAndUnwrapName(name); await assertWrapped(name, false); - const abiCoder = new ethers.utils.AbiCoder(); + const abiCoder = new ethers.AbiCoder(); const wrapTx = await baseRegistrar .connect(registrant) ['safeTransferFrom(address,address,uint256,bytes)']( registrant.address, - custody.address, + await custody.getAddress(), labelHash, - abiCoder.encode( - ['address', 'address', 'string'], - [registrantAddress, resolver.address, name], - ), + abiCoder.encode(['address', 'address', 'string'], [registrantAddress, await resolver.getAddress(), name]), ); await wrapTx.wait(); @@ -515,18 +519,15 @@ describe('ENSCustody', function () { await registerAndUnwrapName(name); await assertWrapped(name, false); - const abiCoder = new ethers.utils.AbiCoder(); + const abiCoder = new ethers.AbiCoder(); const wrapTx = await baseRegistrar .connect(registrant) ['safeTransferFrom(address,address,uint256,bytes)']( registrant.address, - custody.address, + await custody.getAddress(), labelHash, - abiCoder.encode( - ['address', 'address', 'string'], - [newOwnerAddress, resolver.address, name], - ), + abiCoder.encode(['address', 'address', 'string'], [newOwnerAddress, await resolver.getAddress(), name]), ); await wrapTx.wait(); @@ -541,19 +542,16 @@ describe('ENSCustody', function () { await registerAndUnwrapName(name); await assertWrapped(name, false); - const abiCoder = new ethers.utils.AbiCoder(); + const abiCoder = new ethers.AbiCoder(); await expect( baseRegistrar .connect(registrant) ['safeTransferFrom(address,address,uint256,bytes)']( registrant.address, - custody.address, + await custody.getAddress(), labelHash, - abiCoder.encode( - ['address', 'address', 'string'], - [registrantAddress, resolver.address, name], - ), + abiCoder.encode(['address', 'address', 'string'], [registrantAddress, await resolver.getAddress(), name]), ), ).to.emit(custody, 'Parked'); @@ -571,20 +569,22 @@ describe('ENSCustody', function () { await registerAndUnwrapName(name); await assertWrapped(name, false); - const abiCoder = new ethers.utils.AbiCoder(); + const abiCoder = new ethers.AbiCoder(); await expect( baseRegistrar .connect(registrant) ['safeTransferFrom(address,address,uint256,bytes)']( registrant.address, - custody.address, + await custody.getAddress(), labelHash, abiCoder.encode( ['address', 'address', 'string'], - [newOwnerAddress, resolver.address, invalidName], + [newOwnerAddress, await resolver.getAddress(), invalidName], ), ), - ).to.be.revertedWith(`LabelMismatch("${invalidLabelHash}", "${labelHash}")`); + ) + .to.be.revertedWithCustomError(nameWrapper, 'LabelMismatch') + .withArgs(invalidLabelHash, labelHash); }); it('should reject if no data is passed', async () => { @@ -597,7 +597,7 @@ describe('ENSCustody', function () { await expect( baseRegistrar .connect(registrant) - ['safeTransferFrom(address,address,uint256)'](registrant.address, custody.address, labelHash), + ['safeTransferFrom(address,address,uint256)'](registrant.address, await custody.getAddress(), labelHash), ).to.be.reverted; }); @@ -608,19 +608,17 @@ describe('ENSCustody', function () { await registerAndUnwrapName(name); await assertWrapped(name, false); - const abiCoder = new ethers.utils.AbiCoder(); + const abiCoder = new ethers.AbiCoder(); - await expect(baseRegistrar - .connect(registrant) - ['safeTransferFrom(address,address,uint256,bytes)']( - registrant.address, - custody.address, - labelHash, - abiCoder.encode( - ['string', 'address'], - [name, resolver.address], + await expect( + baseRegistrar + .connect(registrant) + ['safeTransferFrom(address,address,uint256,bytes)']( + registrant.address, + await custody.getAddress(), + labelHash, + abiCoder.encode(['string', 'address'], [name, await resolver.getAddress()]), ), - ), ).to.be.reverted; }); @@ -631,19 +629,17 @@ describe('ENSCustody', function () { await registerAndUnwrapName(name); await assertWrapped(name, false); - const abiCoder = new ethers.utils.AbiCoder(); + const abiCoder = new ethers.AbiCoder(); - await expect(baseRegistrar - .connect(registrant) - ['safeTransferFrom(address,address,uint256,bytes)']( - registrant.address, - custody.address, - labelHash, - abiCoder.encode( - ['string', 'address'], - [name, resolver.address], + await expect( + baseRegistrar + .connect(registrant) + ['safeTransferFrom(address,address,uint256,bytes)']( + registrant.address, + await custody.getAddress(), + labelHash, + abiCoder.encode(['string', 'address'], [name, await resolver.getAddress()]), ), - ), ).to.be.reverted; }); @@ -654,26 +650,27 @@ describe('ENSCustody', function () { await registerAndUnwrapName(name); await assertWrapped(name, false); - const abiCoder = new ethers.utils.AbiCoder(); + const abiCoder = new ethers.AbiCoder(); - await expect(baseRegistrar - .connect(registrant) - ['safeTransferFrom(address,address,uint256,bytes)']( - registrant.address, - custody.address, - labelHash, - abiCoder.encode( - ['address', 'address', 'string'], - [ZERO_ADDRESS, resolver.address, name], + await expect( + baseRegistrar + .connect(registrant) + ['safeTransferFrom(address,address,uint256,bytes)']( + registrant.address, + await custody.getAddress(), + labelHash, + abiCoder.encode(['address', 'address', 'string'], [ZERO_ADDRESS, await resolver.getAddress(), name]), ), - ), - ).to.be.revertedWith('InvalidOwner'); + ).to.be.revertedWithCustomError(custody, 'InvalidOwner'); }); it('should reject transferring if called not from regisrar', async () => { const erc721Mock = await new ERC721Mock__factory(owner).deploy(); - await expect(erc721Mock.mint(custody.address, 1)).to.be.revertedWith('OperationProhibited()'); + await expect(erc721Mock.mint(await custody.getAddress(), 1)).to.be.revertedWithCustomError( + custody, + 'OperationProhibited', + ); }); it('unwrapped subdomains should not be a ERC721 token', async () => { @@ -688,7 +685,11 @@ describe('ENSCustody', function () { await expect( baseRegistrar .connect(registrant) - ['safeTransferFrom(address,address,uint256)'](registrant.address, custody.address, sha3(`sub.${name}`)), + ['safeTransferFrom(address,address,uint256)']( + registrant.address, + await custody.getAddress(), + sha3(`sub.${name}`), + ), ).to.be.reverted; }); }); @@ -697,13 +698,13 @@ describe('ENSCustody', function () { it('should register and park name', async () => { const name = 'ts-ld91'; const price = await topupCustody(name); - const custodyBalance = await provider.getBalance(custody.address); + const custodyBalance = await provider.getBalance(await custody.getAddress()); const minterBalance = await provider.getBalance(minter.address); const txs = await registerAndParkName(name, minter, ZERO_ADDRESS, false); await assertOwnership(name, registrantAddress); - expect(await provider.getBalance(custody.address)).to.equal(custodyBalance.sub(price)); + expect(await provider.getBalance(await custody.getAddress())).to.equal(custodyBalance - price); await assertGasSpent(minter.address, minterBalance, txs); }); @@ -716,13 +717,17 @@ describe('ENSCustody', function () { const receipt = await registerTx.wait(); - expect(receipt.events?.filter(({ event }) => event === 'Parked').length).to.be.equal(1); + const hasParkedEvents = !!receipt?.logs.filter((log) => + log instanceof EventLog ? log.eventName === 'Parked' : false, + ).length; + expect(hasParkedEvents).to.be.true; }); it('should revert when custody has not enough balance', async () => { const name = 'ts-tw75'; - await expect(registerAndParkName(name, minter, ZERO_ADDRESS, false)).to.be.revertedWith( + await expect(registerAndParkName(name, minter, ZERO_ADDRESS, false)).to.be.revertedWithCustomError( + custody, 'CustodyNotEnoughBalance', ); }); @@ -731,11 +736,11 @@ describe('ENSCustody', function () { const name = 'ts-tw14'; const price = await topupCustody(name); - const balance = await provider.getBalance(custody.address); - await registerAndParkName(name, minter, resolver.address, false); + const balance = await provider.getBalance(await custody.getAddress()); + await registerAndParkName(name, minter, await resolver.getAddress(), false); await assertOwnership(name, registrantAddress); - expect(await provider.getBalance(custody.address)).to.equal(balance.sub(price)); + expect(await provider.getBalance(await custody.getAddress())).to.equal(balance - price); }); it('should register and park name with resolver and initial records', async () => { @@ -744,7 +749,7 @@ describe('ENSCustody', function () { const callData = [resolver.interface.encodeFunctionData('setAddr(bytes32,address)', [node, registrantAddress])]; await topupCustody(name); - await registerAndParkName(name, minter, resolver.address, false, callData); + await registerAndParkName(name, minter, await resolver.getAddress(), false, callData); await assertOwnership(name, registrantAddress); expect(await resolver['addr(bytes32)'](node)).to.equal(registrantAddress); @@ -771,7 +776,10 @@ describe('ENSCustody', function () { await registerAndParkName(name, minter, ZERO_ADDRESS, false); await assertOwnership(name, registrantAddress); - await expect(custody.safeTransfer(registrantAddress, node)).to.be.revertedWith('Unauthorised'); + await expect(custody.safeTransfer(registrantAddress, node)).to.be.revertedWithCustomError( + custody, + 'Unauthorised', + ); }); it('should revert registration by non-minter', async () => { @@ -790,13 +798,13 @@ describe('ENSCustody', function () { await topupCustody(name); await registerAndParkName(name, minter, ZERO_ADDRESS, false); const price = await topupCustody(name, REGISTRATION_TIME); - const custodyBalance = await provider.getBalance(custody.address); + const custodyBalance = await provider.getBalance(await custody.getAddress()); const minterBalance = await provider.getBalance(minter.address); const tx = await custody.connect(minter).renew(name, REGISTRATION_TIME); await assertOwnership(name, registrantAddress); - expect(await provider.getBalance(custody.address)).to.equal(custodyBalance.sub(price)); + expect(await provider.getBalance(await custody.getAddress())).to.equal(custodyBalance - price); await assertGasSpent(minter.address, minterBalance, [tx]); }); @@ -806,11 +814,11 @@ describe('ENSCustody', function () { await registerAndParkName(name, minter, ZERO_ADDRESS, true); const price = await topupCustody(name, REGISTRATION_TIME); - const custodyBalance = await provider.getBalance(custody.address); + const custodyBalance = await provider.getBalance(await custody.getAddress()); const minterBalance = await provider.getBalance(minter.address); const tx = await custody.connect(minter).renew(name, REGISTRATION_TIME); await assertOwnership(name, registrantAddress, true); - expect(await provider.getBalance(custody.address)).to.equal(custodyBalance.sub(price)); + expect(await provider.getBalance(await custody.getAddress())).to.equal(custodyBalance - price); await assertGasSpent(minter.address, minterBalance, [tx]); }); @@ -835,7 +843,8 @@ describe('ENSCustody', function () { await topupCustody(name); await registerAndParkName(name, minter, ZERO_ADDRESS, false); - await expect(custody.connect(minter).renew(name, REGISTRATION_TIME)).to.be.revertedWith( + await expect(custody.connect(minter).renew(name, REGISTRATION_TIME)).to.be.revertedWithCustomError( + custody, 'CustodyNotEnoughBalance', ); }); @@ -857,13 +866,13 @@ describe('ENSCustody', function () { await increaseTimeBy(REGISTRATION_TIME + gracePeriod + 1); await topupCustody(name); - await expect(custody.connect(minter).renew(name, REGISTRATION_TIME)).to.be.revertedWith(''); + await expect(custody.connect(minter).renew(name, REGISTRATION_TIME)).to.be.revertedWithoutReason(); }); it('should revert renewing if domain does not exist', async () => { const name = 'dm-not-exist-1'; await topupCustody(name, REGISTRATION_TIME); - await expect(custody.connect(minter).renew(name, REGISTRATION_TIME)).to.be.revertedWith(''); + await expect(custody.connect(minter).renew(name, REGISTRATION_TIME)).to.be.revertedWithoutReason(); expect(await controller.available(name)).to.equal(true); }); @@ -876,11 +885,11 @@ describe('ENSCustody', function () { const tokenId = sha3(name); await nameWrapper.connect(registrant).unwrapETH2LD(tokenId, registrantAddress, registrantAddress); - const custodyBalance = await provider.getBalance(custody.address); + const custodyBalance = await provider.getBalance(await custody.getAddress()); const minterBalance = await provider.getBalance(minter.address); const tx = await custody.connect(minter).renew(name, REGISTRATION_TIME); expect(await ensRegistry.owner(namehash(`${name}.eth`))).to.equal(registrantAddress); - expect(await provider.getBalance(custody.address)).to.equal(custodyBalance.sub(price)); + expect(await provider.getBalance(await custody.getAddress())).to.equal(custodyBalance - price); await assertGasSpent(minter.address, minterBalance, [tx]); }); }); @@ -900,7 +909,7 @@ describe('ENSCustody', function () { it('reverts with InvalidToken error if token not known', async () => { const node = namehash('not-existent.eth'); - await expect(custody.ownerOf(node)).to.be.revertedWith('InvalidToken'); + await expect(custody.ownerOf(node)).to.be.revertedWithCustomError(custody, 'InvalidToken'); }); it('reverts with UnknownToken if subdomain was externally claimed from custody', async () => { @@ -910,21 +919,23 @@ describe('ENSCustody', function () { const node = namehash(`${name}.eth`); const subNode = namehash(`${subName}.eth`); - const { timestamp } = await provider.getBlock('latest'); + const timestamp = await getLatestBlockTimestamp(); await registerName(name); - const expiry = timestamp + (await controller.minCommitmentAge()).toNumber(); + const expiry = BigInt(timestamp) + (await controller.minCommitmentAge()); await nameWrapper.connect(registrant).setSubnodeOwner(node, 'sub', registrantAddress, 0, expiry); await assertOwnership(subName, registrantAddress, true); await expect( - nameWrapper.connect(registrant).safeTransferFrom( - registrantAddress, - custody.address, - subNode, - 1, - new ethers.utils.AbiCoder().encode(['address'], [registrantAddress]), - ), + nameWrapper + .connect(registrant) + .safeTransferFrom( + registrantAddress, + await custody.getAddress(), + subNode, + 1, + new ethers.AbiCoder().encode(['address'], [registrantAddress]), + ), ).to.emit(custody, 'Parked'); await assertOwnership(subName, registrantAddress, false); @@ -932,13 +943,13 @@ describe('ENSCustody', function () { expect(await nameWrapper.ownerOf(subNode)).to.equal(registrantAddress); - await expect(custody.ownerOf(subNode)).to.be.revertedWith('UnknownToken'); + await expect(custody.ownerOf(subNode)).to.be.revertedWithCustomError(custody, 'UnknownToken'); }); }); describe('setBaseRegistrar', async () => { it('sets the registrar only if owner is calling', async () => { - await custody.connect(owner).setBaseRegistrar(baseRegistrar.address); + await custody.connect(owner).setBaseRegistrar(await baseRegistrar.getAddress()); await expect(custody.connect(registrant).setBaseRegistrar(ZERO_ADDRESS)).to.be.revertedWith( 'Ownable: caller is not the owner', @@ -978,10 +989,7 @@ describe('ENSCustody', function () { // skip interfaces for which we don't have a function list if (INTERFACES[k] === undefined) continue; for (const fnName of INTERFACES[k]) { - expect(Object.keys(custody.interface.functions).filter((fn) => fn === fnName).length).to.equal( - 1, - `did not find ${fnName}`, - ); + expect(custody.interface.getFunction(fnName)).to.not.be.null; } } }); diff --git a/test/custody/ZilliqaRecover.test.ts b/test/custody/ZilliqaRecover.test.ts index 6f4a8364..6d79732c 100644 --- a/test/custody/ZilliqaRecover.test.ts +++ b/test/custody/ZilliqaRecover.test.ts @@ -1,24 +1,23 @@ import { readFileSync } from 'fs'; import { expect } from 'chai'; import { decryptPrivateKey, getAddressFromPublicKey, compressPublicKey, KeystoreV3 } from '@zilliqa-js/crypto'; -import { namehash } from 'ethers/lib/utils'; -import { ethers, upgrades } from 'hardhat'; - -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { BigNumber, Wallet } from 'ethers'; +import { namehash, Wallet } from 'ethers'; +import { ethers } from 'hardhat'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { custody, UNSRegistry__factory, MintingManager__factory } from '../../types/factories/contracts'; import { MintingManager, UNSRegistry, ZilliqaRecover } from '../../types'; import { ZERO_ADDRESS } from '../helpers/constants'; import { buildExecuteFunc } from '../helpers/metatx'; +import { deployProxy } from '../../src/helpers'; const ZilKey: KeystoreV3 = JSON.parse( readFileSync(`${__dirname}/zil18k3cvzg379g02et9fg2ga395r027jx5jggzvh5.json`).toString(), ); -const onChainPubKey = (wallet: Wallet | string): [string, string] => { +const onChainPubKey = (wallet: string): [string, string] => { // ETH public key format has a 0x04 constant prefix // We don't need to that when operating public key in a contract - return (typeof wallet === 'string' ? wallet : wallet.publicKey) + return wallet .replace(/^0x04/, '') .split(/(.{64})/) .filter((s) => s.length) @@ -47,29 +46,30 @@ describe('ZilliqaRecover', () => { privateKey = await decryptPrivateKey('UNSTesting32;', ZilKey); [coinbase, newOwner] = signers; zilWallet = new Wallet(privateKey, coinbase.provider); - publicKey = onChainPubKey(zilWallet.publicKey); - zilAddress = getAddressFromPublicKey(compressPublicKey(zilWallet.publicKey.replace('0x', ''))).toLowerCase(); - await ( - await coinbase.sendTransaction({ to: zilWallet.address, value: BigNumber.from('100000000000000000000') }) - ).wait(); - // zilliqaRecover = await new custody.ZilliqaRecover__factory(coinbase).deploy(); + publicKey = onChainPubKey(zilWallet.signingKey.publicKey); + zilAddress = getAddressFromPublicKey( + compressPublicKey(zilWallet.signingKey.publicKey.replace('0x', '')), + ).toLowerCase(); + + await (await coinbase.sendTransaction({ to: zilWallet.address, value: BigInt('100000000000000000000') })).wait(); + unsRegistry = await new UNSRegistry__factory(coinbase).deploy(); mintingManager = await new MintingManager__factory(coinbase).deploy(); - zilliqaRecover = (await upgrades.deployProxy(new custody.ZilliqaRecover__factory(coinbase), [ - unsRegistry.address, - mintingManager.address, - ])) as ZilliqaRecover; - // await zilliqaRecover.initialize(unsRegistry.address, mintingManager.address); - await unsRegistry.initialize(mintingManager.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); + zilliqaRecover = await deployProxy(new custody.ZilliqaRecover__factory(coinbase), [ + await unsRegistry.getAddress(), + await mintingManager.getAddress(), + ]); + + await unsRegistry.initialize(await mintingManager.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS); await mintingManager.initialize( - unsRegistry.address, + await unsRegistry.getAddress(), ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ); - await mintingManager.addMinters([zilliqaRecover.address, coinbase.address]); + await mintingManager.addMinters([await zilliqaRecover.getAddress(), coinbase.address]); }); describe('ethAddress', async () => { @@ -100,44 +100,56 @@ describe('ZilliqaRecover', () => { it('requires minting permission', async () => { const { label } = getRandomDomain(); - await expect(zilliqaRecover.connect(zilWallet).mint(label, zilAddress)).to.be.revertedWith('SenderNotMinter'); + + await expect(zilliqaRecover.connect(zilWallet).mint(label, zilAddress)).to.be.revertedWithCustomError( + zilliqaRecover, + 'SenderNotMinter', + ); }); it('requires matching public key without prefix', async () => { const { tokenId, label } = getRandomDomain(); await zilliqaRecover.mint(label, zilAddress); + await expect( zilliqaRecover .connect(zilWallet) - .claim(tokenId, ...onChainPubKey(Wallet.createRandom().publicKey), newOwner.address), - ).to.be.revertedWith('PublicKeyUnmatchSenderAddress'); + .claim(tokenId, ...onChainPubKey(Wallet.createRandom().signingKey.publicKey), newOwner.address), + ).to.be.revertedWithCustomError(zilliqaRecover, 'PublicKeyUnmatchSenderAddress'); }); it('forbids to return a domain', async () => { const { tokenId, label } = getRandomDomain(); await zilliqaRecover.mint(label, zilAddress); await zilliqaRecover.connect(zilWallet).claim(tokenId, ...publicKey, newOwner.address); + expect(await zilliqaRecover.isOwnedBy(ZERO_ADDRESS, [tokenId])).to.eql(true); + await expect( unsRegistry .connect(newOwner) - ['safeTransferFrom(address,address,uint256)'](newOwner.address, zilliqaRecover.address, tokenId), - ).to.be.revertedWith('UnknownTokenReceived'); + ['safeTransferFrom(address,address,uint256)'](newOwner.address, await zilliqaRecover.getAddress(), tokenId), + ).to.be.revertedWithCustomError(zilliqaRecover, 'UnknownTokenReceived'); }); it('checks token ownership', async () => { const { tokenId, label } = getRandomDomain(); await zilliqaRecover.mint(label, zilAddress.replace(/0x..../, '0xf000')); - await expect(zilliqaRecover.connect(zilWallet).claim(tokenId, ...publicKey, newOwner.address)).to.be.revertedWith( - 'TokenOwnedByOtherZilAddress', - ); + + await expect( + zilliqaRecover.connect(zilWallet).claim(tokenId, ...publicKey, newOwner.address), + ).to.be.revertedWithCustomError(zilliqaRecover, 'TokenOwnedByOtherZilAddress'); }); }); describe('execute', async () => { it('supports claiming via meta transaction', async () => { const { tokenId, label } = getRandomDomain(); - const buildExecuteParams = buildExecuteFunc(zilliqaRecover.interface, zilliqaRecover.address, zilliqaRecover); + const buildExecuteParams = buildExecuteFunc( + zilliqaRecover.interface, + await zilliqaRecover.getAddress(), + zilliqaRecover, + ); await zilliqaRecover.mint(label, zilAddress); const params = await buildExecuteParams( @@ -155,7 +167,11 @@ describe('ZilliqaRecover', () => { const { tokenId, label } = getRandomDomain(); const invalidTokenId = tokenId.replace(/0x..../, '0x0000'); expect(invalidTokenId).to.not.eql(tokenId); - const buildExecuteParams = buildExecuteFunc(zilliqaRecover.interface, zilliqaRecover.address, zilliqaRecover); + const buildExecuteParams = buildExecuteFunc( + zilliqaRecover.interface, + await zilliqaRecover.getAddress(), + zilliqaRecover, + ); await zilliqaRecover.mint(label, zilAddress); const params = await buildExecuteParams( @@ -165,10 +181,10 @@ describe('ZilliqaRecover', () => { invalidTokenId, await zilliqaRecover.nonceOf(invalidTokenId), ); - await expect( - // custody.connect(spender).execute(req, signature), - zilliqaRecover.execute(params.req, params.signature), - ).to.be.revertedWith('InvalidForwardedToken'); + await expect(zilliqaRecover.execute(params.req, params.signature)).to.be.revertedWithCustomError( + zilliqaRecover, + 'InvalidForwardedToken', + ); }); }); @@ -181,8 +197,8 @@ describe('ZilliqaRecover', () => { { label: domain2.label, zilOwner: zilAddress }, ]); - expect(await unsRegistry.ownerOf(domain1.tokenId)).to.eql(zilliqaRecover.address); - expect(await unsRegistry.ownerOf(domain2.tokenId)).to.eql(zilliqaRecover.address); + expect(await unsRegistry.ownerOf(domain1.tokenId)).to.eql(await zilliqaRecover.getAddress()); + expect(await unsRegistry.ownerOf(domain2.tokenId)).to.eql(await zilliqaRecover.getAddress()); expect((await zilliqaRecover.znsOwnerOf(domain1.tokenId)).toLowerCase()).to.eql(zilAddress); expect((await zilliqaRecover.znsOwnerOf(domain2.tokenId)).toLowerCase()).to.eql(zilAddress); expect(await zilliqaRecover.isOwnedBy(zilAddress, [domain1.tokenId, domain2.tokenId])).to.eql(true); diff --git a/test/helpers/constants.ts b/test/helpers/constants.ts index 5da52276..ba9694fe 100644 --- a/test/helpers/constants.ts +++ b/test/helpers/constants.ts @@ -1,7 +1,3 @@ -import { ethers } from 'hardhat'; - -const { BigNumber } = ethers; - export const DEAD_ADDRESS = '0x000000000000000000000000000000000000dEaD'; export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; export const ZERO_WORD = '0x0000000000000000000000000000000000000000000000000000000000000000'; @@ -15,34 +11,34 @@ export const BUFFERED_REGISTRATION_COST = REGISTRATION_TIME + 3 * DAY; export const TLD = { // Regular - CRYPTO: BigNumber.from('0x0f4a10a4f46c288cea365fcf45cccf0e9d901b945b9829ccdb54c10dc3cb7a6f'), - WALLET: BigNumber.from('0x1e3f482b3363eb4710dae2cb2183128e272eafbe137f686851c1caea32502230'), - X: BigNumber.from('0x241e7e2b7fd7333b3c0c049b326316b811af0c01cfc0c7a90b466fda3a70fc2d'), - NFT: BigNumber.from('0xb75cf4f3d8bc3deb317ed5216d898899d5cc6a783f65f6768eb9bcb89428670d'), - BLOCKCHAIN: BigNumber.from('0x4118ebbd893ecbb9f5d7a817c7d8039c1bd991b56ea243e2ae84d0a1b2c950a7'), - BITCOIN: BigNumber.from('0x042fb01c1e43fb4a32f85b41c821e17d2faeac58cfc5fb23f80bc00c940f85e3'), - 888: BigNumber.from('0x5c828ec285c0bf152a30a325b3963661a80cb87641d60920344caf04d4a0f31e'), - DAO: BigNumber.from('0xb5f2bbf81da581299d4ff7af60560c0ac854196f5227328d2d0c2bb0df33e553'), - ZIL: BigNumber.from('0xd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d239'), - POLYGON: BigNumber.from('0xed9ce6b49a0e2c56c57c86795b131bd6df792312183994c3cf3de1516cfe92d6'), - UNSTOPPABLE: BigNumber.from('0x92bba949890cd44a226a8ce54135cf86538cd6c5ca0ccf41877102fd718cc8aa'), - KLEVER: BigNumber.from('0xa18784bb78ee0f577251fb21ad5cac7a140ab47e9414e3c7af5125e3e1d28923'), - HI: BigNumber.from('0xfdb51f7f56d9b1149db5ce99afcf60dda4416fd6fb8dc0649fec13cd03e1803e'), - KRESUS: BigNumber.from('0x2acf53593112265ba651274f0e33a6b3fe86f92bbee4d39211540592fde6b0f3'), - ANIME: BigNumber.from('0xaf4d61a6acdda7379d6f90207923aeb080994d0f1aaba4b8b24a14f965b2bb7c'), - MANGA: BigNumber.from('0x57ea207b3238a69d8a9a53252de172f2ceae1d856008b13208a203867a707c78'), - BINANCEUS: BigNumber.from('0x2a91107027b89ab420a4d8ec457493cfca12ab17615ec8c876695f1343f3f0fd'), - REALM: BigNumber.from('0x2ac5a394f941733376764fbf4c4b2933098b23a405bd8c55c9a8d32e2c8fb696'), - GO: BigNumber.from('0xa264639c3dbff58a1ded5efcf724e50a9c7847ff8197c87c00d009fbba2a3720'), - ALTIMIST: BigNumber.from('0x9bf15275eb85f2e69308f3dbfbe0f94cade4f05c2aa24ba7b9eba5ad2fb1a2cb'), - PUDGY: BigNumber.from('0x17936dd2b9c99a1e1bfa039dd7d40118f3ed535fcd9c8cda23c8070ffb4c2264'), - AUSTIN: BigNumber.from('0x89e68000b532da79f9a0d4b8416eaa4f64294236ab233205343453d5bec22933'), - BITGET: BigNumber.from('0xbf2121df4e351413ea6788cb220e735378a753cec288cb22644340d58d597b23'), - POG: BigNumber.from('0xe76cc52c68a868af0cba676c92337a921cc721b45b6630e47f7ecb78e3e0edcc'), - CLAY: BigNumber.from('0x58872a8ca9414ae0f3ab850f51efaf4c77b647d903f9ec89a03d3018bb42e4fa'), + CRYPTO: BigInt('0x0f4a10a4f46c288cea365fcf45cccf0e9d901b945b9829ccdb54c10dc3cb7a6f'), + WALLET: BigInt('0x1e3f482b3363eb4710dae2cb2183128e272eafbe137f686851c1caea32502230'), + X: BigInt('0x241e7e2b7fd7333b3c0c049b326316b811af0c01cfc0c7a90b466fda3a70fc2d'), + NFT: BigInt('0xb75cf4f3d8bc3deb317ed5216d898899d5cc6a783f65f6768eb9bcb89428670d'), + BLOCKCHAIN: BigInt('0x4118ebbd893ecbb9f5d7a817c7d8039c1bd991b56ea243e2ae84d0a1b2c950a7'), + BITCOIN: BigInt('0x042fb01c1e43fb4a32f85b41c821e17d2faeac58cfc5fb23f80bc00c940f85e3'), + 888: BigInt('0x5c828ec285c0bf152a30a325b3963661a80cb87641d60920344caf04d4a0f31e'), + DAO: BigInt('0xb5f2bbf81da581299d4ff7af60560c0ac854196f5227328d2d0c2bb0df33e553'), + ZIL: BigInt('0xd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d239'), + POLYGON: BigInt('0xed9ce6b49a0e2c56c57c86795b131bd6df792312183994c3cf3de1516cfe92d6'), + UNSTOPPABLE: BigInt('0x92bba949890cd44a226a8ce54135cf86538cd6c5ca0ccf41877102fd718cc8aa'), + KLEVER: BigInt('0xa18784bb78ee0f577251fb21ad5cac7a140ab47e9414e3c7af5125e3e1d28923'), + HI: BigInt('0xfdb51f7f56d9b1149db5ce99afcf60dda4416fd6fb8dc0649fec13cd03e1803e'), + KRESUS: BigInt('0x2acf53593112265ba651274f0e33a6b3fe86f92bbee4d39211540592fde6b0f3'), + ANIME: BigInt('0xaf4d61a6acdda7379d6f90207923aeb080994d0f1aaba4b8b24a14f965b2bb7c'), + MANGA: BigInt('0x57ea207b3238a69d8a9a53252de172f2ceae1d856008b13208a203867a707c78'), + BINANCEUS: BigInt('0x2a91107027b89ab420a4d8ec457493cfca12ab17615ec8c876695f1343f3f0fd'), + REALM: BigInt('0x2ac5a394f941733376764fbf4c4b2933098b23a405bd8c55c9a8d32e2c8fb696'), + GO: BigInt('0xa264639c3dbff58a1ded5efcf724e50a9c7847ff8197c87c00d009fbba2a3720'), + ALTIMIST: BigInt('0x9bf15275eb85f2e69308f3dbfbe0f94cade4f05c2aa24ba7b9eba5ad2fb1a2cb'), + PUDGY: BigInt('0x17936dd2b9c99a1e1bfa039dd7d40118f3ed535fcd9c8cda23c8070ffb4c2264'), + AUSTIN: BigInt('0x89e68000b532da79f9a0d4b8416eaa4f64294236ab233205343453d5bec22933'), + BITGET: BigInt('0xbf2121df4e351413ea6788cb220e735378a753cec288cb22644340d58d597b23'), + POG: BigInt('0xe76cc52c68a868af0cba676c92337a921cc721b45b6630e47f7ecb78e3e0edcc'), + CLAY: BigInt('0x58872a8ca9414ae0f3ab850f51efaf4c77b647d903f9ec89a03d3018bb42e4fa'), // Expirable - COM: BigNumber.from('0xac2c11ea5d4a4826f418d3befbf0537de7f13572d2a433edfe4a7314ea5dc896'), + COM: BigInt('0xac2c11ea5d4a4826f418d3befbf0537de7f13572d2a433edfe4a7314ea5dc896'), }; export const EXPIRABLE_TLDS = [ diff --git a/test/helpers/consumption.ts b/test/helpers/consumption.ts index 2b1327a4..8025928b 100644 --- a/test/helpers/consumption.ts +++ b/test/helpers/consumption.ts @@ -1,3 +1,3 @@ -export function percDiff (a: number, b: number) { - return (-((a - b) / a) * 100).toFixed(2); +export function percDiff (a: bigint, b: bigint) { + return Number((-((a - b) / a) * BigInt(100))).toFixed(2); } diff --git a/test/helpers/metatx.ts b/test/helpers/metatx.ts index 5ad7d3d8..3427effe 100644 --- a/test/helpers/metatx.ts +++ b/test/helpers/metatx.ts @@ -1,5 +1,5 @@ -import { utils, Contract, BigNumberish, BigNumber, Signer } from 'ethers'; -import { Interface } from '@ethersproject/abi/'; +import { Contract, BigNumberish, Signer, Interface, solidityPackedKeccak256, keccak256, getBytes } from 'ethers'; +import type { BaseRoutingForwarderMock, MintingManagerForwarder, UNSRegistry } from '../../types'; export async function sign ( data: string, @@ -8,7 +8,7 @@ export async function sign ( signer: ISignerWithAddress, ): Promise { return signer.signMessage( - utils.arrayify(utils.solidityKeccak256(['bytes32', 'address', 'uint256'], [utils.keccak256(data), address, nonce])), + getBytes(solidityPackedKeccak256(['bytes32', 'address', 'uint256'], [keccak256(data), address, nonce])), ); } @@ -17,7 +17,7 @@ export type ExecuteFunc = ( params: unknown[], from: ISignerWithAddress, tokenId: BigNumberish, - nonce?: BigNumber, + nonce?: bigint, ) => Promise<{ req: { from: string; @@ -30,13 +30,17 @@ export type ExecuteFunc = ( type ISignerWithAddress = Signer & {address: string}; -export function buildExecuteFunc (iface: Interface, toAddress: string, forwarder: Contract): ExecuteFunc { +export function buildExecuteFunc ( + iface: Interface, + toAddress: string, + forwarder: Contract | MintingManagerForwarder | UNSRegistry | BaseRoutingForwarderMock, +): ExecuteFunc { return async ( selector: string, params: unknown[], from: ISignerWithAddress, tokenId: BigNumberish, - nonce?: BigNumber, + nonce?: bigint, ) => { const data = iface.encodeFunctionData(selector, params); diff --git a/test/helpers/polygon.ts b/test/helpers/polygon.ts index 957ceae4..06bf9714 100644 --- a/test/helpers/polygon.ts +++ b/test/helpers/polygon.ts @@ -1,6 +1,15 @@ import { artifacts } from 'hardhat'; -import { BigNumberish, Contract, ContractReceipt, ContractTransaction, utils } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { + AbiCoder, + BaseContract, + BigNumberish, + ContractTransactionReceipt, + ContractTransactionResponse, + encodeRlp, + hexlify, + toBeHex, +} from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { SimpleCheckpointManager } from '../../types/contracts/@maticnetwork/pos-portal/SimpleCheckpointManager.sol'; import { submitCheckpoint } from './@maticnetwork/checkpoint'; import { childWeb3 } from './@maticnetwork/contracts'; @@ -11,22 +20,22 @@ import { childWeb3 } from './@maticnetwork/contracts'; */ const ERC721_TRANSFER_EVENT_SIG = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'; -const abiCoder = new utils.AbiCoder(); +const abiCoder = new AbiCoder(); -export const buildPredicateExitInput = async ( - withdrawer: string, - receiver: string, - tokenId: BigNumberish, -): Promise => { - return utils.RLP.encode([ +export const buildPredicateExitInput = (withdrawer: string, receiver: string, tokenId: BigNumberish): string => { + return encodeRlp([ '0x', // skip first elem [ERC721_TRANSFER_EVENT_SIG, withdrawer, receiver, abiCoder.encode(['uint256'], [tokenId])], ]); }; -export const writeCheckpoint = async (contract: Contract, admin: SignerWithAddress, txn: ContractTransaction) => { +export const writeCheckpoint = async ( + contract: BaseContract, + admin: SignerWithAddress, + txn: ContractTransactionResponse, +) => { const abi = (await artifacts.readArtifact('SimpleCheckpointManager')).abi; - const checkpointManager = new childWeb3.eth.Contract(abi, contract.address, { + const checkpointManager = new childWeb3.eth.Contract(abi, await contract.getAddress(), { from: admin.address, }); return await submitCheckpoint(checkpointManager, txn.hash); @@ -34,28 +43,28 @@ export const writeCheckpoint = async (contract: Contract, admin: SignerWithAddre export const buildExitInput = async ( checkpointManager: SimpleCheckpointManager, - receipt: ContractReceipt, + receipt: ContractTransactionReceipt, checkpointData: any, // eslint-disable-line @typescript-eslint/no-explicit-any ) => { - const headerNumber = (await checkpointManager.currentCheckpointNumber()).toNumber(); + const headerNumber = await checkpointManager.currentCheckpointNumber(); const logIndex = receipt.logs.findIndex( (log) => log.topics[0].toLowerCase() === ERC721_TRANSFER_EVENT_SIG.toLowerCase(), ); - return utils.hexlify( - utils.RLP.encode( + return hexlify( + encodeRlp( [ - headerNumber, + toBeHex(headerNumber), Buffer.concat(checkpointData.proof), - checkpointData.number, - checkpointData.timestamp, + toBeHex(checkpointData.number), + toBeHex(checkpointData.timestamp), checkpointData.transactionsRoot, checkpointData.receiptsRoot, checkpointData.receipt, - utils.RLP.encode(checkpointData.receiptParentNodes), + encodeRlp(checkpointData.receiptParentNodes), checkpointData.path, // branch mask, - logIndex, - ].map((val) => utils.hexlify(val)), + toBeHex(logIndex), + ].map((val) => hexlify(val)), ), ); }; diff --git a/test/helpers/proxy.ts b/test/helpers/proxy.ts index 1d0c8776..59aca112 100644 --- a/test/helpers/proxy.ts +++ b/test/helpers/proxy.ts @@ -1,6 +1,4 @@ -import { utils, BigNumber } from 'ethers'; -import { FunctionFragment } from 'ethers/lib/utils'; -import { ProxyReader } from '../../types/contracts'; +import { keccak256, FunctionFragment, solidityPacked, toBeHex, BaseContract } from 'ethers'; export const getFuncSignature = (fragment: FunctionFragment): string => { return `${fragment.name}(${fragment.inputs @@ -8,23 +6,23 @@ export const getFuncSignature = (fragment: FunctionFragment): string => { .join(',')})`; }; -export const getInterfaceId = (proxyReader: ProxyReader, functions: string[]): string => { - let interfaceId: BigNumber | undefined; +export const getInterfaceId = (contract: BaseContract, functions: string[]): string => { + let interfaceId: bigint | undefined; for (const functionName of functions) { - const funcInterface = Object.values(proxyReader.interface.functions).find((x) => x.name === functionName); + const funcInterface = contract.interface.getFunction(functionName); if(!funcInterface) { throw new Error('getInterfaceId: could not find function with name ' + functionName); } const funcSignature = getFuncSignature(funcInterface); - const funcInterfaceId = utils.keccak256(utils.solidityPack(['string'], [funcSignature])).slice(0, 10); + const funcInterfaceId = keccak256(solidityPacked(['string'], [funcSignature])).slice(0, 10); if (interfaceId === undefined) { - interfaceId = BigNumber.from(funcInterfaceId); + interfaceId = BigInt(funcInterfaceId); } else { - interfaceId = interfaceId.xor(BigNumber.from(funcInterfaceId)); + interfaceId = interfaceId ^ BigInt(funcInterfaceId); } } @@ -32,5 +30,5 @@ export const getInterfaceId = (proxyReader: ProxyReader, functions: string[]): s throw new Error('getInterfaceId: could not get interfaceId. Probably no functions supplied?'); } - return interfaceId.toHexString(); + return toBeHex(interfaceId); }; diff --git a/test/helpers/registry.ts b/test/helpers/registry.ts index 149b1994..567ae80c 100644 --- a/test/helpers/registry.ts +++ b/test/helpers/registry.ts @@ -1,10 +1,8 @@ -import { ethers } from 'hardhat'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { randomBytes } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { UNSRegistry } from '../../types/contracts/UNSRegistry'; -const generateRandomLabel = () => 'domain-' + ethers.utils.hexlify( - ethers.utils.randomBytes(16), -); +const generateRandomLabel = () => 'domain-' + Buffer.from(randomBytes(16)).toString('hex'); type BaseMintParams = { unsRegistry: UNSRegistry, diff --git a/test/helpers/utils.ts b/test/helpers/utils.ts index b32dfa9e..52c08a6b 100644 --- a/test/helpers/utils.ts +++ b/test/helpers/utils.ts @@ -1,6 +1,14 @@ import { ethers } from 'hardhat'; -export async function increaseTimeBy (seconds: number) { - await ethers.provider.send('evm_increaseTime', [seconds]); +export async function increaseTimeBy (seconds: number | bigint) { + await ethers.provider.send('evm_increaseTime', [Number(seconds)]); await ethers.provider.send('evm_mine', []); } + +export async function getLatestBlockTimestamp (): Promise { + const block = await ethers.provider.getBlock('latest'); + + if(!block) throw new Error('Block not found'); + + return block.timestamp; +} diff --git a/test/metatx/BaseForwarder.test.ts b/test/metatx/BaseForwarder.test.ts index dc8244b9..5153f3a0 100644 --- a/test/metatx/BaseForwarder.test.ts +++ b/test/metatx/BaseForwarder.test.ts @@ -1,7 +1,7 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { BigNumber, Contract } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { BaseContract } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { BaseForwarderMock } from '../../types/contracts/mocks'; import { BaseForwarderMock__factory } from '../../types/factories/contracts/mocks'; import { ERC1271SimpleWallet } from '../../types/contracts/utils'; @@ -13,7 +13,7 @@ describe('BaseForwarder', () => { let signers: SignerWithAddress[], owner: SignerWithAddress, account: SignerWithAddress; let simpleWallet: ERC1271SimpleWallet; - let mockWallet: Contract; + let mockWallet: BaseContract; let buildExecuteParams: ExecuteFunc; @@ -27,177 +27,96 @@ describe('BaseForwarder', () => { simpleWallet = await new ERC1271SimpleWallet__factory(owner).deploy(owner.address); mockWallet = await ERC1271MockFactory.deploy(); - buildExecuteParams = buildExecuteFunc(forwarder.interface, forwarder.address, forwarder); + buildExecuteParams = buildExecuteFunc(forwarder.interface, await forwarder.getAddress(), forwarder); }); describe('Verify', async () => { it('should verify when the signature is valid', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'revertWithReason()', - [], - owner, - tokenId, - ); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('revertWithReason()', [], owner, tokenId); expect(await forwarder.verify(req, signature)).to.eq(true); }); it('should verify that the address matches the recovered one', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'revertWithReason()', - [], - owner, - tokenId, - ); - - expect( - await forwarder.verify({ ...req, from: account.address }, signature), - ).to.eq(false); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('revertWithReason()', [], owner, tokenId); + + expect(await forwarder.verify({ ...req, from: account.address }, signature)).to.eq(false); }); it('should verify that nonces match the address once', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'revertWithReason()', - [], - owner, - tokenId, - ); - - expect(await forwarder.verify({ ...req, nonce: 42 }, signature)).to.eq( - false, - ); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('revertWithReason()', [], owner, tokenId); + + expect(await forwarder.verify({ ...req, nonce: 42 }, signature)).to.eq(false); }); describe('with metatx from contract addresses', async () => { it('should be able to verify the ERC1271 contract signature', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'mintAsset()', - [], - owner, - tokenId, - ); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('mintAsset()', [], owner, tokenId); - expect( - await forwarder.verify( - { ...req, from: simpleWallet.address }, - signature, - ), - ).to.eq(true); + expect(await forwarder.verify({ ...req, from: await simpleWallet.getAddress() }, signature)).to.eq(true); }); it('should be able to handle situation when ERC1271 contract returns false', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'mintAsset()', - [], - account, - tokenId, - ); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('mintAsset()', [], account, tokenId); - expect( - await forwarder.verify( - { ...req, from: simpleWallet.address }, - signature, - ), - ).to.eq(false); + expect(await forwarder.verify({ ...req, from: await simpleWallet.getAddress() }, signature)).to.eq(false); }); it('should be able to handle situation when contract does not implement ERC1271', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'mintAsset()', - [], - owner, - tokenId, - ); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('mintAsset()', [], owner, tokenId); - expect( - await forwarder.verify( - { ...req, from: mockWallet.address }, - signature, - ), - ).to.eq(false); + expect(await forwarder.verify({ ...req, from: await mockWallet.getAddress() }, signature)).to.eq(false); }); }); }); describe('Execute', async () => { it('should revert with native reason', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'revertWithReason()', - [], - owner, - tokenId, - ); - - await expect(forwarder.execute(req, signature)).to.be.revertedWith( - 'AAAAAA', - ); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('revertWithReason()', [], owner, tokenId); + + await expect(forwarder.execute(req, signature)).to.be.revertedWith('AAAAAA'); }); it('should revert with forwarding reason', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'revertWithoutReason()', - [], - owner, - tokenId, - ); - - await expect(forwarder.execute(req, signature)).to.be.revertedWith( - 'BaseForwarder: CALL_FAILED', - ); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('revertWithoutReason()', [], owner, tokenId); + + await expect(forwarder.execute(req, signature)).to.be.revertedWith('BaseForwarder: CALL_FAILED'); }); describe('metatx from contract addresses', async () => { it('should be able to mint asset on behalf of ERC1271SmartWallet', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'mintAsset()', - [], - owner, - tokenId, - ); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('mintAsset()', [], owner, tokenId); - await forwarder.execute( - { ...req, from: simpleWallet.address }, - signature, - ); + await forwarder.execute({ ...req, from: await simpleWallet.getAddress() }, signature); - expect(await forwarder.hasAsset(simpleWallet.address)).to.eq(true); + expect(await forwarder.hasAsset(await simpleWallet.getAddress())).to.eq(true); }); it('should revert when the signature is made not on behalf of smart wallet owner', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'mintAsset()', - [], - account, - tokenId, - ); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('mintAsset()', [], account, tokenId); - await expect( - forwarder.execute({ ...req, from: mockWallet.address }, signature), - ).to.be.revertedWith('BaseForwarderMock: SIGNATURE_INVALID'); + await expect(forwarder.execute({ ...req, from: await mockWallet.getAddress() }, signature)).to.be.revertedWith( + 'BaseForwarderMock: SIGNATURE_INVALID', + ); }); it('should revert when contract does not implement ERC1271', async () => { - const tokenId = BigNumber.from(100010); - const { req, signature } = await buildExecuteParams( - 'mintAsset()', - [], - owner, - tokenId, - ); + const tokenId = BigInt(100010); + const { req, signature } = await buildExecuteParams('mintAsset()', [], owner, tokenId); - await expect( - forwarder.execute({ ...req, from: mockWallet.address }, signature), - ).to.be.revertedWith('BaseForwarderMock: SIGNATURE_INVALID'); + await expect(forwarder.execute({ ...req, from: await mockWallet.getAddress() }, signature)).to.be.revertedWith( + 'BaseForwarderMock: SIGNATURE_INVALID', + ); }); }); }); diff --git a/test/metatx/BaseRoutingForwarder.test.ts b/test/metatx/BaseRoutingForwarder.test.ts index 07a641d1..da653a00 100644 --- a/test/metatx/BaseRoutingForwarder.test.ts +++ b/test/metatx/BaseRoutingForwarder.test.ts @@ -1,28 +1,24 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { BigNumberish, Contract } from 'ethers'; +import { BigNumberish } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { ExecuteFunc, buildExecuteFunc, sign } from '../helpers/metatx'; import { TLD } from '../helpers/constants'; import { CNSRegistry } from '../../types/dot-crypto/contracts'; -import { - MintingController, - SignatureController, -} from '../../types/dot-crypto/contracts/controllers'; +import { MintingController, SignatureController } from '../../types/dot-crypto/contracts/controllers'; import { CNSRegistry__factory } from '../../types/factories/dot-crypto/contracts'; import { MintingController__factory, SignatureController__factory, } from '../../types/factories/dot-crypto/contracts/controllers'; +import { BaseRoutingForwarderMock } from '../../types'; describe('BaseRoutingForwarder', () => { - let forwarder: Contract, + let forwarder: BaseRoutingForwarderMock, registry: CNSRegistry, mintingController: MintingController, signatureController: SignatureController; - let signers: SignerWithAddress[], - owner: SignerWithAddress, - receiver: SignerWithAddress; + let signers: SignerWithAddress[], owner: SignerWithAddress, receiver: SignerWithAddress; const mintDomain = async (label: string, owner: string) => { await mintingController.mintSLD(owner, label); @@ -31,11 +27,7 @@ describe('BaseRoutingForwarder', () => { let buildExecuteParams: ExecuteFunc, buildExecuteRoutingParams: ExecuteFunc; - const buildTransfer = async ( - from: SignerWithAddress, - toAddress: string, - tokenId: BigNumberish, - ) => { + const buildTransfer = async (from: SignerWithAddress, toAddress: string, tokenId: BigNumberish) => { return await buildExecuteParams( 'transferFrom(address,address,uint256)', [from.address, toAddress, tokenId], @@ -48,124 +40,74 @@ describe('BaseRoutingForwarder', () => { signers = await ethers.getSigners(); [owner, receiver] = signers; - const BaseRoutingForwarder = await ethers.getContractFactory( - 'BaseRoutingForwarderMock', - ); - registry = await new CNSRegistry__factory(owner).deploy(); - mintingController = await new MintingController__factory(owner).deploy( - registry.address, - ); - signatureController = await new SignatureController__factory(owner).deploy( - registry.address, - ); + mintingController = await new MintingController__factory(owner).deploy(await registry.getAddress()); + signatureController = await new SignatureController__factory(owner).deploy(await registry.getAddress()); - await registry.addController(mintingController.address); - await registry.addController(signatureController.address); + await registry.addController(await mintingController.getAddress()); + await registry.addController(await signatureController.getAddress()); - forwarder = await BaseRoutingForwarder.deploy(); + forwarder = await ethers.deployContract('BaseRoutingForwarderMock'); - buildExecuteParams = buildExecuteFunc( - registry.interface, - signatureController.address, - forwarder, - ); - buildExecuteRoutingParams = buildExecuteFunc( - forwarder.interface, - forwarder.address, - forwarder, - ); + buildExecuteParams = buildExecuteFunc(registry.interface, await signatureController.getAddress(), forwarder); + buildExecuteRoutingParams = buildExecuteFunc(forwarder.interface, await forwarder.getAddress(), forwarder); }); it('should build valid `transferFrom` route calldata', async () => { const tokenId = await registry.childIdOf(TLD.CRYPTO, 'test_foob_1'); - const { req, signature } = await buildTransfer( - owner, + const { req, signature } = await buildTransfer(owner, receiver.address, tokenId); + + const expectedData = signatureController.interface.encodeFunctionData('transferFromFor', [ + owner.address, receiver.address, tokenId, - ); - - const expectedData = signatureController.interface.encodeFunctionData( - 'transferFromFor', - [owner.address, receiver.address, tokenId, signature], - ); + signature, + ]); - const calldata = await forwarder.callStatic.buildRouteData(req, signature); + const calldata = await forwarder.buildRouteData.staticCall(req, signature); expect(calldata).to.be.equal(expectedData); }); it('should build valid `putString(string)` route calldata', async () => { const tokenId = await registry.childIdOf(TLD.CRYPTO, 'test_foob_3'); - const { req, signature } = await buildExecuteRoutingParams( - 'putString(string)', - ['vv'], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteRoutingParams('putString(string)', ['vv'], owner, tokenId); - const expectedData = forwarder.interface.encodeFunctionData( - 'putStringFor(string,bytes)', - ['vv', signature], - ); + const expectedData = forwarder.interface.encodeFunctionData('putStringFor', ['vv', signature]); - const calldata = await forwarder.callStatic.buildRouteData(req, signature); + const calldata = await forwarder.buildRouteData.staticCall(req, signature); expect(calldata).to.be.equal(expectedData); }); it('should build valid `putUint(uint)` route calldata', async () => { const tokenId = await registry.childIdOf(TLD.CRYPTO, 'test_foob_4'); - const { req, signature } = await buildExecuteRoutingParams( - 'putUint(uint256)', - [1], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteRoutingParams('putUint(uint256)', [1], owner, tokenId); - const expectedData = forwarder.interface.encodeFunctionData( - 'putUintFor(uint256,bytes)', - [1, signature], - ); + const expectedData = forwarder.interface.encodeFunctionData('putUintFor', [1, signature]); - const calldata = await forwarder.callStatic.buildRouteData(req, signature); + const calldata = await forwarder.buildRouteData.staticCall(req, signature); expect(calldata).to.be.equal(expectedData); }); it('should build valid `putUintArr(uint256[])` route calldata', async () => { const tokenId = await registry.childIdOf(TLD.CRYPTO, 'test_foob_5'); - const { req, signature } = await buildExecuteRoutingParams( - 'putUintArr(uint256[])', - [[1, 2]], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteRoutingParams('putUintArr(uint256[])', [[1, 2]], owner, tokenId); - const expectedData = forwarder.interface.encodeFunctionData( - 'putUintArrFor(uint256[],bytes)', - [[1, 2], signature], - ); + const expectedData = forwarder.interface.encodeFunctionData('putUintArrFor', [[1, 2], signature]); - const calldata = await forwarder.callStatic.buildRouteData(req, signature); + const calldata = await forwarder.buildRouteData.staticCall(req, signature); expect(calldata).to.be.equal(expectedData); }); it('should revert when unknown function call', async () => { const tokenId = await mintDomain('test_foob_2', owner.address); - const data = registry.interface.encodeFunctionData('setOwner', [ - receiver.address, - tokenId, - ]); + const data = registry.interface.encodeFunctionData('setOwner', [receiver.address, tokenId]); const nonce = await forwarder.nonceOf(tokenId); - const signature = await sign( - data, - signatureController.address, - nonce, - owner, - ); + const signature = await sign(data, await signatureController.getAddress(), nonce, owner); const req = { from: owner.address, nonce, tokenId, data }; - await expect( - forwarder.callStatic.buildRouteData(req, signature), - ).to.be.revertedWith('RoutingForwarder: ROUTE_UNKNOWN'); + await expect(forwarder.buildRouteData.staticCall(req, signature)).to.be.revertedWith( + 'BaseRoutingForwarder: ROUTE_UNKNOWN', + ); }); }); diff --git a/test/metatx/CNSRegistryForwarder.test.ts b/test/metatx/CNSRegistryForwarder.test.ts index 2c2f0b05..2572db2f 100644 --- a/test/metatx/CNSRegistryForwarder.test.ts +++ b/test/metatx/CNSRegistryForwarder.test.ts @@ -1,28 +1,18 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; - -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { BigNumberish } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { buildExecuteFunc, ExecuteFunc } from '../helpers/metatx'; import { TLD } from '../helpers/constants'; -import { - CNSRegistry__factory, - Resolver__factory, -} from '../../types/factories/dot-crypto/contracts'; +import { CNSRegistry__factory, Resolver__factory } from '../../types/factories/dot-crypto/contracts'; import { MintingController__factory, SignatureController__factory, } from '../../types/factories/dot-crypto/contracts/controllers'; import { CNSRegistryForwarder__factory } from '../../types/factories/contracts/metatx'; import { CNSRegistryForwarder } from '../../types/contracts/metatx'; -import { - CNSRegistry, - Resolver, -} from '../../types/dot-crypto/contracts'; -import { - MintingController, - SignatureController, -} from '../../types/dot-crypto/contracts/controllers'; +import { CNSRegistry, Resolver } from '../../types/dot-crypto/contracts'; +import { MintingController, SignatureController } from '../../types/dot-crypto/contracts/controllers'; describe('CNSRegistryForwarder', () => { let forwarder: CNSRegistryForwarder, @@ -31,9 +21,7 @@ describe('CNSRegistryForwarder', () => { signatureController: SignatureController, resolver: Resolver; - let signers: SignerWithAddress[], - owner: SignerWithAddress, - receiver: SignerWithAddress; + let signers: SignerWithAddress[], owner: SignerWithAddress, receiver: SignerWithAddress; let buildExecuteParams: ExecuteFunc; const mintDomain = async (label: string, owner: string) => { @@ -41,11 +29,7 @@ describe('CNSRegistryForwarder', () => { return await registry.childIdOf(TLD.CRYPTO, label); }; - const buildTransfer = async ( - from: SignerWithAddress, - toAddress: string, - tokenId: BigNumberish, - ) => { + const buildTransfer = async (from: SignerWithAddress, toAddress: string, tokenId: BigNumberish) => { return await buildExecuteParams( 'transferFrom(address,address,uint256)', [from.address, toAddress, tokenId], @@ -59,29 +43,19 @@ describe('CNSRegistryForwarder', () => { [owner, receiver] = signers; registry = await new CNSRegistry__factory(owner).deploy(); - mintingController = await new MintingController__factory(owner).deploy( - registry.address, - ); - signatureController = await new SignatureController__factory(owner).deploy( - registry.address, - ); + mintingController = await new MintingController__factory(owner).deploy(await registry.getAddress()); + signatureController = await new SignatureController__factory(owner).deploy(await registry.getAddress()); resolver = await new Resolver__factory(owner).deploy( - registry.address, - mintingController.address, + await registry.getAddress(), + await mintingController.getAddress(), ); - await registry.addController(mintingController.address); - await registry.addController(signatureController.address); + await registry.addController(await mintingController.getAddress()); + await registry.addController(await signatureController.getAddress()); - forwarder = await new CNSRegistryForwarder__factory(owner).deploy( - signatureController.address, - ); + forwarder = await new CNSRegistryForwarder__factory(owner).deploy(await signatureController.getAddress()); - buildExecuteParams = buildExecuteFunc( - registry.interface, - signatureController.address, - forwarder, - ); + buildExecuteParams = buildExecuteFunc(registry.interface, await signatureController.getAddress(), forwarder); }); describe('nonceOf', () => { @@ -93,11 +67,7 @@ describe('CNSRegistryForwarder', () => { expect(nonceF).to.be.equal(0); expect(nonceF).to.be.equal(nonceS); - const { req, signature } = await buildTransfer( - owner, - receiver.address, - tokenId, - ); + const { req, signature } = await buildTransfer(owner, receiver.address, tokenId); await forwarder.execute(req, signature); nonceF = await forwarder.nonceOf(tokenId); @@ -110,11 +80,7 @@ describe('CNSRegistryForwarder', () => { describe('verify', () => { it('should verify successfully', async () => { const tokenId = await mintDomain('test_foo_10', owner.address); - const { req, signature } = await buildTransfer( - owner, - receiver.address, - tokenId, - ); + const { req, signature } = await buildTransfer(owner, receiver.address, tokenId); expect(await forwarder.verify(req, signature)).to.be.equal(true); }); @@ -133,24 +99,14 @@ describe('CNSRegistryForwarder', () => { it('should fail verification when nonce is incorrect', async () => { const tokenId = await mintDomain('test_foo_14', owner.address); - const { req, signature } = await buildTransfer( - owner, - receiver.address, - tokenId, - ); + const { req, signature } = await buildTransfer(owner, receiver.address, tokenId); - expect( - await forwarder.verify({ ...req, nonce: 100 }, signature), - ).to.be.equal(false); + expect(await forwarder.verify({ ...req, nonce: 100 }, signature)).to.be.equal(false); }); it('should fail verification when signature used', async () => { const tokenId = await mintDomain('test_foo_15', owner.address); - const { req, signature } = await buildTransfer( - owner, - receiver.address, - tokenId, - ); + const { req, signature } = await buildTransfer(owner, receiver.address, tokenId); await forwarder.execute(req, signature); expect(await forwarder.verify(req, signature)).to.be.equal(false); @@ -160,11 +116,7 @@ describe('CNSRegistryForwarder', () => { describe('execute', () => { it('should execute `transferFrom` for token', async () => { const tokenId = await mintDomain('test_goo__1', owner.address); - const { req, signature } = await buildTransfer( - owner, - receiver.address, - tokenId, - ); + const { req, signature } = await buildTransfer(owner, receiver.address, tokenId); expect(await forwarder.verify(req, signature)).to.be.equal(true); await forwarder.execute(req, signature); @@ -204,19 +156,12 @@ describe('CNSRegistryForwarder', () => { it('should execute `burn` for token', async () => { const tokenId = await mintDomain('test_goo__4', owner.address); - const { req, signature } = await buildExecuteParams( - 'burn(uint256)', - [tokenId], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteParams('burn(uint256)', [tokenId], owner, tokenId); expect(await forwarder.verify(req, signature)).to.be.equal(true); await forwarder.execute(req, signature); - await expect(registry.ownerOf(tokenId)).to.be.revertedWith( - 'ERC721: owner query for nonexistent token', - ); + await expect(registry.ownerOf(tokenId)).to.be.revertedWith('ERC721: owner query for nonexistent token'); }); it('should execute `mintChild` for token', async () => { @@ -232,9 +177,7 @@ describe('CNSRegistryForwarder', () => { await forwarder.execute(req, signature); const childTokenId = await registry.childIdOf(tokenId, 'test'); - expect(await registry.ownerOf(childTokenId)).to.be.equal( - receiver.address, - ); + expect(await registry.ownerOf(childTokenId)).to.be.equal(receiver.address); }); it('should execute `safeMintChild` for token', async () => { @@ -250,9 +193,7 @@ describe('CNSRegistryForwarder', () => { await forwarder.execute(req, signature); const childTokenId = await registry.childIdOf(tokenId, 'test'); - expect(await registry.ownerOf(childTokenId)).to.be.equal( - receiver.address, - ); + expect(await registry.ownerOf(childTokenId)).to.be.equal(receiver.address); }); it('should execute `safeMintChild(bytes)` for token', async () => { @@ -268,9 +209,7 @@ describe('CNSRegistryForwarder', () => { await forwarder.execute(req, signature); const childTokenId = await registry.childIdOf(tokenId, 'test'); - expect(await registry.ownerOf(childTokenId)).to.be.equal( - receiver.address, - ); + expect(await registry.ownerOf(childTokenId)).to.be.equal(receiver.address); }); it('should execute `transferFromChild` for token', async () => { @@ -290,9 +229,7 @@ describe('CNSRegistryForwarder', () => { await forwarder.execute(req, signature); - expect(await registry.ownerOf(childTokenId)).to.be.equal( - receiver.address, - ); + expect(await registry.ownerOf(childTokenId)).to.be.equal(receiver.address); }); it('should execute `safeTransferFromChild` for token', async () => { @@ -312,9 +249,7 @@ describe('CNSRegistryForwarder', () => { await forwarder.execute(req, signature); - expect(await registry.ownerOf(childTokenId)).to.be.equal( - receiver.address, - ); + expect(await registry.ownerOf(childTokenId)).to.be.equal(receiver.address); }); it('should execute `safeTransferFromChild(bytes)` for token', async () => { @@ -334,9 +269,7 @@ describe('CNSRegistryForwarder', () => { await forwarder.execute(req, signature); - expect(await registry.ownerOf(childTokenId)).to.be.equal( - receiver.address, - ); + expect(await registry.ownerOf(childTokenId)).to.be.equal(receiver.address); }); it('should execute `burnChild` for token', async () => { @@ -356,19 +289,17 @@ describe('CNSRegistryForwarder', () => { await forwarder.execute(req, signature); - await expect(registry.ownerOf(childTokenId)).to.be.revertedWith( - 'ERC721: owner query for nonexistent token', - ); + await expect(registry.ownerOf(childTokenId)).to.be.revertedWith('ERC721: owner query for nonexistent token'); expect(await registry.ownerOf(tokenId)).to.be.equal(owner.address); }); it('should execute `resolveTo` for token', async () => { const tokenId = await mintDomain('test_goo__12', owner.address); - await expect(registry.resolverOf(tokenId)).to.be.revertedWith(''); + await expect(registry.resolverOf(tokenId)).to.be.revertedWithoutReason(); const { req, signature } = await buildExecuteParams( 'resolveTo(address,uint256)', - [resolver.address, tokenId], + [await resolver.getAddress(), tokenId], owner, tokenId, ); @@ -376,7 +307,7 @@ describe('CNSRegistryForwarder', () => { await forwarder.execute(req, signature); - expect(await registry.resolverOf(tokenId)).to.be.equal(resolver.address); + expect(await registry.resolverOf(tokenId)).to.be.equal(await resolver.getAddress()); }); }); }); diff --git a/test/metatx/ERC2771Context.test.ts b/test/metatx/ERC2771Context.test.ts index a2340f44..142dd77f 100644 --- a/test/metatx/ERC2771Context.test.ts +++ b/test/metatx/ERC2771Context.test.ts @@ -1,8 +1,7 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; - -import { utils, BigNumber } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { AbiCoder } from 'ethers'; import { buildExecuteFunc, ExecuteFunc } from '../helpers/metatx'; import { ERC2771ContextMock } from '../../types/contracts/mocks'; import { MintingManagerForwarder } from '../../types/contracts/metatx'; @@ -19,21 +18,21 @@ describe('ERC2771Context', () => { [coinbase, account] = signers; context = await new ERC2771ContextMock__factory(coinbase).deploy(); - forwarder = await new MintingManagerForwarder__factory(coinbase).deploy(context.address); + forwarder = await new MintingManagerForwarder__factory(coinbase).deploy(await context.getAddress()); - await context.initialize(forwarder.address); + await context.initialize(await forwarder.getAddress()); - buildExecuteParams = buildExecuteFunc(context.interface, context.address, forwarder); + buildExecuteParams = buildExecuteFunc(context.interface, await context.getAddress(), forwarder); }); it('should verify', async () => { - const tokenId = BigNumber.from(1); + const tokenId = BigInt(1); const { req, signature } = await buildExecuteParams('run()', [], coinbase, tokenId); expect(await forwarder.verify(req, signature)).to.be.equal(true); - const abiCoder = new utils.AbiCoder(); - const data = abiCoder.decode(['string'], await forwarder.callStatic.execute(req, signature))[0]; + const abiCoder = new AbiCoder(); + const data = abiCoder.decode(['string'], await forwarder.execute.staticCall(req, signature))[0]; expect(data).to.be.equal('ERC2771ContextMock: run'); }); @@ -43,53 +42,59 @@ describe('ERC2771Context', () => { }); it('should return true trusted forwarder', async () => { - expect(await context.isTrustedForwarder(forwarder.address)).to.be.eq(true); + expect(await context.isTrustedForwarder(await forwarder.getAddress())).to.be.eq(true); }); }); describe('validate forwarded token', () => { it('should forwarded tokenId when trusted forwarder', async () => { - const tokenId = BigNumber.from(10); + const tokenId = BigInt(10); const { req, signature } = await buildExecuteParams('msgToken()', [], coinbase, tokenId); - const result = await forwarder.callStatic.execute(req, signature); + const result = await forwarder.execute.staticCall(req, signature); expect(result).to.be.equal(tokenId); }); it('should return zero tokenId when untrusted forwarder', async () => { - expect(await context.callStatic.msgToken()).to.be.equal(0); + expect(await context.msgToken.staticCall()).to.be.equal(0); }); }); describe('validate forwarded sender', () => { it('should forwarded sender when trusted forwarder', async () => { - const tokenId = BigNumber.from(121); + const tokenId = BigInt(121); const { req, signature } = await buildExecuteParams('msgSender()', [], account, tokenId); - const result = await forwarder.callStatic.execute(req, signature); - const [msgSender] = utils.defaultAbiCoder.decode(['address'], result); + const result = await forwarder.execute.staticCall(req, signature); + + const abiCoder = new AbiCoder(); + const [msgSender] = abiCoder.decode(['address'], result); + expect(msgSender).to.be.equal(account.address); }); it('should return direct sender when direct call', async () => { - expect(await context.callStatic.msgSender()).to.be.equal(coinbase.address); + expect(await context.msgSender.staticCall()).to.be.equal(coinbase.address); }); }); describe('validate forwarded data', () => { it('should forwarded data when trusted forwarder', async () => { - const tokenId = BigNumber.from(125); + const tokenId = BigInt(125); const { req, signature } = await buildExecuteParams('msgData()', [], account, tokenId); const data = context.interface.encodeFunctionData('msgData'); - const result = await forwarder.callStatic.execute(req, signature); - const [msgSender] = utils.defaultAbiCoder.decode(['bytes'], result); + const result = await forwarder.execute.staticCall(req, signature); + + const abiCoder = new AbiCoder(); + + const [msgSender] = abiCoder.decode(['bytes'], result); expect(msgSender).to.be.equal(data); }); it('should return zero data when untrusted forwarder', async () => { const data = context.interface.encodeFunctionData('msgData'); - expect(await context.callStatic.msgData()).to.be.equal(data); + expect(await context.msgData.staticCall()).to.be.equal(data); }); }); }); diff --git a/test/metatx/ERC2771RegistryContext.test.ts b/test/metatx/ERC2771RegistryContext.test.ts index 7f77d9de..05ec6d4e 100644 --- a/test/metatx/ERC2771RegistryContext.test.ts +++ b/test/metatx/ERC2771RegistryContext.test.ts @@ -1,7 +1,7 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { utils, BigNumber } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { AbiCoder } from 'ethers'; import { ERC2771RegistryContextMock__factory } from '../../types/factories/contracts/mocks'; import { ERC2771RegistryContextMock } from '../../types/contracts/mocks'; @@ -12,7 +12,7 @@ describe('ERC2771RegistryContext', () => { before(async () => { signers = await ethers.getSigners(); [coinbase] = signers; - [, ...accounts] = signers.map(s => s.address); + [, ...accounts] = signers.map((s) => s.address); context = await new ERC2771RegistryContextMock__factory(coinbase).deploy(); await context.initialize(); @@ -25,25 +25,25 @@ describe('ERC2771RegistryContext', () => { }); it('should return true trusted forwarder (self-address)', async () => { - expect(await context.isTrustedForwarder(context.address)).to.be.eq(true); + expect(await context.isTrustedForwarder(await context.getAddress())).to.be.eq(true); }); }); describe('validate forwarded token(last 32bytes in calldata)', () => { it('should forwarded tokenId when trusted forwarder', async () => { - const tokenId = BigNumber.from(102); + const tokenId = BigInt(102); const calldata = context.interface.encodeFunctionData('msgToken'); - const encodedTokenId = utils.defaultAbiCoder.encode([ 'uint256' ], [ tokenId ]); - const [success, returnData] = await context.callStatic.execute(calldata + encodedTokenId.slice(2)); + const encodedTokenId = new AbiCoder().encode(['uint256'], [tokenId]); + const [success, returnData] = await context.execute.staticCall(calldata + encodedTokenId.slice(2)); expect(success).to.be.eq(true); - const [msgToken] = utils.defaultAbiCoder.decode(['uint256'], returnData); + const [msgToken] = new AbiCoder().decode(['uint256'], returnData); expect(msgToken).to.be.equal(tokenId); }); it('should return zero tokenId when untrusted forwarder', async () => { - expect(await context.callStatic.msgToken()).to.be.equal(0); + expect(await context.msgToken.staticCall()).to.be.equal(0); }); }); @@ -51,21 +51,21 @@ describe('ERC2771RegistryContext', () => { it('should return sender address when trusted forwarder', async () => { const calldata = context.interface.encodeFunctionData('msgSender'); - const encodedTokenId = utils.defaultAbiCoder.encode([ 'uint256' ], [ 0 ]); - const encodedAddress = utils.defaultAbiCoder.encode([ 'address' ], [ signers[0].address ]); + const encodedTokenId = new AbiCoder().encode(['uint256'], [0]); + const encodedAddress = new AbiCoder().encode(['address'], [signers[0].address]); const encodedData = calldata + encodedAddress.slice(2) + encodedTokenId.slice(2); - const [success, returnData] = await context.callStatic.execute(encodedData); + const [success, returnData] = await context.execute.staticCall(encodedData); expect(success).to.be.eq(true); - const [address] = utils.defaultAbiCoder.decode(['address'], returnData); + const [address] = new AbiCoder().decode(['address'], returnData); expect(address).to.be.eql(signers[0].address); }); it('should return sender address when untrusted forwarder', async () => { - const sender = await context.callStatic.msgSender(); + const sender = await context.msgSender.staticCall(); expect(sender).to.be.eql(signers[0].address); - const sender2 = await context.connect(signers[2]).callStatic.msgSender(); + const sender2 = await context.connect(signers[2]).msgSender.staticCall(); expect(sender2).to.be.eql(signers[2].address); }); }); @@ -74,18 +74,18 @@ describe('ERC2771RegistryContext', () => { it('should return data when trusted forwarder', async () => { const calldata = context.interface.encodeFunctionData('msgData'); - const encodedTokenId = utils.defaultAbiCoder.encode([ 'uint256' ], [ 0 ]); - const encodedAddress = utils.defaultAbiCoder.encode([ 'address' ], [ signers[0].address ]); + const encodedTokenId = new AbiCoder().encode(['uint256'], [0]); + const encodedAddress = new AbiCoder().encode(['address'], [signers[0].address]); const encodedData = calldata + encodedAddress.slice(2) + encodedTokenId.slice(2); - const [success, returnData] = await context.callStatic.execute(encodedData); + const [success, returnData] = await context.execute.staticCall(encodedData); expect(success).to.be.eq(true); - const [,, selector] = utils.defaultAbiCoder.decode(['bytes32', 'bytes32', 'bytes4'], returnData); + const [, , selector] = new AbiCoder().decode(['bytes32', 'bytes32', 'bytes4'], returnData); expect(selector).to.be.eql(calldata); }); it('should return data when untrusted forwarder', async () => { - const data = await context.callStatic.msgData(); + const data = await context.msgData.staticCall(); expect(data).to.be.eql('0xc4c2bfdc'); }); }); diff --git a/test/metatx/ResolverForwarder.test.ts b/test/metatx/ResolverForwarder.test.ts index 9d5cc3d0..4a189607 100644 --- a/test/metatx/ResolverForwarder.test.ts +++ b/test/metatx/ResolverForwarder.test.ts @@ -1,22 +1,12 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; -import { BigNumber } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { buildExecuteFunc, ExecuteFunc } from '../helpers/metatx'; import { TLD } from '../helpers/constants'; import { ResolverForwarder } from '../../types/contracts/metatx'; -import { - CNSRegistry, - Resolver, -} from '../../types/dot-crypto/contracts'; -import { - MintingController, - SignatureController, -} from '../../types/dot-crypto/contracts/controllers'; -import { - CNSRegistry__factory, - Resolver__factory, -} from '../../types/factories/dot-crypto/contracts'; +import { CNSRegistry, Resolver } from '../../types/dot-crypto/contracts'; +import { MintingController, SignatureController } from '../../types/dot-crypto/contracts/controllers'; +import { CNSRegistry__factory, Resolver__factory } from '../../types/factories/dot-crypto/contracts'; import { MintingController__factory, SignatureController__factory, @@ -33,19 +23,13 @@ describe('ResolverForwarder', () => { let signers: SignerWithAddress[], owner: SignerWithAddress; let buildExecuteParams: ExecuteFunc; - const mintDomain = async ( - label: string, - owner: string, - resolverAddress: string = resolver.address, - ): Promise => { - await mintingController.mintSLDWithResolver(owner, label, resolverAddress); + const mintDomain = async (label: string, owner: string, resolverAddress?: string): Promise => { + await mintingController.mintSLDWithResolver(owner, label, resolverAddress ?? (await resolver.getAddress())); + return await registry.childIdOf(TLD.CRYPTO, label); }; - const mintDomainWithoutResolver = async ( - label: string, - owner: string, - ): Promise => { + const mintDomainWithoutResolver = async (label: string, owner: string): Promise => { await mintingController.mintSLD(owner, label); return await registry.childIdOf(TLD.CRYPTO, label); }; @@ -55,30 +39,22 @@ describe('ResolverForwarder', () => { [owner] = signers; registry = await new CNSRegistry__factory(owner).deploy(); - mintingController = await new MintingController__factory(owner).deploy( - registry.address, - ); - signatureController = await new SignatureController__factory(owner).deploy( - registry.address, - ); + mintingController = await new MintingController__factory(owner).deploy(await registry.getAddress()); + signatureController = await new SignatureController__factory(owner).deploy(await registry.getAddress()); resolver = await new Resolver__factory(owner).deploy( - registry.address, - mintingController.address, + await registry.getAddress(), + await mintingController.getAddress(), ); - await registry.addController(mintingController.address); - await registry.addController(signatureController.address); + await registry.addController(await mintingController.getAddress()); + await registry.addController(await signatureController.getAddress()); forwarder = await new ResolverForwarder__factory(owner).deploy( - registry.address, - resolver.address, + await registry.getAddress(), + await resolver.getAddress(), ); - buildExecuteParams = buildExecuteFunc( - resolver.interface, - resolver.address, - forwarder, - ); + buildExecuteParams = buildExecuteFunc(resolver.interface, await resolver.getAddress(), forwarder); }); describe('nonceOf', () => { @@ -90,12 +66,7 @@ describe('ResolverForwarder', () => { expect(nonceF).to.be.equal(0); expect(nonceF).to.be.equal(nonceR); - const { req, signature } = await buildExecuteParams( - 'reset(uint256)', - [tokenId], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteParams('reset(uint256)', [tokenId], owner, tokenId); await forwarder.execute(req, signature); nonceF = await forwarder.nonceOf(tokenId); @@ -105,47 +76,31 @@ describe('ResolverForwarder', () => { }); it('should return nonce from default resolver when domain doesn\'t have own', async () => { - const tokenId = await mintDomainWithoutResolver( - 'test_foo_no_res', - owner.address, - ); + const tokenId = await mintDomainWithoutResolver('test_foo_no_res', owner.address); const nonceF = await forwarder.nonceOf(tokenId); const nonceR = await resolver.nonceOf(tokenId); expect(nonceF).to.be.equal(nonceR); // should be reverted when domain resolver is not set - await expect(registry.resolverOf(tokenId)).to.be.revertedWith(''); + await expect(registry.resolverOf(tokenId)).to.be.revertedWithoutReason(); }); it('should return nonce from default resolver when resolver is non-contract', async () => { - const tokenId = await mintDomain( - 'test_foo_noc', - owner.address, - owner.address, - ); + const tokenId = await mintDomain('test_foo_noc', owner.address, owner.address); expect(await forwarder.nonceOf(tokenId)).to.be.equal(0); }); it('should return nonce from default resolver when resolver is wrong', async () => { - const tokenId = await mintDomain( - 'test_foo_nof', - owner.address, - forwarder.address, - ); + const tokenId = await mintDomain('test_foo_nof', owner.address, await forwarder.getAddress()); expect(await forwarder.nonceOf(tokenId)).to.be.equal(0); }); it('should return nonce from default resolver when resolver is wrong 2', async () => { const tokenId = await mintDomain('test_foo_nof2', owner.address); - const { req, signature } = await buildExecuteParams( - 'reset(uint256)', - [tokenId], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteParams('reset(uint256)', [tokenId], owner, tokenId); await forwarder.execute(req, signature); - await registry.resolveTo(forwarder.address, tokenId); + await registry.resolveTo(await forwarder.getAddress(), tokenId); expect(await forwarder.nonceOf(tokenId)).to.be.equal(1); }); @@ -154,50 +109,28 @@ describe('ResolverForwarder', () => { describe('verify', () => { it('should verify successfully', async () => { const tokenId = await mintDomain('test_foo_10', owner.address); - const { req, signature } = await buildExecuteParams( - 'reset(uint256)', - [tokenId], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteParams('reset(uint256)', [tokenId], owner, tokenId); expect(await forwarder.verify(req, signature)).to.be.equal(true); }); it('should fail verification when unknown function call', async () => { const tokenId = await mintDomain('test_foo_13', owner.address); - const { req, signature } = await buildExecuteParams( - 'get(string,uint256)', - ['k', tokenId], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteParams('get(string,uint256)', ['k', tokenId], owner, tokenId); expect(await forwarder.verify(req, signature)).to.be.equal(false); }); it('should fail verification when nonce is incorrect', async () => { const tokenId = await mintDomain('test_foo_14', owner.address); - const { req, signature } = await buildExecuteParams( - 'reset(uint256)', - [tokenId], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteParams('reset(uint256)', [tokenId], owner, tokenId); - expect( - await forwarder.verify({ ...req, nonce: 100 }, signature), - ).to.be.equal(false); + expect(await forwarder.verify({ ...req, nonce: 100 }, signature)).to.be.equal(false); }); it('should fail verification when signature used', async () => { const tokenId = await mintDomain('test_foo_15', owner.address); - const { req, signature } = await buildExecuteParams( - 'reset(uint256)', - [tokenId], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteParams('reset(uint256)', [tokenId], owner, tokenId); await forwarder.execute(req, signature); expect(await forwarder.verify(req, signature)).to.be.equal(false); @@ -210,12 +143,7 @@ describe('ResolverForwarder', () => { await resolver.set('k', 'v', tokenId); expect(await resolver.get('k', tokenId)).to.be.equal('v'); - const { req, signature } = await buildExecuteParams( - 'reset(uint256)', - [tokenId], - owner, - tokenId, - ); + const { req, signature } = await buildExecuteParams('reset(uint256)', [tokenId], owner, tokenId); expect(await forwarder.verify(req, signature)).to.be.equal(true); await forwarder.execute(req, signature); diff --git a/test/metatx/UNSRegistryForwarder.test.ts b/test/metatx/UNSRegistryForwarder.test.ts index c36cf625..c07c7774 100644 --- a/test/metatx/UNSRegistryForwarder.test.ts +++ b/test/metatx/UNSRegistryForwarder.test.ts @@ -1,7 +1,6 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { BigNumber } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { buildExecuteFunc, ExecuteFunc } from '../helpers/metatx'; import { UNSRegistryForwarderMock } from '../../types/contracts/mocks'; import { UNSRegistryForwarderMock__factory } from '../../types/factories/contracts/mocks'; @@ -20,26 +19,26 @@ describe('UNSRegistryForwarder', () => { await forwarder.initialize(); - buildExecuteParams = buildExecuteFunc(forwarder.interface, forwarder.address, forwarder); + buildExecuteParams = buildExecuteFunc(forwarder.interface, await forwarder.getAddress(), forwarder); }); describe('Verify', () => { it('should verify signature', async () => { - const tokenId = BigNumber.from(132); + const tokenId = BigInt(132); const { req, signature } = await buildExecuteParams('nonceOf(uint256)', [tokenId], owner, tokenId); expect(await forwarder.verify(req, signature)).to.be.eq(true); }); it('should verify signature when tokenId is empty', async () => { - const tokenId = BigNumber.from(132); + const tokenId = BigInt(132); const { req, signature } = await buildExecuteParams('nonceOf(uint256)', [tokenId], owner, tokenId); expect(await forwarder.verify(req, signature)).to.be.eq(true); }); it('should fail verification when signature is tampered', async () => { - const tokenId = BigNumber.from(132); + const tokenId = BigInt(132); const { req, signature } = await buildExecuteParams('nonceOf(uint256)', [tokenId], owner, tokenId); const tamperedReq = { ...req, nonce: 100 }; @@ -49,13 +48,13 @@ describe('UNSRegistryForwarder', () => { describe('Execute', () => { it('should execute when signature is valid', async () => { - const tokenId = BigNumber.from(132); + const tokenId = BigInt(132); const nonce = await forwarder.nonceOf(tokenId); const { req, signature } = await buildExecuteParams('nonceOf(uint256)', [tokenId], owner, tokenId); await forwarder.execute(req, signature); - expect(await forwarder.nonceOf(tokenId)).to.be.equal(nonce.add(1)); + expect(await forwarder.nonceOf(tokenId)).to.be.equal(nonce + BigInt(1)); }); // NOTE: When tokenId is empty, req.from is used for nonce verification @@ -65,7 +64,7 @@ describe('UNSRegistryForwarder', () => { const { req, signature } = await buildExecuteParams('nonceOf(uint256)', [tokenId], owner, tokenId); await forwarder.execute(req, signature); - expect(await forwarder.nonceOf(tokenId)).to.be.equal(nonce.add(1)); + expect(await forwarder.nonceOf(tokenId)).to.be.equal(nonce + BigInt(1)); }); it('should fail execution when signature is tampered', async () => { @@ -73,9 +72,9 @@ describe('UNSRegistryForwarder', () => { const nonce = await forwarder.nonceOf(tokenId); const { req, signature } = await buildExecuteParams('nonceOf(uint256)', [tokenId], owner, tokenId); - await expect( - forwarder.execute({ ...req, nonce: nonce.add(1) }, signature), - ).to.be.revertedWith('UNSRegistryForwarder: SIGNATURE_INVALID'); + await expect(forwarder.execute({ ...req, nonce: nonce + BigInt(1) }, signature)).to.be.revertedWith( + 'UNSRegistryForwarder: SIGNATURE_INVALID', + ); }); }); }); diff --git a/test/roles/MinterRole.test.ts b/test/roles/MinterRole.test.ts index e80da3bc..ffce666c 100644 --- a/test/roles/MinterRole.test.ts +++ b/test/roles/MinterRole.test.ts @@ -1,7 +1,6 @@ import { ethers } from 'hardhat'; import { expect } from 'chai'; -import { BigNumber } from 'ethers'; -import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { MinterRoleMock__factory } from '../../types/factories/contracts/mocks'; import { MinterRoleMock } from '../../types/contracts/mocks'; import { ZERO_ADDRESS } from './../helpers/constants'; @@ -35,9 +34,9 @@ describe('MinterRole', () => { }); it('revert adding minter account by non-owner account', async () => { - await expect( - minterRole.connect(minter).addMinter(minter2.address), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).addMinter(minter2.address)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); it('should add multiple minter accounts', async () => { @@ -48,9 +47,9 @@ describe('MinterRole', () => { }); it('revert adding multiple minter accounts by non-owner account', async () => { - await expect( - minterRole.connect(minter).addMinters([minter2.address, minter3.address]), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).addMinters([minter2.address, minter3.address])).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); it('should remove minter account', async () => { @@ -60,9 +59,9 @@ describe('MinterRole', () => { }); it('revert remove minter account by non-owner account', async () => { - await expect( - minterRole.connect(minter).removeMinter(minter.address), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).removeMinter(minter.address)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); it('should remove multiple minter accounts', async () => { @@ -72,9 +71,9 @@ describe('MinterRole', () => { }); it('revert removing multiple minter accounts by non-owner account', async () => { - await expect( - minterRole.connect(minter).removeMinters([minter.address]), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).removeMinters([minter.address])).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); }); @@ -96,41 +95,41 @@ describe('MinterRole', () => { it('revert managing minters when ownership transferred', async () => { await minterRole.connect(coinbase).transferOwnership(receiver.address); - await expect( - minterRole.connect(minter).addMinter(minter2.address), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).addMinter(minter2.address)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); - await expect( - minterRole.connect(minter).addMinters([minter2.address]), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).addMinters([minter2.address])).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); - await expect( - minterRole.connect(minter).removeMinter(minter.address), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).removeMinter(minter.address)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); - await expect( - minterRole.connect(minter).removeMinters([minter.address]), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).removeMinters([minter.address])).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); it('revert adding minter when ownership renounced', async () => { await minterRole.connect(coinbase).renounceOwnership(); - await expect( - minterRole.connect(minter).addMinter(minter2.address), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).addMinter(minter2.address)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); - await expect( - minterRole.connect(minter).addMinters([minter2.address]), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).addMinters([minter2.address])).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); - await expect( - minterRole.connect(minter).removeMinter(minter.address), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).removeMinter(minter.address)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); - await expect( - minterRole.connect(minter).removeMinters([minter.address]), - ).to.be.revertedWith('Ownable: caller is not the owner'); + await expect(minterRole.connect(minter).removeMinters([minter.address])).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); }); @@ -140,9 +139,7 @@ describe('MinterRole', () => { expect(await minterRole.isMinter(minter.address)).to.be.equal(false); - await expect( - minterRole.connect(minter).olnyMinterFunc(), - ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + await expect(minterRole.connect(minter).olnyMinterFunc()).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); }); it('should renounce minter account 2', async () => { @@ -152,9 +149,9 @@ describe('MinterRole', () => { expect(await minterRole.isMinter(coinbase.address)).to.be.equal(false); - await expect( - minterRole.connect(coinbase).olnyMinterFunc(), - ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + await expect(minterRole.connect(coinbase).olnyMinterFunc()).to.be.revertedWith( + 'MinterRole: CALLER_IS_NOT_MINTER', + ); }); it('should renounce minter account 3', async () => { @@ -164,98 +161,86 @@ describe('MinterRole', () => { expect(await minterRole.isMinter(faucet.address)).to.be.equal(false); - await expect( - minterRole.connect(faucet).olnyMinterFunc(), - ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + await expect(minterRole.connect(faucet).olnyMinterFunc()).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); }); }); describe('close minter account', () => { it('revert when closing by non-minter account', async () => { - await expect( - minterRole.connect(receiver).closeMinter(receiver.address), - ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + await expect(minterRole.connect(receiver).closeMinter(receiver.address)).to.be.revertedWith( + 'MinterRole: CALLER_IS_NOT_MINTER', + ); }); it('revert when zero account', async () => { - await expect( - minterRole.connect(minter).closeMinter(ZERO_ADDRESS), - ).to.be.revertedWith('MinterRole: RECEIVER_IS_EMPTY'); + await expect(minterRole.connect(minter).closeMinter(ZERO_ADDRESS)).to.be.revertedWith( + 'MinterRole: RECEIVER_IS_EMPTY', + ); }); it('close minter without forwarding funds', async () => { - const initBalance = await faucet.getBalance(); + const initBalance = await ethers.provider.getBalance(faucet.address); await minterRole.connect(minter).closeMinter(faucet.address, { value: 0 }); - await expect( - minterRole.olnyMinterFunc(), - ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + await expect(minterRole.olnyMinterFunc()).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); - expect(await faucet.getBalance()).to.be.equal(initBalance); + expect(await ethers.provider.getBalance(faucet.address)).to.be.equal(initBalance); }); it('close minter with forwarding funds', async () => { - const value = 1; - const initBalance = await faucet.getBalance(); + const value = BigInt(1); + const initBalance = await ethers.provider.getBalance(faucet.address); await minterRole.connect(minter).closeMinter(faucet.address, { value }); - await expect( - minterRole.olnyMinterFunc(), - ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + await expect(minterRole.olnyMinterFunc()).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); - expect(await faucet.getBalance()).to.be.equal(BigNumber.from(initBalance).add(value)); + expect(await ethers.provider.getBalance(faucet.address)).to.be.equal(initBalance + value); }); }); describe('rotate minter account', () => { it('revert when rotateing by non-minter account', async () => { - await expect( - minterRole.connect(receiver).rotateMinter(receiver.address), - ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + await expect(minterRole.connect(receiver).rotateMinter(receiver.address)).to.be.revertedWith( + 'MinterRole: CALLER_IS_NOT_MINTER', + ); }); it('revert when zero account', async () => { - await expect( - minterRole.connect(minter).rotateMinter(ZERO_ADDRESS), - ).to.be.revertedWith('MinterRole: RECEIVER_IS_EMPTY'); + await expect(minterRole.connect(minter).rotateMinter(ZERO_ADDRESS)).to.be.revertedWith( + 'MinterRole: RECEIVER_IS_EMPTY', + ); }); it('rotate minter without defining value', async () => { - const initBalance = await receiver.getBalance(); + const initBalance = await ethers.provider.getBalance(receiver.address); await minterRole.connect(minter).rotateMinter(receiver.address); - await expect( - minterRole.olnyMinterFunc(), - ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + await expect(minterRole.olnyMinterFunc()).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); - expect(await receiver.getBalance()).to.be.equal(initBalance); + expect(await ethers.provider.getBalance(receiver.address)).to.be.equal(initBalance); }); it('rotate minter without forwarding funds', async () => { - const initBalance = await receiver.getBalance(); + const initBalance = await ethers.provider.getBalance(receiver.address); await minterRole.connect(minter).rotateMinter(receiver.address, { value: 0 }); - await expect( - minterRole.olnyMinterFunc(), - ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + await expect(minterRole.olnyMinterFunc()).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); - expect(await receiver.getBalance()).to.be.equal(initBalance); + expect(await ethers.provider.getBalance(receiver.address)).to.be.equal(initBalance); }); it('rotate minter with forwarding funds', async () => { - const value = 3; - const initBalance = await receiver.getBalance(); + const value = BigInt(3); + const initBalance = await ethers.provider.getBalance(receiver.address); await minterRole.connect(minter).rotateMinter(receiver.address, { value }); - await expect( - minterRole.olnyMinterFunc(), - ).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); + await expect(minterRole.olnyMinterFunc()).to.be.revertedWith('MinterRole: CALLER_IS_NOT_MINTER'); - expect(await receiver.getBalance()).to.be.equal(BigNumber.from(initBalance).add(value)); + expect(await ethers.provider.getBalance(receiver.address)).to.be.equal(initBalance + value); }); }); }); diff --git a/tsconfig.json b/tsconfig.json index 1987cb48..ce78068b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,9 +25,10 @@ "./uns-config.json" ], "include": [ + "./types/**/*.ts", "./sandbox/**/*.ts", "./src/*.ts", - "./types/**/*.ts", + "./scripts/*.ts", "./test/**/*.ts" ] } diff --git a/yarn.lock b/yarn.lock index 1144892c..a77746d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,61 @@ __metadata: version: 6 cacheKey: 8 +"@adraffy/ens-normalize@npm:1.10.0": + version: 1.10.0 + resolution: "@adraffy/ens-normalize@npm:1.10.0" + checksum: af0540f963a2632da2bbc37e36ea6593dcfc607b937857133791781e246d47f870d5e3d21fa70d5cfe94e772c284588c81ea3f5b7f4ea8fbb824369444e4dbcb + languageName: node + linkType: hard + +"@adraffy/ens-normalize@npm:1.10.1": + version: 1.10.1 + resolution: "@adraffy/ens-normalize@npm:1.10.1" + checksum: 0836f394ea256972ec19a0b5e78cb7f5bcdfd48d8a32c7478afc94dd53ae44c04d1aa2303d7f3077b4f3ac2323b1f557ab9188e8059978748fdcd83e04a80dcc + languageName: node + linkType: hard + +"@aws-crypto/sha256-js@npm:1.2.2": + version: 1.2.2 + resolution: "@aws-crypto/sha256-js@npm:1.2.2" + dependencies: + "@aws-crypto/util": ^1.2.2 + "@aws-sdk/types": ^3.1.0 + tslib: ^1.11.1 + checksum: b6aeb71f88ecc219c5473803345bb15150ecd056a337582638dd60fb2344e0ff63908c684ef55268b249290fe0776e8e6fc830605f0aad850ff325b9cfe0dc6a + languageName: node + linkType: hard + +"@aws-crypto/util@npm:^1.2.2": + version: 1.2.2 + resolution: "@aws-crypto/util@npm:1.2.2" + dependencies: + "@aws-sdk/types": ^3.1.0 + "@aws-sdk/util-utf8-browser": ^3.0.0 + tslib: ^1.11.1 + checksum: 54d72ce4945b52f3fcbcb62574a55bc038cc3ff165742f340cabca1bdc979faf69c97709cf56daf434e4ad69e33582a04a64da33b4e4e13b25c6ff67f8abe5ae + languageName: node + linkType: hard + +"@aws-sdk/types@npm:^3.1.0": + version: 3.535.0 + resolution: "@aws-sdk/types@npm:3.535.0" + dependencies: + "@smithy/types": ^2.12.0 + tslib: ^2.6.2 + checksum: 3f735c78ea3a6f37d05387286f6d18b0e5deb41442095bd2f7c27b000659962872d1c801fa8484a6ac4b7d2725b2e176dc628c3fa2a903a3141d4be76488d48f + languageName: node + linkType: hard + +"@aws-sdk/util-utf8-browser@npm:^3.0.0": + version: 3.259.0 + resolution: "@aws-sdk/util-utf8-browser@npm:3.259.0" + dependencies: + tslib: ^2.3.1 + checksum: b6a1e580da1c9b62c749814182a7649a748ca4253edb4063aa521df97d25b76eae3359eb1680b86f71aac668e05cc05c514379bca39ebf4ba998ae4348412da8 + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.0.0": version: 7.12.13 resolution: "@babel/code-frame@npm:7.12.13" @@ -32,6 +87,13 @@ __metadata: languageName: node linkType: hard +"@colors/colors@npm:1.5.0": + version: 1.5.0 + resolution: "@colors/colors@npm:1.5.0" + checksum: d64d5260bed1d5012ae3fc617d38d1afc0329fec05342f4e6b838f46998855ba56e0a73833f4a80fa8378c84810da254f76a8a19c39d038260dc06dc4e007425 + languageName: node + linkType: hard + "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -79,26 +141,6 @@ __metadata: languageName: node linkType: hard -"@ensdomains/ens@npm:^0.4.4": - version: 0.4.5 - resolution: "@ensdomains/ens@npm:0.4.5" - dependencies: - bluebird: ^3.5.2 - eth-ens-namehash: ^2.0.8 - solc: ^0.4.20 - testrpc: 0.0.1 - web3-utils: ^1.0.0-beta.31 - checksum: 3b4f6e34f3376f1b3cc60927d53d5951c4da0a9ff0f8856aaedba5a73bceccb7c08632bf6709b3bb9e43d6e83223d23928f574fc62dec12b2b1a692bcd3d45c6 - languageName: node - linkType: hard - -"@ensdomains/resolver@npm:^0.2.4": - version: 0.2.4 - resolution: "@ensdomains/resolver@npm:0.2.4" - checksum: 3827a3430cc8935a0839dac9dafcfa6011c6f71af229ff91cbc6cdcbaa35d20c6dbb1a8a901cdb00e66428578ce1675bd6fe6901778b5d0d828321fbec9e0f7f - languageName: node - linkType: hard - "@ensdomains/solsha1@npm:0.0.3": version: 0.0.3 resolution: "@ensdomains/solsha1@npm:0.0.3" @@ -125,69 +167,6 @@ __metadata: languageName: node linkType: hard -"@ethereum-waffle/chai@npm:^3.4.4": - version: 3.4.4 - resolution: "@ethereum-waffle/chai@npm:3.4.4" - dependencies: - "@ethereum-waffle/provider": ^3.4.4 - ethers: ^5.5.2 - checksum: b2b9b6b839c3f6b4abf8489fe50549e6fda07bd81ae8e4250b20d9a76ce4a729ef47c741364387b1d2dbc7fac14b46a5d6dcc4d404344b9cce5f9698ff012251 - languageName: node - linkType: hard - -"@ethereum-waffle/compiler@npm:^3.4.4": - version: 3.4.4 - resolution: "@ethereum-waffle/compiler@npm:3.4.4" - dependencies: - "@resolver-engine/imports": ^0.3.3 - "@resolver-engine/imports-fs": ^0.3.3 - "@typechain/ethers-v5": ^2.0.0 - "@types/mkdirp": ^0.5.2 - "@types/node-fetch": ^2.5.5 - ethers: ^5.0.1 - mkdirp: ^0.5.1 - node-fetch: ^2.6.1 - solc: ^0.6.3 - ts-generator: ^0.1.1 - typechain: ^3.0.0 - checksum: ebffca732969253934c1e8cca6cc1f12d6294f848d44e6595af81460bc3230bc69096d0965b9deb2c7eecd472a1d536d8cbe993f95bfc76fbbe2114ddbabff70 - languageName: node - linkType: hard - -"@ethereum-waffle/ens@npm:^3.4.4": - version: 3.4.4 - resolution: "@ethereum-waffle/ens@npm:3.4.4" - dependencies: - "@ensdomains/ens": ^0.4.4 - "@ensdomains/resolver": ^0.2.4 - ethers: ^5.5.2 - checksum: 71d93c09ef3ab89a46f05b9e2a06e129e2109d160c3a819e4bf3b4414fc4707e7fc646c87c1d82f9ba769dc1ac3c6f4934fd72499654fcfc9db4abf46c21d118 - languageName: node - linkType: hard - -"@ethereum-waffle/mock-contract@npm:^3.4.4": - version: 3.4.4 - resolution: "@ethereum-waffle/mock-contract@npm:3.4.4" - dependencies: - "@ethersproject/abi": ^5.5.0 - ethers: ^5.5.2 - checksum: 6e5c62b342e424cd1937f2f7eb424056ad143b238320880f378c0db61c6d694617f968687321a2f030d546aa5b4dde42681cbb419589d7f87452c82844a4488b - languageName: node - linkType: hard - -"@ethereum-waffle/provider@npm:^3.4.4": - version: 3.4.4 - resolution: "@ethereum-waffle/provider@npm:3.4.4" - dependencies: - "@ethereum-waffle/ens": ^3.4.4 - ethers: ^5.5.2 - ganache-core: ^2.13.2 - patch-package: ^6.2.2 - postinstall-postinstall: ^2.1.0 - checksum: 9e251d7b0198c22e337b18368e3893de766a821e818702dbef0e0d603bad550c6e3a29676cff11272bc82762833586ee9659593d957ec8759a8cc93c2b0f3d00 - languageName: node - linkType: hard - "@ethereumjs/common@npm:2.5.0": version: 2.5.0 resolution: "@ethereumjs/common@npm:2.5.0" @@ -281,7 +260,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.0-beta.146, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.5.0, @ethersproject/abi@npm:^5.6.3, @ethersproject/abi@npm:^5.7.0": +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.9, @ethersproject/abi@npm:^5.1.2, @ethersproject/abi@npm:^5.6.3, @ethersproject/abi@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/abi@npm:5.7.0" dependencies: @@ -606,7 +585,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.0.0-beta.135, @ethersproject/transactions@npm:^5.6.2, @ethersproject/transactions@npm:^5.7.0": +"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.6.2, @ethersproject/transactions@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/transactions@npm:5.7.0" dependencies: @@ -623,7 +602,7 @@ __metadata: languageName: node linkType: hard -"@ethersproject/units@npm:5.7.0": +"@ethersproject/units@npm:5.7.0, @ethersproject/units@npm:^5.7.0": version: 5.7.0 resolution: "@ethersproject/units@npm:5.7.0" dependencies: @@ -683,6 +662,13 @@ __metadata: languageName: node linkType: hard +"@fastify/busboy@npm:^2.0.0": + version: 2.1.1 + resolution: "@fastify/busboy@npm:2.1.1" + checksum: 42c32ef75e906c9a4809c1e1930a5ca6d4ddc8d138e1a8c8ba5ea07f997db32210617d23b2e4a85fe376316a41a1a0439fc6ff2dedf5126d96f45a9d80754fb2 + languageName: node + linkType: hard + "@gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" @@ -715,6 +701,20 @@ __metadata: languageName: node linkType: hard +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.0.3": version: 3.1.0 resolution: "@jridgewell/resolve-uri@npm:3.1.0" @@ -768,6 +768,24 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": 1.3.2 + checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 + languageName: node + linkType: hard + +"@noble/curves@npm:1.3.0, @noble/curves@npm:~1.3.0": + version: 1.3.0 + resolution: "@noble/curves@npm:1.3.0" + dependencies: + "@noble/hashes": 1.3.3 + checksum: b65342ee66c4a440eee2978524412eabba9a9efdd16d6370e15218c6a7d80bddf35e66bb57ed52c0dfd32cb9a717b439ab3a72db618f1a0066dfebe3fd12a421 + languageName: node + linkType: hard + "@noble/hashes@npm:1.1.2, @noble/hashes@npm:~1.1.1": version: 1.1.2 resolution: "@noble/hashes@npm:1.1.2" @@ -782,13 +800,20 @@ __metadata: languageName: node linkType: hard -"@noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1": +"@noble/hashes@npm:1.3.2, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1": version: 1.3.2 resolution: "@noble/hashes@npm:1.3.2" checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 languageName: node linkType: hard +"@noble/hashes@npm:1.3.3, @noble/hashes@npm:~1.3.2": + version: 1.3.3 + resolution: "@noble/hashes@npm:1.3.3" + checksum: 8a6496d1c0c64797339bc694ad06cdfaa0f9e56cd0c3f68ae3666cfb153a791a55deb0af9c653c7ed2db64d537aa3e3054629740d2f2338bb1dcb7ab60cd205b + languageName: node + linkType: hard + "@noble/secp256k1@npm:1.6.3, @noble/secp256k1@npm:~1.6.0": version: 1.6.3 resolution: "@noble/secp256k1@npm:1.6.3" @@ -823,246 +848,316 @@ __metadata: languageName: node linkType: hard -"@nomicfoundation/ethereumjs-block@npm:^4.0.0": - version: 4.0.0 - resolution: "@nomicfoundation/ethereumjs-block@npm:4.0.0" +"@nomicfoundation/ethereumjs-block@npm:5.0.4": + version: 5.0.4 + resolution: "@nomicfoundation/ethereumjs-block@npm:5.0.4" dependencies: - "@nomicfoundation/ethereumjs-common": ^3.0.0 - "@nomicfoundation/ethereumjs-rlp": ^4.0.0 - "@nomicfoundation/ethereumjs-trie": ^5.0.0 - "@nomicfoundation/ethereumjs-tx": ^4.0.0 - "@nomicfoundation/ethereumjs-util": ^8.0.0 + "@nomicfoundation/ethereumjs-common": 4.0.4 + "@nomicfoundation/ethereumjs-rlp": 5.0.4 + "@nomicfoundation/ethereumjs-trie": 6.0.4 + "@nomicfoundation/ethereumjs-tx": 5.0.4 + "@nomicfoundation/ethereumjs-util": 9.0.4 ethereum-cryptography: 0.1.3 - checksum: a57a33dda7724f0a46ef2e0ca0dbb1b427268f4135e8c23eee9ab5730a79369d52122faba7a010d71bca3046f7ce644ed95e4a34d5f2221ecaa5d94886d84b11 + checksum: fe60b3dc31e0991eb6659f838485384e52992b72dd97a42c7bec320ea9902d1200352b5690a222442f77c5447cee4dd834fc25c53247aed5aa3130b0ab7e3c53 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-blockchain@npm:^6.0.0": - version: 6.0.0 - resolution: "@nomicfoundation/ethereumjs-blockchain@npm:6.0.0" - dependencies: - "@nomicfoundation/ethereumjs-block": ^4.0.0 - "@nomicfoundation/ethereumjs-common": ^3.0.0 - "@nomicfoundation/ethereumjs-ethash": ^2.0.0 - "@nomicfoundation/ethereumjs-rlp": ^4.0.0 - "@nomicfoundation/ethereumjs-trie": ^5.0.0 - "@nomicfoundation/ethereumjs-util": ^8.0.0 - abstract-level: ^1.0.3 +"@nomicfoundation/ethereumjs-blockchain@npm:7.0.4": + version: 7.0.4 + resolution: "@nomicfoundation/ethereumjs-blockchain@npm:7.0.4" + dependencies: + "@nomicfoundation/ethereumjs-block": 5.0.4 + "@nomicfoundation/ethereumjs-common": 4.0.4 + "@nomicfoundation/ethereumjs-ethash": 3.0.4 + "@nomicfoundation/ethereumjs-rlp": 5.0.4 + "@nomicfoundation/ethereumjs-trie": 6.0.4 + "@nomicfoundation/ethereumjs-tx": 5.0.4 + "@nomicfoundation/ethereumjs-util": 9.0.4 debug: ^4.3.3 ethereum-cryptography: 0.1.3 - level: ^8.0.0 - lru-cache: ^5.1.1 - memory-level: ^1.0.0 - checksum: 5605c1d249924321de98c1728b5b832ee6488b690a42c829db21afa96f5c152c73afdec6aa4758cb9b24ec7ac19ec9f3146b63cf837e1b91d364e4c37b497881 + lru-cache: ^10.0.0 + checksum: 0d35f28ed5ef356557b974b91898b6f61292a3e0fd3d1b1c8924250a59c7f583939453184f5b54f7cd2a2d8c055cdc6f3b8588c7b22f839beaa4ba69638ba2c8 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-common@npm:^3.0.0": - version: 3.0.0 - resolution: "@nomicfoundation/ethereumjs-common@npm:3.0.0" +"@nomicfoundation/ethereumjs-common@npm:4.0.4": + version: 4.0.4 + resolution: "@nomicfoundation/ethereumjs-common@npm:4.0.4" dependencies: - "@nomicfoundation/ethereumjs-util": ^8.0.0 - crc-32: ^1.2.0 - checksum: 6a62908e5ccd8a4f56b841bd6ba9eef21dffafdd505f18b6b886d86ba4287cd12a2c632d521c5fddf2c6fca5a840f580d7601d89820098f6c1f8311db41e496b + "@nomicfoundation/ethereumjs-util": 9.0.4 + checksum: ce3f6e4ae15b976efdb7ccda27e19aadb62b5ffee209f9503e68b4fd8633715d4d697c0cc10ccd35f5e4e977edd05100d0f214e28880ec64fff77341dc34fcdf languageName: node linkType: hard -"@nomicfoundation/ethereumjs-ethash@npm:^2.0.0": - version: 2.0.0 - resolution: "@nomicfoundation/ethereumjs-ethash@npm:2.0.0" +"@nomicfoundation/ethereumjs-ethash@npm:3.0.4": + version: 3.0.4 + resolution: "@nomicfoundation/ethereumjs-ethash@npm:3.0.4" dependencies: - "@nomicfoundation/ethereumjs-block": ^4.0.0 - "@nomicfoundation/ethereumjs-rlp": ^4.0.0 - "@nomicfoundation/ethereumjs-util": ^8.0.0 - abstract-level: ^1.0.3 - bigint-crypto-utils: ^3.0.23 + "@nomicfoundation/ethereumjs-block": 5.0.4 + "@nomicfoundation/ethereumjs-rlp": 5.0.4 + "@nomicfoundation/ethereumjs-util": 9.0.4 + bigint-crypto-utils: ^3.2.2 ethereum-cryptography: 0.1.3 - checksum: 60133df2d450179f2ab26e8784b1bd79b37411bb047a7dace655499749893750f0f8d6d573f182ebcf4dba35f2da6301b0ad1b80dbe7637bb0d5155ccb189fda + checksum: 52c2b003078be233929ae8355e8d2e0949ac66f75312a47725790b87111293de4303750a446f10eec22f5ffd9a2accb3f17fff8e6a85c36b47786e25242dad66 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-evm@npm:^1.0.0": - version: 1.0.0 - resolution: "@nomicfoundation/ethereumjs-evm@npm:1.0.0" +"@nomicfoundation/ethereumjs-evm@npm:2.0.4": + version: 2.0.4 + resolution: "@nomicfoundation/ethereumjs-evm@npm:2.0.4" dependencies: - "@nomicfoundation/ethereumjs-common": ^3.0.0 - "@nomicfoundation/ethereumjs-util": ^8.0.0 - "@types/async-eventemitter": ^0.2.1 - async-eventemitter: ^0.2.4 + "@nomicfoundation/ethereumjs-common": 4.0.4 + "@nomicfoundation/ethereumjs-statemanager": 2.0.4 + "@nomicfoundation/ethereumjs-tx": 5.0.4 + "@nomicfoundation/ethereumjs-util": 9.0.4 + "@types/debug": ^4.1.9 debug: ^4.3.3 ethereum-cryptography: 0.1.3 - mcl-wasm: ^0.7.1 - rustbn.js: ~0.2.0 - checksum: d1ffaa1a02c1f78099a5cfe802f2738c498063e383a51ede4b7194c809d7bdb8d322edfea4d83090c8c1b83b42fa9febbd571c35f5cf27f18d47fb664f3ab61e + rustbn-wasm: ^0.2.0 + checksum: db25327f7bda067cd0726a1bc7937c1c0405602fbe692abaa804f44e4fe9d2dcce103d50a767c0f3dc3067b38c35f468e997789234d2a4aef0ad31a36ad6d916 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-rlp@npm:^4.0.0, @nomicfoundation/ethereumjs-rlp@npm:^4.0.0-beta.2": - version: 4.0.0 - resolution: "@nomicfoundation/ethereumjs-rlp@npm:4.0.0" +"@nomicfoundation/ethereumjs-rlp@npm:5.0.4": + version: 5.0.4 + resolution: "@nomicfoundation/ethereumjs-rlp@npm:5.0.4" bin: - rlp: bin/rlp - checksum: b358d239e5a24884f0446d52159c8115b0eb1d6907179dc968df5054dccea7eff72f2d12522c911b6e08bb4b5d3f5f8e1d86a45cb1a24a4831cbb109743d4407 + rlp: bin/rlp.cjs + checksum: ee2c2e5776c73801dc5ed636f4988b599b4563c2d0037da542ea57eb237c69dd1ac555f6bcb5e06f70515b6459779ba0d68252a6e105132b4659ab4bf62919b0 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-statemanager@npm:^1.0.0": - version: 1.0.0 - resolution: "@nomicfoundation/ethereumjs-statemanager@npm:1.0.0" +"@nomicfoundation/ethereumjs-statemanager@npm:2.0.4": + version: 2.0.4 + resolution: "@nomicfoundation/ethereumjs-statemanager@npm:2.0.4" dependencies: - "@nomicfoundation/ethereumjs-common": ^3.0.0 - "@nomicfoundation/ethereumjs-rlp": ^4.0.0 - "@nomicfoundation/ethereumjs-trie": ^5.0.0 - "@nomicfoundation/ethereumjs-util": ^8.0.0 + "@nomicfoundation/ethereumjs-common": 4.0.4 + "@nomicfoundation/ethereumjs-rlp": 5.0.4 + "@nomicfoundation/ethereumjs-trie": 6.0.4 + "@nomicfoundation/ethereumjs-util": 9.0.4 debug: ^4.3.3 ethereum-cryptography: 0.1.3 - functional-red-black-tree: ^1.0.1 - checksum: fad02ea922fbe25328186ea2eb43bdba63def57822f373ce213be26125ee8d3c90cf3b6f626e6876637cdb842e3c2b788fb8891fcf1aca3fd655e1c0d9a7e936 + js-sdsl: ^4.1.4 + lru-cache: ^10.0.0 + peerDependencies: + "@nomicfoundation/ethereumjs-verkle": 0.0.2 + peerDependenciesMeta: + "@nomicfoundation/ethereumjs-verkle": + optional: true + checksum: 585dc67872d37f39310d85fc5c1b3179691412b9450411422ad6468017d8723e5192d22447c927d8403f7b6e95c1ecf7b48467edc440e50f15b5ac81e1fecd1d languageName: node linkType: hard -"@nomicfoundation/ethereumjs-trie@npm:^5.0.0": - version: 5.0.0 - resolution: "@nomicfoundation/ethereumjs-trie@npm:5.0.0" +"@nomicfoundation/ethereumjs-trie@npm:6.0.4": + version: 6.0.4 + resolution: "@nomicfoundation/ethereumjs-trie@npm:6.0.4" dependencies: - "@nomicfoundation/ethereumjs-rlp": ^4.0.0 - "@nomicfoundation/ethereumjs-util": ^8.0.0 + "@nomicfoundation/ethereumjs-rlp": 5.0.4 + "@nomicfoundation/ethereumjs-util": 9.0.4 + "@types/readable-stream": ^2.3.13 ethereum-cryptography: 0.1.3 + lru-cache: ^10.0.0 readable-stream: ^3.6.0 - checksum: 468de7ffe05473f0f05940e74bba01652dd9a4ff155a13e0a5395551e53557afde47d98f496f6323824bccfaeee8de4e22fef9b7f88d3bbd4e97cadc54e2e4f9 + checksum: 93a6be32657e67e74714fe557dbaf606d92c5cd1571c60f249295c27b0ab24b64e2e59cf211c214f8ba403d6475d23ed8c557be9077b92b2317e44384de8a6bf languageName: node linkType: hard -"@nomicfoundation/ethereumjs-tx@npm:^4.0.0": - version: 4.0.0 - resolution: "@nomicfoundation/ethereumjs-tx@npm:4.0.0" +"@nomicfoundation/ethereumjs-tx@npm:5.0.4": + version: 5.0.4 + resolution: "@nomicfoundation/ethereumjs-tx@npm:5.0.4" dependencies: - "@nomicfoundation/ethereumjs-common": ^3.0.0 - "@nomicfoundation/ethereumjs-rlp": ^4.0.0 - "@nomicfoundation/ethereumjs-util": ^8.0.0 + "@nomicfoundation/ethereumjs-common": 4.0.4 + "@nomicfoundation/ethereumjs-rlp": 5.0.4 + "@nomicfoundation/ethereumjs-util": 9.0.4 ethereum-cryptography: 0.1.3 - checksum: d2c0e3384aaa9f3b58232c531a4efd524be257e7257f23c3beed6ec9cf5fba6345cb632b3a464ae0a2aa99fd9e4a2d3e2d5c501593c5466e6ab629f05255791e + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + checksum: 0f1c87716682ccbcf4d92ffc6cf8ab557e658b90319d82be3219a091a736859f8803c73c98e4863682e3e86d264751c472d33ff6d3c3daf4e75b5f01d0af8fa3 languageName: node linkType: hard -"@nomicfoundation/ethereumjs-util@npm:^8.0.0": - version: 8.0.0 - resolution: "@nomicfoundation/ethereumjs-util@npm:8.0.0" +"@nomicfoundation/ethereumjs-util@npm:9.0.4": + version: 9.0.4 + resolution: "@nomicfoundation/ethereumjs-util@npm:9.0.4" dependencies: - "@nomicfoundation/ethereumjs-rlp": ^4.0.0-beta.2 + "@nomicfoundation/ethereumjs-rlp": 5.0.4 ethereum-cryptography: 0.1.3 - checksum: a39be4c8d3dea4fae1e969b47138d718cac31bf248bb517766a42c97ca5850ca3ddf16c66d8e404fa0a0363fd6898ae2e716d75da2ed4113e610d26026e4cefb + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + checksum: 754439f72b11cad2d8986707ad020077dcc763c4055f73e2668a0b4cadb22aa4407faa9b3c587d9eb5b97ac337afbe037eb642bc1d5a16197284f83db3462cbe languageName: node linkType: hard -"@nomicfoundation/ethereumjs-vm@npm:^6.0.0": - version: 6.0.0 - resolution: "@nomicfoundation/ethereumjs-vm@npm:6.0.0" - dependencies: - "@nomicfoundation/ethereumjs-block": ^4.0.0 - "@nomicfoundation/ethereumjs-blockchain": ^6.0.0 - "@nomicfoundation/ethereumjs-common": ^3.0.0 - "@nomicfoundation/ethereumjs-evm": ^1.0.0 - "@nomicfoundation/ethereumjs-rlp": ^4.0.0 - "@nomicfoundation/ethereumjs-statemanager": ^1.0.0 - "@nomicfoundation/ethereumjs-trie": ^5.0.0 - "@nomicfoundation/ethereumjs-tx": ^4.0.0 - "@nomicfoundation/ethereumjs-util": ^8.0.0 - "@types/async-eventemitter": ^0.2.1 - async-eventemitter: ^0.2.4 +"@nomicfoundation/ethereumjs-verkle@npm:0.0.2": + version: 0.0.2 + resolution: "@nomicfoundation/ethereumjs-verkle@npm:0.0.2" + dependencies: + "@nomicfoundation/ethereumjs-rlp": 5.0.4 + "@nomicfoundation/ethereumjs-util": 9.0.4 + lru-cache: ^10.0.0 + rust-verkle-wasm: ^0.0.1 + checksum: e075d7a2475670bb7039e715f0edce849ef3947aae2c7d0b658f058686ac9df3863499a5324717beff5d8f20a751f85ba1449942af818ec6772d775dcbb011d6 + languageName: node + linkType: hard + +"@nomicfoundation/ethereumjs-vm@npm:7.0.4": + version: 7.0.4 + resolution: "@nomicfoundation/ethereumjs-vm@npm:7.0.4" + dependencies: + "@nomicfoundation/ethereumjs-block": 5.0.4 + "@nomicfoundation/ethereumjs-blockchain": 7.0.4 + "@nomicfoundation/ethereumjs-common": 4.0.4 + "@nomicfoundation/ethereumjs-evm": 2.0.4 + "@nomicfoundation/ethereumjs-rlp": 5.0.4 + "@nomicfoundation/ethereumjs-statemanager": 2.0.4 + "@nomicfoundation/ethereumjs-trie": 6.0.4 + "@nomicfoundation/ethereumjs-tx": 5.0.4 + "@nomicfoundation/ethereumjs-util": 9.0.4 debug: ^4.3.3 ethereum-cryptography: 0.1.3 - functional-red-black-tree: ^1.0.1 - mcl-wasm: ^0.7.1 - rustbn.js: ~0.2.0 - checksum: 3c0e10b377579d74bfdcfd056d5545b605f767982e41038d036c8219a50fe3564c7f146fdd04385d64f48f94b9d95c378d7a37955c5100c46c568a29f54ea737 + checksum: 6f3b2507189b236e65dd3eaf3f072385a0252b826a348fe6ea5532a810bc2b6aab11d8ccec2cdfed629995e61e4c82c6e8765ac5794154772064ba3f18397407 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.0.3" +"@nomicfoundation/hardhat-chai-matchers@npm:^2.0.6": + version: 2.0.6 + resolution: "@nomicfoundation/hardhat-chai-matchers@npm:2.0.6" + dependencies: + "@types/chai-as-promised": ^7.1.3 + chai-as-promised: ^7.1.1 + deep-eql: ^4.0.1 + ordinal: ^1.0.3 + peerDependencies: + "@nomicfoundation/hardhat-ethers": ^3.0.0 + chai: ^4.2.0 + ethers: ^6.1.0 + hardhat: ^2.9.4 + checksum: 050bf0cf2f33b480bc93912330929649b0e08a0f9405bbadda66239bfeedaee7f2cfc7e34ed03540cb381b41925fc9dd4ec9a36088ccfa8d7461259d8c78003d + languageName: node + linkType: hard + +"@nomicfoundation/hardhat-ethers@npm:^3.0.0": + version: 3.0.5 + resolution: "@nomicfoundation/hardhat-ethers@npm:3.0.5" + dependencies: + debug: ^4.1.1 + lodash.isequal: ^4.5.0 + peerDependencies: + ethers: ^6.1.0 + hardhat: ^2.0.0 + checksum: 34b092dfec68f8d8673c96af717660327edc814bc5c9cdb5bc1f82d5bde2b18bc9b9d3499a632784a3d4f2505ac174217e55d31b546b7eaa77a5bb30b3c80bb4 + languageName: node + linkType: hard + +"@nomicfoundation/hardhat-verify@npm:^1.1.0": + version: 1.1.1 + resolution: "@nomicfoundation/hardhat-verify@npm:1.1.1" + dependencies: + "@ethersproject/abi": ^5.1.2 + "@ethersproject/address": ^5.0.2 + cbor: ^8.1.0 + chalk: ^2.4.2 + debug: ^4.1.1 + lodash.clonedeep: ^4.5.0 + semver: ^6.3.0 + table: ^6.8.0 + undici: ^5.14.0 + peerDependencies: + hardhat: ^2.0.4 + checksum: 2d83d32d6833f23fb62c30c68c9a2ab3956098030edcf459e69639960f059c72572d203bcf92f191c69c9cb0fbbf011a1113bacde1e3cbb28d5e812334f04f32 + languageName: node + linkType: hard + +"@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-darwin-arm64@npm:0.1.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.0.3" +"@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-darwin-x64@npm:0.1.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.0.3" +"@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-freebsd-x64@npm:0.1.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.0.3" +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-gnu@npm:0.1.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.0.3" +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-linux-arm64-musl@npm:0.1.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.0.3" +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-linux-x64-gnu@npm:0.1.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.0.3" +"@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-linux-x64-musl@npm:0.1.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.0.3" +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-win32-arm64-msvc@npm:0.1.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@npm:0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer-win32-ia32-msvc@npm:0.0.3" +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-win32-ia32-msvc@npm:0.1.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.0.3" +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.1": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer-win32-x64-msvc@npm:0.1.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@nomicfoundation/solidity-analyzer@npm:^0.0.3": - version: 0.0.3 - resolution: "@nomicfoundation/solidity-analyzer@npm:0.0.3" - dependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64": 0.0.3 - "@nomicfoundation/solidity-analyzer-darwin-x64": 0.0.3 - "@nomicfoundation/solidity-analyzer-freebsd-x64": 0.0.3 - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": 0.0.3 - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": 0.0.3 - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": 0.0.3 - "@nomicfoundation/solidity-analyzer-linux-x64-musl": 0.0.3 - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": 0.0.3 - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": 0.0.3 - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": 0.0.3 +"@nomicfoundation/solidity-analyzer@npm:^0.1.0": + version: 0.1.1 + resolution: "@nomicfoundation/solidity-analyzer@npm:0.1.1" + dependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64": 0.1.1 + "@nomicfoundation/solidity-analyzer-darwin-x64": 0.1.1 + "@nomicfoundation/solidity-analyzer-freebsd-x64": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": 0.1.1 + "@nomicfoundation/solidity-analyzer-linux-x64-musl": 0.1.1 + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": 0.1.1 + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": 0.1.1 + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": 0.1.1 dependenciesMeta: "@nomicfoundation/solidity-analyzer-darwin-arm64": optional: true @@ -1084,63 +1179,18 @@ __metadata: optional: true "@nomicfoundation/solidity-analyzer-win32-x64-msvc": optional: true - checksum: dd3e1e6aa75716eb22f256be06d6a4d808ef732f77c26b4489ae8f9508271799d555dff547cf037373b0974d892b4cc7f78bc4ea5027eee8561e4dd394fe61ac - languageName: node - linkType: hard - -"@nomiclabs/hardhat-ethers@npm:^2.2.1": - version: 2.2.1 - resolution: "@nomiclabs/hardhat-ethers@npm:2.2.1" - peerDependencies: - ethers: ^5.0.0 - hardhat: ^2.0.0 - checksum: 8cdbf7068f15ee993142ab600074938d05b42af73392a5b12c8eb607a5bca2fac977a6a85955e0b0285541415ad520626e7fb3d33ca7cc112d61ee928358e2f6 - languageName: node - linkType: hard - -"@nomiclabs/hardhat-etherscan@npm:^3.1.0": - version: 3.1.2 - resolution: "@nomiclabs/hardhat-etherscan@npm:3.1.2" - dependencies: - "@ethersproject/abi": ^5.1.2 - "@ethersproject/address": ^5.0.2 - cbor: ^5.0.2 - chalk: ^2.4.2 - debug: ^4.1.1 - fs-extra: ^7.0.1 - lodash: ^4.17.11 - semver: ^6.3.0 - table: ^6.8.0 - undici: ^5.4.0 - peerDependencies: - hardhat: ^2.0.4 - checksum: 7f225d05fe4d8549472bed2a5c8b8d02e1be652c6c1e00ac83416c048919a2a665d3ad7833c8d6f4513bb6f444e2a165d32a99051b179da7d35aaa1247c32947 - languageName: node - linkType: hard - -"@nomiclabs/hardhat-solhint@npm:^2.0.1": - version: 2.0.1 - resolution: "@nomiclabs/hardhat-solhint@npm:2.0.1" - dependencies: - solhint: ^2.0.0 - peerDependencies: - hardhat: ^2.0.0 - checksum: b38db32444857875832275de5cbbc99fd72221aa97473e5cebe59f064c731a089fc9791c30fb05b615e9b9b907a0bd0a5da4f163ffaa1c1c6e7cc389e0578db1 + checksum: 038cffafd5769e25256b5b8bef88d95cc1c021274a65c020cf84aceb3237752a3b51645fdb0687f5516a2bdfebf166fcf50b08ab64857925100213e0654b266b languageName: node linkType: hard -"@nomiclabs/hardhat-waffle@npm:^2.0.1": - version: 2.0.1 - resolution: "@nomiclabs/hardhat-waffle@npm:2.0.1" +"@nomiclabs/hardhat-solhint@npm:^3.0.1": + version: 3.0.1 + resolution: "@nomiclabs/hardhat-solhint@npm:3.0.1" dependencies: - "@types/sinon-chai": ^3.2.3 - "@types/web3": 1.0.19 + solhint: ^3.4.0 peerDependencies: - "@nomiclabs/hardhat-ethers": ^2.0.0 - ethereum-waffle: ^3.2.0 - ethers: ^5.0.0 hardhat: ^2.0.0 - checksum: 5ccd6614e355f2377c07461126bd8ec7607d7fc0fca166641467992af13fab08628de87c0f6044df6f069850e7497973b3a545bb89d203b4d436c177e29b4efa + checksum: 661a3e514cc2aa0d00f058262a9b6a07f0380ec4f973030f16a21d53b46f8748b42bfb4aa925e9740f3e2839192d89b0e558e3af17001ab2d3490c924362571c languageName: node linkType: hard @@ -1185,97 +1235,110 @@ __metadata: languageName: node linkType: hard -"@openzeppelin/hardhat-defender@npm:^1.8.1": - version: 1.8.1 - resolution: "@openzeppelin/hardhat-defender@npm:1.8.1" +"@openzeppelin/defender-admin-client@npm:^1.52.0": + version: 1.54.1 + resolution: "@openzeppelin/defender-admin-client@npm:1.54.1" dependencies: - "@openzeppelin/hardhat-upgrades": ^1.20.0 - defender-admin-client: ^1.29.0-rc.1 - defender-base-client: ^1.3.1 - ethereumjs-util: ^7.1.5 - checksum: 1d871943c69f23969ad28cfd424dba0293452aeaa14a60325d1afa01a66d0b433891e440fb2bf01000d6d3468cab59cb5a8c5ae1867ed3d4751137bd4bbd3fc7 + "@openzeppelin/defender-base-client": 1.54.1 + axios: ^1.4.0 + ethers: ^5.7.2 + lodash: ^4.17.19 + node-fetch: ^2.6.0 + checksum: c247b38c9fdedc55d01d59b7db7fbe212b1ff5177950a0626010b8df3e298e3cf52e0d46d06cadc95c418f570547864c3d652e42804f4c845b3790de581e3d19 + languageName: node + linkType: hard + +"@openzeppelin/defender-base-client@npm:1.54.1, @openzeppelin/defender-base-client@npm:^1.52.0": + version: 1.54.1 + resolution: "@openzeppelin/defender-base-client@npm:1.54.1" + dependencies: + amazon-cognito-identity-js: ^6.0.1 + async-retry: ^1.3.3 + axios: ^1.4.0 + lodash: ^4.17.19 + node-fetch: ^2.6.0 + checksum: bb44d305b3a7b20ce765bef4c8385c1187f9eca8f2647a99ad55111034da471709e946472ca5f641eb4bd26e1c7ebd19fb9832c29919c36d353a355c009ae98c + languageName: node + linkType: hard + +"@openzeppelin/defender-sdk-base-client@npm:^1.12.0, @openzeppelin/defender-sdk-base-client@npm:^1.8.0": + version: 1.12.0 + resolution: "@openzeppelin/defender-sdk-base-client@npm:1.12.0" + dependencies: + amazon-cognito-identity-js: ^6.3.6 + async-retry: ^1.3.3 + checksum: bd0501fad9fa7830ad65a0b27c1fa2ce2b84b30fd218c3dda7347dfac76d7500ecba75defa100a2d77d775db8606dac56cecccf898593784f8868e69edd9d121 + languageName: node + linkType: hard + +"@openzeppelin/defender-sdk-deploy-client@npm:^1.8.0": + version: 1.12.0 + resolution: "@openzeppelin/defender-sdk-deploy-client@npm:1.12.0" + dependencies: + "@openzeppelin/defender-sdk-base-client": ^1.12.0 + axios: ^1.6.7 + lodash: ^4.17.21 + checksum: 2032c0967bb255a6ada456a84fdc1f90a8199fc57061f4a43df63830ab08ef08981674fb5e897afff20ad2c3f60051dda29d8939e79eba2a54c8302c5fc76869 languageName: node linkType: hard -"@openzeppelin/hardhat-upgrades@npm:^1.20.0": - version: 1.20.0 - resolution: "@openzeppelin/hardhat-upgrades@npm:1.20.0" +"@openzeppelin/hardhat-upgrades@npm:^2.0.0": + version: 2.5.1 + resolution: "@openzeppelin/hardhat-upgrades@npm:2.5.1" dependencies: - "@openzeppelin/upgrades-core": ^1.18.0 + "@openzeppelin/defender-admin-client": ^1.52.0 + "@openzeppelin/defender-base-client": ^1.52.0 + "@openzeppelin/defender-sdk-base-client": ^1.8.0 + "@openzeppelin/defender-sdk-deploy-client": ^1.8.0 + "@openzeppelin/upgrades-core": ^1.31.2 chalk: ^4.1.0 debug: ^4.1.1 + ethereumjs-util: ^7.1.5 proper-lockfile: ^4.1.1 + undici: ^5.14.0 peerDependencies: - "@nomiclabs/hardhat-ethers": ^2.0.0 - "@nomiclabs/hardhat-etherscan": ^3.1.0 - ethers: ^5.0.5 + "@nomicfoundation/hardhat-ethers": ^3.0.0 + "@nomicfoundation/hardhat-verify": ^1.1.0 + ethers: ^6.6.0 hardhat: ^2.0.2 peerDependenciesMeta: - "@nomiclabs/harhdat-etherscan": + "@nomicfoundation/hardhat-verify": optional: true bin: migrate-oz-cli-project: dist/scripts/migrate-oz-cli-project.js - checksum: 7957c1380f296cd6ce1e7d78968bf1954ba2a252a8cb707a7469e8a6ce3a7d173f61974f51aa4bc14a556fbc9f26a899ad5a69523b840b386c66d49dab734ec2 + checksum: d79b63a8abe0a0eb9ab54f1227e26ac4cb8fbb153f11ed7f6cfd8d2a1617166022f1f8a8749005f96b0e86d4e6b3f99994cac6bc985b3d2522bcbfc897ae1704 languageName: node linkType: hard -"@openzeppelin/upgrades-core@npm:^1.18.0, @openzeppelin/upgrades-core@npm:^1.19.1": - version: 1.19.1 - resolution: "@openzeppelin/upgrades-core@npm:1.19.1" +"@openzeppelin/upgrades-core@npm:^1.31.2, @openzeppelin/upgrades-core@npm:^1.32.5": + version: 1.32.6 + resolution: "@openzeppelin/upgrades-core@npm:1.32.6" dependencies: - cbor: ^8.0.0 + cbor: ^9.0.0 chalk: ^4.1.0 - compare-versions: ^5.0.0 + compare-versions: ^6.0.0 debug: ^4.1.1 ethereumjs-util: ^7.0.3 + minimist: ^1.2.7 proper-lockfile: ^4.1.1 - solidity-ast: ^0.4.15 - checksum: 23ce6866c92c2afc39e8765a0e12935c4fbe1582a83ec00e1fa4488dc8d65c0e7db76e97dfd766b3e23639d4b2eafb8baf2444d18fd4a7807602899c930c3b56 - languageName: node - linkType: hard - -"@resolver-engine/core@npm:^0.3.3": - version: 0.3.3 - resolution: "@resolver-engine/core@npm:0.3.3" - dependencies: - debug: ^3.1.0 - is-url: ^1.2.4 - request: ^2.85.0 - checksum: e5ac586da2aeb7e384f6841821e528771fca533bf5cf38d7fd0851733bd9b70939e960459f2b841534ecdca6507c9aff71bd317f7481137d7b1d2e87ba15978a - languageName: node - linkType: hard - -"@resolver-engine/fs@npm:^0.3.3": - version: 0.3.3 - resolution: "@resolver-engine/fs@npm:0.3.3" - dependencies: - "@resolver-engine/core": ^0.3.3 - debug: ^3.1.0 - checksum: 734577b7864c3aceaaa80b4b74c252d92fb14a6f3c46dfc0a2d4658288dce1b38797578dd6a4ecbde88cbc4a366e8bdbc46451e282cb25dde8479548453c37a3 + solidity-ast: ^0.4.51 + bin: + openzeppelin-upgrades-core: dist/cli/cli.js + checksum: 9e7d71ae7960d9bfc81a8c08299acb3a002c0641e112072a7a13a95e928ad467b93c4092af9f37f2fa6d0d6894b98bd5c86f2e305351edf6b301adcc677aae1f languageName: node linkType: hard -"@resolver-engine/imports-fs@npm:^0.3.3": - version: 0.3.3 - resolution: "@resolver-engine/imports-fs@npm:0.3.3" - dependencies: - "@resolver-engine/fs": ^0.3.3 - "@resolver-engine/imports": ^0.3.3 - debug: ^3.1.0 - checksum: d24778788959f8a201bda0a91527cd1703dfbbf3675fd16bd3891046e3f12378be73233bb9d4da19c7247488be38daeab2bdf800317f70553a16fb62208ba2c7 +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f languageName: node linkType: hard -"@resolver-engine/imports@npm:^0.3.3": - version: 0.3.3 - resolution: "@resolver-engine/imports@npm:0.3.3" - dependencies: - "@resolver-engine/core": ^0.3.3 - debug: ^3.1.0 - hosted-git-info: ^2.6.0 - path-browserify: ^1.0.0 - url: ^0.11.0 - checksum: 690cf550fd0608e849fcb9c20a08479ce405173f8d0b09141a5bd140c4ae7c887ebcb0532c4ca64b5c1d3039fe77cc94172b7afb51c1a8fe7722475c429e6944 +"@scure/base@npm:^1.1.1, @scure/base@npm:~1.1.2, @scure/base@npm:~1.1.4": + version: 1.1.6 + resolution: "@scure/base@npm:1.1.6" + checksum: d6deaae91deba99e87939af9e55d80edba302674983f32bba57f942e22b1726a83c62dc50d8f4370a5d5d35a212dda167fb169f4b0d0c297488d8604608fc3d3 languageName: node linkType: hard @@ -1308,6 +1371,28 @@ __metadata: languageName: node linkType: hard +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": ~1.2.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.2 + checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.3": + version: 1.3.3 + resolution: "@scure/bip32@npm:1.3.3" + dependencies: + "@noble/curves": ~1.3.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.4 + checksum: f939ca733972622fcc1e61d4fdf170a0ad294b24ddb7ed7cdd4c467e1ef283b970154cb101cf5f1a7b64cf5337e917ad31135911dfc36b1d76625320167df2fa + languageName: node + linkType: hard + "@scure/bip39@npm:1.1.0": version: 1.1.0 resolution: "@scure/bip39@npm:1.1.0" @@ -1328,8 +1413,18 @@ __metadata: languageName: node linkType: hard -"@sentry/core@npm:5.30.0": - version: 5.30.0 +"@scure/bip39@npm:1.2.2": + version: 1.2.2 + resolution: "@scure/bip39@npm:1.2.2" + dependencies: + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.4 + checksum: cb99505e6d2deef8e55e81df8c563ce8dbfdf1595596dc912bceadcf366c91b05a98130e928ecb090df74efdb20150b64acc4be55bc42768cab4d39a2833d234 + languageName: node + linkType: hard + +"@sentry/core@npm:5.30.0": + version: 5.30.0 resolution: "@sentry/core@npm:5.30.0" dependencies: "@sentry/hub": 5.30.0 @@ -1410,13 +1505,6 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/is@npm:^0.14.0": - version: 0.14.0 - resolution: "@sindresorhus/is@npm:0.14.0" - checksum: 971e0441dd44ba3909b467219a5e242da0fc584048db5324cfb8048148fa8dcc9d44d71e3948972c4f6121d24e5da402ef191420d1266a95f713bb6d6e59c98a - languageName: node - linkType: hard - "@sindresorhus/is@npm:^4.6.0": version: 4.6.0 resolution: "@sindresorhus/is@npm:4.6.0" @@ -1424,25 +1512,16 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.3 - resolution: "@sinonjs/commons@npm:1.8.3" - dependencies: - type-detect: 4.0.8 - checksum: 6159726db5ce6bf9f2297f8427f7ca5b3dff45b31e5cee23496f1fa6ef0bb4eab878b23fb2c5e6446381f6a66aba4968ef2fc255c1180d753d4b8c271636a2e5 - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^7.0.4": - version: 7.0.5 - resolution: "@sinonjs/fake-timers@npm:7.0.5" +"@smithy/types@npm:^2.12.0": + version: 2.12.0 + resolution: "@smithy/types@npm:2.12.0" dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: fcd13fdd3e4f4ddb14df03efc50f4b6845e1a31f76ac986502995a99e116106cb0ccc8d6ca5c696f823d5762f38fe4adcd7008251cfd2dfbbf2d3d819a89fc06 + tslib: ^2.6.2 + checksum: 2dd93746624d87afbf51c22116fc69f82e95004b78cf681c4a283d908155c22a2b7a3afbd64a3aff7deefb6619276f186e212422ad200df3b42c32ef5330374e languageName: node linkType: hard -"@solidity-parser/parser@npm:^0.14.0, @solidity-parser/parser@npm:^0.14.1, @solidity-parser/parser@npm:^0.14.3": +"@solidity-parser/parser@npm:^0.14.1": version: 0.14.3 resolution: "@solidity-parser/parser@npm:0.14.3" dependencies: @@ -1460,12 +1539,17 @@ __metadata: languageName: node linkType: hard -"@szmarczak/http-timer@npm:^1.1.2": - version: 1.1.2 - resolution: "@szmarczak/http-timer@npm:1.1.2" - dependencies: - defer-to-connect: ^1.0.1 - checksum: 4d9158061c5f397c57b4988cde33a163244e4f02df16364f103971957a32886beb104d6180902cbe8b38cb940e234d9f98a4e486200deca621923f62f50a06fe +"@solidity-parser/parser@npm:^0.17.0": + version: 0.17.0 + resolution: "@solidity-parser/parser@npm:0.17.0" + checksum: 2f47732c9a4f6b264ce6c8a0544bd5a0805f824d3c40a8a253e59d5dbe9a98163f55c06460232f57a6b389bb5235c18d0563f94425202ec2f859d88f2378e0ac + languageName: node + linkType: hard + +"@solidity-parser/parser@npm:^0.18.0": + version: 0.18.0 + resolution: "@solidity-parser/parser@npm:0.18.0" + checksum: 970d991529d632862fa88e107531339d84df35bf0374e31e8215ce301b19a01ede33fccf4d374402649814263f8bc278a8e6d62a0129bb877539fbdd16a604cc languageName: node linkType: hard @@ -1495,6 +1579,22 @@ __metadata: languageName: node linkType: hard +"@trufflesuite/uws-js-unofficial@npm:20.30.0-unofficial.0": + version: 20.30.0-unofficial.0 + resolution: "@trufflesuite/uws-js-unofficial@npm:20.30.0-unofficial.0" + dependencies: + bufferutil: 4.0.7 + utf-8-validate: 6.0.3 + ws: 8.13.0 + dependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 67e67140877f89b31c504a057d26853d5780b09c733d92c32480d2f0dfe4e98fb822860f3efeb06f379daecee70d67185f88a7b6f3406d18526e501b36c40fd3 + languageName: node + linkType: hard + "@tsconfig/node10@npm:^1.0.7": version: 1.0.9 resolution: "@tsconfig/node10@npm:1.0.9" @@ -1523,49 +1623,31 @@ __metadata: languageName: node linkType: hard -"@typechain/ethers-v5@npm:^10.1.0": - version: 10.1.0 - resolution: "@typechain/ethers-v5@npm:10.1.0" +"@typechain/ethers-v6@npm:^0.5.0": + version: 0.5.1 + resolution: "@typechain/ethers-v6@npm:0.5.1" dependencies: lodash: ^4.17.15 ts-essentials: ^7.0.1 peerDependencies: - "@ethersproject/abi": ^5.0.0 - "@ethersproject/bytes": ^5.0.0 - "@ethersproject/providers": ^5.0.0 - ethers: ^5.1.3 - typechain: ^8.1.0 - typescript: ">=4.3.0" - checksum: 452ad685ce792ddefebdcb8ae72f4343ed1411f91701250e273c1a0dd79753d0d40f311cff19ec0c4fd6a9b9cf23e55eb9ae1b94cb388fbc54c122ae4d0e6f47 - languageName: node - linkType: hard - -"@typechain/ethers-v5@npm:^2.0.0": - version: 2.0.0 - resolution: "@typechain/ethers-v5@npm:2.0.0" - dependencies: - ethers: ^5.0.2 - peerDependencies: - ethers: ^5.0.0 - typechain: ^3.0.0 - checksum: 785430547f11de358c4018338f6f72aac113ece70d743aad410fff4eacbc3b4876d2e0d3389e1a56123afcf156f5c044ee72275342e45218448c23fe93d23915 + ethers: 6.x + typechain: ^8.3.2 + typescript: ">=4.7.0" + checksum: 44e7970ce95eeb1a02019f8a53bbe30dcb87664e1df15fe436ae48eea1bf91ca72b5b230eac1bdf9cbe9b55bc488b54c6273e6f77155eaeff885fb34cfcd1108 languageName: node linkType: hard -"@typechain/hardhat@npm:^6.1.2": - version: 6.1.2 - resolution: "@typechain/hardhat@npm:6.1.2" +"@typechain/hardhat@npm:^9.1.0": + version: 9.1.0 + resolution: "@typechain/hardhat@npm:9.1.0" dependencies: fs-extra: ^9.1.0 - lodash: ^4.17.15 peerDependencies: - "@ethersproject/abi": ^5.4.7 - "@ethersproject/providers": ^5.4.7 - "@typechain/ethers-v5": ^10.1.0 - ethers: ^5.4.7 + "@typechain/ethers-v6": ^0.5.1 + ethers: ^6.1.0 hardhat: ^2.9.9 - typechain: ^8.1.0 - checksum: 875753de831825c95c30e6792949f38f69fcee888c1936042414c8d030ecc181817cc0f5cbf6f1764f30779b5f840201eb29addda45713fd0b58a71693102a2c + typechain: ^8.3.2 + checksum: a05998ce89bb4a297f233f4489e4af2a3ad0abcedd75392096745a378d7c5bab9650fcd5dd778c9deaf790bf16e3a849b3ed91a6ae916173df6dfc9e574efcbc languageName: node linkType: hard @@ -1576,13 +1658,6 @@ __metadata: languageName: node linkType: hard -"@types/async-eventemitter@npm:^0.2.1": - version: 0.2.1 - resolution: "@types/async-eventemitter@npm:0.2.1" - checksum: 36ba0a6f52082f76b19b9123a2fa0497f94fe15218fa54040cc45f0edff483ec3be93a38c177cd4dab79f5e32333fbdf3682d4dc94197438e86694b1fddd6896 - languageName: node - linkType: hard - "@types/bip39@npm:^3.0.0": version: 3.0.0 resolution: "@types/bip39@npm:3.0.0" @@ -1592,21 +1667,21 @@ __metadata: languageName: node linkType: hard -"@types/bn.js@npm:*, @types/bn.js@npm:^5.1.0": - version: 5.1.0 - resolution: "@types/bn.js@npm:5.1.0" +"@types/bn.js@npm:^4.11.3": + version: 4.11.6 + resolution: "@types/bn.js@npm:4.11.6" dependencies: "@types/node": "*" - checksum: 1dc1cbbd7a1e8bf3614752e9602f558762a901031f499f3055828b5e3e2bba16e5b88c27b3c4152ad795248fbe4086c731a5c4b0f29bb243f1875beeeabee59c + checksum: 7f66f2c7b7b9303b3205a57184261974b114495736b77853af5b18d857c0b33e82ce7146911e86e87a87837de8acae28986716fd381ac7c301fd6e8d8b6c811f languageName: node linkType: hard -"@types/bn.js@npm:^4.11.3, @types/bn.js@npm:^4.11.5": - version: 4.11.6 - resolution: "@types/bn.js@npm:4.11.6" +"@types/bn.js@npm:^5.1.0": + version: 5.1.0 + resolution: "@types/bn.js@npm:5.1.0" dependencies: "@types/node": "*" - checksum: 7f66f2c7b7b9303b3205a57184261974b114495736b77853af5b18d857c0b33e82ce7146911e86e87a87837de8acae28986716fd381ac7c301fd6e8d8b6c811f + checksum: 1dc1cbbd7a1e8bf3614752e9602f558762a901031f499f3055828b5e3e2bba16e5b88c27b3c4152ad795248fbe4086c731a5c4b0f29bb243f1875beeeabee59c languageName: node linkType: hard @@ -1622,6 +1697,15 @@ __metadata: languageName: node linkType: hard +"@types/chai-as-promised@npm:^7.1.3": + version: 7.1.8 + resolution: "@types/chai-as-promised@npm:7.1.8" + dependencies: + "@types/chai": "*" + checksum: f0e5eab451b91bc1e289ed89519faf6591932e8a28d2ec9bbe95826eb73d28fe43713633e0c18706f3baa560a7d97e7c7c20dc53ce639e5d75bac46b2a50bf21 + languageName: node + linkType: hard + "@types/chai@npm:*, @types/chai@npm:^4.3.3": version: 4.3.3 resolution: "@types/chai@npm:4.3.3" @@ -1629,15 +1713,6 @@ __metadata: languageName: node linkType: hard -"@types/concat-stream@npm:^1.6.0": - version: 1.6.1 - resolution: "@types/concat-stream@npm:1.6.1" - dependencies: - "@types/node": "*" - checksum: 7d211e74331affd3578b5469244f5cef84a93775f38332adb3ef12413559a23862bc682c6873d0a404b01c9d5d5f7d3ae091fe835b435b633eb420e3055b3e56 - languageName: node - linkType: hard - "@types/debug@npm:^4.1.7": version: 4.1.7 resolution: "@types/debug@npm:4.1.7" @@ -1647,12 +1722,12 @@ __metadata: languageName: node linkType: hard -"@types/form-data@npm:0.0.33": - version: 0.0.33 - resolution: "@types/form-data@npm:0.0.33" +"@types/debug@npm:^4.1.9": + version: 4.1.12 + resolution: "@types/debug@npm:4.1.12" dependencies: - "@types/node": "*" - checksum: f0c283fdef2dd7191168a37b9cb2625af3cfbd7f72b5a514f938bea0a135669f79d736186d434b9e81150b47ef1bf20d97b188014a00583556fad6ce59fb9bbf + "@types/ms": "*" + checksum: 47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 languageName: node linkType: hard @@ -1771,15 +1846,6 @@ __metadata: languageName: node linkType: hard -"@types/mkdirp@npm:^0.5.2": - version: 0.5.2 - resolution: "@types/mkdirp@npm:0.5.2" - dependencies: - "@types/node": "*" - checksum: 21e6681ee18cee6314dbe0f57ada48981912b76de8266f438ba2573770d60aaa8dd376baad3f20e2346696a7cca84b0aadd1737222341553a0091831a46e6ad1 - languageName: node - linkType: hard - "@types/mocha@npm:^9.1.1": version: 9.1.1 resolution: "@types/mocha@npm:9.1.1" @@ -1794,16 +1860,6 @@ __metadata: languageName: node linkType: hard -"@types/node-fetch@npm:^2.5.5": - version: 2.5.10 - resolution: "@types/node-fetch@npm:2.5.10" - dependencies: - "@types/node": "*" - form-data: ^3.0.0 - checksum: 504d3834083fcbb90dc488618a60d078ff3b018c3c77e649b4990aff6dfafe9e41c82699ed474e01d9df40448240b6b455653d25afeecbc0eacb4154a217c253 - languageName: node - linkType: hard - "@types/node@npm:*, @types/node@npm:^18.7.6": version: 18.7.6 resolution: "@types/node@npm:18.7.6" @@ -1818,10 +1874,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^10.0.3": - version: 10.17.60 - resolution: "@types/node@npm:10.17.60" - checksum: 2cdb3a77d071ba8513e5e8306fa64bf50e3c3302390feeaeff1fd325dd25c8441369715dfc8e3701011a72fed5958c7dfa94eb9239a81b3c286caa4d97db6eef +"@types/node@npm:18.15.13": + version: 18.15.13 + resolution: "@types/node@npm:18.15.13" + checksum: 79cc5a2b5f98e8973061a4260a781425efd39161a0e117a69cd089603964816c1a14025e1387b4590c8e82d05133b7b4154fa53a7dffb3877890a66145e76515 languageName: node linkType: hard @@ -1832,13 +1888,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^8.0.0": - version: 8.10.66 - resolution: "@types/node@npm:8.10.66" - checksum: c52039de862654a139abdc6a51de532a69dd80516ac35a959c3b3a2831ecbaaf065b0df5f9db943f5e28b544ebb9a891730d52b52f7a169b86a82bc060210000 - languageName: node - linkType: hard - "@types/pbkdf2@npm:^3.0.0": version: 3.1.0 resolution: "@types/pbkdf2@npm:3.1.0" @@ -1855,19 +1904,13 @@ __metadata: languageName: node linkType: hard -"@types/qs@npm:^6.2.31": - version: 6.9.7 - resolution: "@types/qs@npm:6.9.7" - checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba - languageName: node - linkType: hard - -"@types/resolve@npm:^0.0.8": - version: 0.0.8 - resolution: "@types/resolve@npm:0.0.8" +"@types/readable-stream@npm:^2.3.13": + version: 2.3.15 + resolution: "@types/readable-stream@npm:2.3.15" dependencies: "@types/node": "*" - checksum: f241bb773ab14b14500623ac3b57c52006ce32b20426b6d8bf2fe5fdc0344f42c77ac0f94ff57b443ae1d320a1a86c62b4e47239f0321699404402fbeb24bad6 + safe-buffer: ~5.1.1 + checksum: ec36f525cad09b6c65a1dafcb5ad99b9e2ed824ec49b7aa23180ac427e5d35b8a0706193ecd79ab4253a283ad485ba03d5917a98daaaa144f0ea34f4823e9d82 languageName: node linkType: hard @@ -1903,25 +1946,6 @@ __metadata: languageName: node linkType: hard -"@types/sinon-chai@npm:^3.2.3": - version: 3.2.5 - resolution: "@types/sinon-chai@npm:3.2.5" - dependencies: - "@types/chai": "*" - "@types/sinon": "*" - checksum: ac332b8f2c9e13f081773a1c01fa12225768879ed310b36ba954982fccdf464fca4c3b852a60b2ca8e232026dd0a386b04f638bc903761c0d33375d9b3e9240f - languageName: node - linkType: hard - -"@types/sinon@npm:*": - version: 10.0.0 - resolution: "@types/sinon@npm:10.0.0" - dependencies: - "@sinonjs/fake-timers": ^7.0.4 - checksum: 7de3199da97ab45a5f85cb553e384a39bc3a867fcf7521ba22a0fe1a9305891715f11964483af0481e837875a883434597a0097923e6e7fbefe1407af6f5bd76 - languageName: node - linkType: hard - "@types/sodium-native@npm:2.3.5": version: 2.3.5 resolution: "@types/sodium-native@npm:2.3.5" @@ -1941,23 +1965,6 @@ __metadata: languageName: node linkType: hard -"@types/underscore@npm:*": - version: 1.11.2 - resolution: "@types/underscore@npm:1.11.2" - checksum: 7f3fac982f790450e8f22018350fdd099358c3f0056c7ae33f8da99d5c6c97d3e73a49e9396bbb47f2aacd25ed9b5b13dab991734586cbec7658295688c6a9e4 - languageName: node - linkType: hard - -"@types/web3@npm:1.0.19": - version: 1.0.19 - resolution: "@types/web3@npm:1.0.19" - dependencies: - "@types/bn.js": "*" - "@types/underscore": "*" - checksum: 25a78e80052cca8abe5edf15c0ae92854d00d1bec15283486a2535ab673345b0be090e39cc9a86822be17ddd812fa76cbfd869be21bb944d2faaf2922e2a836a - languageName: node - linkType: hard - "@types/yargs-parser@npm:*": version: 21.0.0 resolution: "@types/yargs-parser@npm:21.0.0" @@ -2101,13 +2108,6 @@ __metadata: languageName: node linkType: hard -"@yarnpkg/lockfile@npm:^1.1.0": - version: 1.1.0 - resolution: "@yarnpkg/lockfile@npm:1.1.0" - checksum: 05b881b4866a3546861fee756e6d3812776ea47fa6eb7098f983d6d0eefa02e12b66c3fff931574120f196286a7ad4879ce02743c8bb2be36c6a576c7852083a - languageName: node - linkType: hard - "@zilliqa-js/crypto@npm:^3.4.4": version: 3.4.4 resolution: "@zilliqa-js/crypto@npm:3.4.4" @@ -2154,12 +2154,18 @@ __metadata: languageName: node linkType: hard -"abort-controller@npm:^3.0.0": - version: 3.0.0 - resolution: "abort-controller@npm:3.0.0" - dependencies: - event-target-shim: ^5.0.0 - checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 +"abitype@npm:1.0.0": + version: 1.0.0 + resolution: "abitype@npm:1.0.0" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: ea2c0548c3ba58c37a6de7483d63389074da498e63d803b742bbe94eb4eaa1f51a35d000c424058b2583aef56698cf07c696eb3bc4dd0303bc20c6f0826a241a languageName: node linkType: hard @@ -2170,7 +2176,7 @@ __metadata: languageName: node linkType: hard -"abstract-level@npm:^1.0.0, abstract-level@npm:^1.0.2, abstract-level@npm:^1.0.3": +"abstract-level@npm:1.0.3": version: 1.0.3 resolution: "abstract-level@npm:1.0.3" dependencies: @@ -2185,30 +2191,17 @@ __metadata: languageName: node linkType: hard -"abstract-leveldown@npm:3.0.0": - version: 3.0.0 - resolution: "abstract-leveldown@npm:3.0.0" - dependencies: - xtend: ~4.0.0 - checksum: 1d3e65fc2288fd17955df3b0887fdd3d4fa7fcd816062014f872ea12a1e86e886151cbdc36abd2f243a810b7999252eaa30adf636ffe1be3103493ab37277e49 - languageName: node - linkType: hard - -"abstract-leveldown@npm:^2.4.1, abstract-leveldown@npm:~2.7.1": - version: 2.7.2 - resolution: "abstract-leveldown@npm:2.7.2" - dependencies: - xtend: ~4.0.0 - checksum: 97c45a05d8b5d24edf3855c1f9a19f919c4a189e387929745289a53116c80638339a7d4e50ad76d0ad2900166adaeaf2e0350dcdcd453e783cd8f04fd9bea17a - languageName: node - linkType: hard - -"abstract-leveldown@npm:^5.0.0, abstract-leveldown@npm:~5.0.0": - version: 5.0.0 - resolution: "abstract-leveldown@npm:5.0.0" +"abstract-leveldown@npm:7.2.0, abstract-leveldown@npm:^7.2.0": + version: 7.2.0 + resolution: "abstract-leveldown@npm:7.2.0" dependencies: - xtend: ~4.0.0 - checksum: d55d03cc7fad011d5fea30d26504b1a76123ec8edd3623d21f80ce0561c610b7ed1e00eb037c14746ec2b7ad8638586024f11d4a1476beee2c470c8cf27e3586 + buffer: ^6.0.3 + catering: ^2.0.0 + is-buffer: ^2.0.5 + level-concat-iterator: ^3.0.0 + level-supports: ^2.0.1 + queue-microtask: ^1.2.3 + checksum: d558111f2d123da95ac80b8ba3b9b0a5bc8cd87296e64b05dca693f5f4839aa0e2fc97bad56a101766f499824e2962611750f8a76bbac4a5db35801968fbbe02 languageName: node linkType: hard @@ -2225,20 +2218,6 @@ __metadata: languageName: node linkType: hard -"abstract-leveldown@npm:^7.2.0": - version: 7.2.0 - resolution: "abstract-leveldown@npm:7.2.0" - dependencies: - buffer: ^6.0.3 - catering: ^2.0.0 - is-buffer: ^2.0.5 - level-concat-iterator: ^3.0.0 - level-supports: ^2.0.1 - queue-microtask: ^1.2.3 - checksum: d558111f2d123da95ac80b8ba3b9b0a5bc8cd87296e64b05dca693f5f4839aa0e2fc97bad56a101766f499824e2962611750f8a76bbac4a5db35801968fbbe02 - languageName: node - linkType: hard - "abstract-leveldown@npm:~2.6.0": version: 2.6.3 resolution: "abstract-leveldown@npm:2.6.3" @@ -2248,6 +2227,15 @@ __metadata: languageName: node linkType: hard +"abstract-leveldown@npm:~2.7.1": + version: 2.7.2 + resolution: "abstract-leveldown@npm:2.7.2" + dependencies: + xtend: ~4.0.0 + checksum: 97c45a05d8b5d24edf3855c1f9a19f919c4a189e387929745289a53116c80638339a7d4e50ad76d0ad2900166adaeaf2e0350dcdcd453e783cd8f04fd9bea17a + languageName: node + linkType: hard + "abstract-leveldown@npm:~6.2.1": version: 6.2.3 resolution: "abstract-leveldown@npm:6.2.3" @@ -2326,6 +2314,13 @@ __metadata: languageName: node linkType: hard +"aes-js@npm:4.0.0-beta.5": + version: 4.0.0-beta.5 + resolution: "aes-js@npm:4.0.0-beta.5" + checksum: cc2ea969d77df939c32057f7e361b6530aa6cb93cb10617a17a45cd164e6d761002f031ff6330af3e67e58b1f0a3a8fd0b63a720afd591a653b02f649470e15b + languageName: node + linkType: hard + "aes-js@npm:^3.1.1": version: 3.1.2 resolution: "aes-js@npm:3.1.2" @@ -2363,7 +2358,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.6.1, ajv@npm:^6.9.1": +"ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.6, ajv@npm:^6.6.1, ajv@npm:^6.9.1": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -2387,16 +2382,16 @@ __metadata: languageName: node linkType: hard -"amazon-cognito-identity-js@npm:^4.3.3": - version: 4.6.3 - resolution: "amazon-cognito-identity-js@npm:4.6.3" +"amazon-cognito-identity-js@npm:^6.0.1, amazon-cognito-identity-js@npm:^6.3.6": + version: 6.3.13 + resolution: "amazon-cognito-identity-js@npm:6.3.13" dependencies: + "@aws-crypto/sha256-js": 1.2.2 buffer: 4.9.2 - crypto-js: ^4.0.0 fast-base64-decode: ^1.0.0 isomorphic-unfetch: ^3.0.0 js-cookie: ^2.2.1 - checksum: 78d34a60e1a3e650b696b8b7b6153faee4b73f9828777b01326316c66377e3ba4175a4b5c29fb084f0fd35222e9133b29fc20930232f8cebbd77a01720ad9f3e + checksum: 8a608ef1b99fca57d87103ceb2706d38e499a548d7724f194d50a709fa564ec63dbc703ded6a106e112d5443d06859f40e242815c25c465fdee4806bbce79459 languageName: node linkType: hard @@ -2407,6 +2402,15 @@ __metadata: languageName: node linkType: hard +"ansi-align@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-align@npm:3.0.1" + dependencies: + string-width: ^4.1.0 + checksum: 6abfa08f2141d231c257162b15292467081fa49a208593e055c866aa0455b57f3a86b5a678c190c618faa79b4c59e254493099cb700dd9cf2293c6be2c8f5d8d + languageName: node + linkType: hard + "ansi-colors@npm:3.2.3": version: 3.2.3 resolution: "ansi-colors@npm:3.2.3" @@ -2437,13 +2441,6 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^2.0.0": - version: 2.1.1 - resolution: "ansi-regex@npm:2.1.1" - checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 - languageName: node - linkType: hard - "ansi-regex@npm:^3.0.0": version: 3.0.0 resolution: "ansi-regex@npm:3.0.0" @@ -2465,10 +2462,10 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^2.2.1": - version: 2.2.1 - resolution: "ansi-styles@npm:2.2.1" - checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 languageName: node linkType: hard @@ -2490,6 +2487,13 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + "antlr4@npm:4.7.1": version: 4.7.1 resolution: "antlr4@npm:4.7.1" @@ -2497,6 +2501,13 @@ __metadata: languageName: node linkType: hard +"antlr4@npm:^4.11.0": + version: 4.13.1 + resolution: "antlr4@npm:4.13.1" + checksum: 76dcb0c8ed2d0b83a16641579668088919f51d1288551604e3cdff46c67955b3eef25892aead9de1eca203b3968536fa952e6931f35ba877780af37971c055f1 + languageName: node + linkType: hard + "antlr4ts@npm:^0.5.0-alpha.4": version: 0.5.0-alpha.4 resolution: "antlr4ts@npm:0.5.0-alpha.4" @@ -2554,45 +2565,6 @@ __metadata: languageName: node linkType: hard -"arr-diff@npm:^4.0.0": - version: 4.0.0 - resolution: "arr-diff@npm:4.0.0" - checksum: ea7c8834842ad3869297f7915689bef3494fd5b102ac678c13ffccab672d3d1f35802b79e90c4cfec2f424af3392e44112d1ccf65da34562ed75e049597276a0 - languageName: node - linkType: hard - -"arr-flatten@npm:^1.1.0": - version: 1.1.0 - resolution: "arr-flatten@npm:1.1.0" - checksum: 963fe12564fca2f72c055f3f6c206b9e031f7c433a0c66ca9858b484821f248c5b1e5d53c8e4989d80d764cd776cf6d9b160ad05f47bdc63022bfd63b5455e22 - languageName: node - linkType: hard - -"arr-union@npm:^3.1.0": - version: 3.1.0 - resolution: "arr-union@npm:3.1.0" - checksum: b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 - languageName: node - linkType: hard - -"array-back@npm:^1.0.3, array-back@npm:^1.0.4": - version: 1.0.4 - resolution: "array-back@npm:1.0.4" - dependencies: - typical: ^2.6.0 - checksum: 37a8be4cd4920b3d07bdbef40dae83bb37948f5d49601da98a6e48ba5496e9a0008e7f3f2184bcf4d3501bd371a048c9bdca7dc3cc5c3d5b1eb189bbba7b55db - languageName: node - linkType: hard - -"array-back@npm:^2.0.0": - version: 2.0.0 - resolution: "array-back@npm:2.0.0" - dependencies: - typical: ^2.6.1 - checksum: ab36ab3504b25116b47541fb0ac78ff13d1e991f33d98c361edd3aada3ed818a900b619bd67b195dd4e41b9256c27e8cdd6a69ece507e482f1207d07670ed6bd - languageName: node - linkType: hard - "array-back@npm:^3.0.1, array-back@npm:^3.1.0": version: 3.1.0 resolution: "array-back@npm:3.1.0" @@ -2607,6 +2579,16 @@ __metadata: languageName: node linkType: hard +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.5 + is-array-buffer: ^3.0.4 + checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e + languageName: node + linkType: hard + "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -2634,17 +2616,17 @@ __metadata: languageName: node linkType: hard -"array-uniq@npm:1.0.3": - version: 1.0.3 - resolution: "array-uniq@npm:1.0.3" - checksum: 1625f06b093d8bf279b81adfec6e72951c0857d65b5e3f65f053fffe9f9dd61c2fc52cff57e38a4700817e7e3f01a4faa433d505ea9e33cdae4514c334e0bf9e - languageName: node - linkType: hard - -"array-unique@npm:^0.3.2": - version: 0.3.2 - resolution: "array-unique@npm:0.3.2" - checksum: da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 +"array.prototype.findlast@npm:^1.2.2": + version: 1.2.5 + resolution: "array.prototype.findlast@npm:1.2.5" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-shim-unscopables: ^1.0.2 + checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446 languageName: node linkType: hard @@ -2660,6 +2642,22 @@ __metadata: languageName: node linkType: hard +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + call-bind: ^1.0.5 + define-properties: ^1.2.1 + es-abstract: ^1.22.3 + es-errors: ^1.2.1 + get-intrinsic: ^1.2.3 + is-array-buffer: ^3.0.4 + is-shared-array-buffer: ^1.0.2 + checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e + languageName: node + linkType: hard + "arrify@npm:^1.0.0": version: 1.0.1 resolution: "arrify@npm:1.0.1" @@ -2667,13 +2665,6 @@ __metadata: languageName: node linkType: hard -"asap@npm:~2.0.6": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d - languageName: node - linkType: hard - "asn1.js@npm:^5.2.0": version: 5.4.1 resolution: "asn1.js@npm:5.4.1" @@ -2709,14 +2700,7 @@ __metadata: languageName: node linkType: hard -"assign-symbols@npm:^1.0.0": - version: 1.0.0 - resolution: "assign-symbols@npm:1.0.0" - checksum: c0eb895911d05b6b2d245154f70461c5e42c107457972e5ebba38d48967870dee53bcdf6c7047990586daa80fab8dab3cc6300800fbd47b454247fdedd859a2c - languageName: node - linkType: hard - -"ast-parents@npm:0.0.1": +"ast-parents@npm:0.0.1, ast-parents@npm:^0.0.1": version: 0.0.1 resolution: "ast-parents@npm:0.0.1" checksum: 51360afb9f7b939eb0330fdd0d5d855d0242f273f63478d30d9053069120492173719fb3c03ba372bccf1a7c1a9041c3c6bf2ab700de8c0f8c14792b045c3b23 @@ -2737,7 +2721,7 @@ __metadata: languageName: node linkType: hard -"async-eventemitter@npm:^0.2.2, async-eventemitter@npm:^0.2.4": +"async-eventemitter@npm:0.2.4": version: 0.2.4 resolution: "async-eventemitter@npm:0.2.4" dependencies: @@ -2769,16 +2753,7 @@ __metadata: languageName: node linkType: hard -"async@npm:2.6.2": - version: 2.6.2 - resolution: "async@npm:2.6.2" - dependencies: - lodash: ^4.17.11 - checksum: e5e90a3bcc4d9bf964bfc6b77d63b8f5bee8c14e9a51c3317dbcace44d5b6b1fe01cd4fd347449704a107da7fcd25e1382ee8545957b2702782ae720605cf7a4 - languageName: node - linkType: hard - -"async@npm:^2.0.1, async@npm:^2.1.2, async@npm:^2.4.0, async@npm:^2.5.0, async@npm:^2.6.1": +"async@npm:^2.0.1, async@npm:^2.4.0": version: 2.6.3 resolution: "async@npm:2.6.3" dependencies: @@ -2808,15 +2783,6 @@ __metadata: languageName: node linkType: hard -"atob@npm:^2.1.2": - version: 2.1.2 - resolution: "atob@npm:2.1.2" - bin: - atob: bin/atob.js - checksum: dfeeeb70090c5ebea7be4b9f787f866686c645d9f39a0d184c817252d0cf08455ed25267d79c03254d3be1f03ac399992a792edcd5ffb9c91e097ab5ef42833a - languageName: node - linkType: hard - "available-typed-arrays@npm:^1.0.5": version: 1.0.5 resolution: "available-typed-arrays@npm:1.0.5" @@ -2824,6 +2790,15 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: ^1.0.0 + checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 + languageName: node + linkType: hard + "aws-sign2@npm:~0.7.0": version: 0.7.0 resolution: "aws-sign2@npm:0.7.0" @@ -2838,650 +2813,14 @@ __metadata: languageName: node linkType: hard -"axios@npm:^0.21.2": - version: 0.21.4 - resolution: "axios@npm:0.21.4" - dependencies: - follow-redirects: ^1.14.0 - checksum: 44245f24ac971e7458f3120c92f9d66d1fc695e8b97019139de5b0cc65d9b8104647db01e5f46917728edfc0cfd88eb30fc4c55e6053eef4ace76768ce95ff3c - languageName: node - linkType: hard - -"babel-code-frame@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-code-frame@npm:6.26.0" +"axios@npm:^1.4.0, axios@npm:^1.6.7": + version: 1.6.8 + resolution: "axios@npm:1.6.8" dependencies: - chalk: ^1.1.3 - esutils: ^2.0.2 - js-tokens: ^3.0.2 - checksum: 9410c3d5a921eb02fa409675d1a758e493323a49e7b9dddb7a2a24d47e61d39ab1129dd29f9175836eac9ce8b1d4c0a0718fcdc57ce0b865b529fd250dbab313 - languageName: node - linkType: hard - -"babel-core@npm:^6.0.14, babel-core@npm:^6.26.0": - version: 6.26.3 - resolution: "babel-core@npm:6.26.3" - dependencies: - babel-code-frame: ^6.26.0 - babel-generator: ^6.26.0 - babel-helpers: ^6.24.1 - babel-messages: ^6.23.0 - babel-register: ^6.26.0 - babel-runtime: ^6.26.0 - babel-template: ^6.26.0 - babel-traverse: ^6.26.0 - babel-types: ^6.26.0 - babylon: ^6.18.0 - convert-source-map: ^1.5.1 - debug: ^2.6.9 - json5: ^0.5.1 - lodash: ^4.17.4 - minimatch: ^3.0.4 - path-is-absolute: ^1.0.1 - private: ^0.1.8 - slash: ^1.0.0 - source-map: ^0.5.7 - checksum: 3d6a37e5c69ea7f7d66c2a261cbd7219197f2f938700e6ebbabb6d84a03f2bf86691ffa066866dcb49ba6c4bd702d347c9e0e147660847d709705cf43c964752 - languageName: node - linkType: hard - -"babel-generator@npm:^6.26.0": - version: 6.26.1 - resolution: "babel-generator@npm:6.26.1" - dependencies: - babel-messages: ^6.23.0 - babel-runtime: ^6.26.0 - babel-types: ^6.26.0 - detect-indent: ^4.0.0 - jsesc: ^1.3.0 - lodash: ^4.17.4 - source-map: ^0.5.7 - trim-right: ^1.0.1 - checksum: 5397f4d4d1243e7157e3336be96c10fcb1f29f73bf2d9842229c71764d9a6431397d249483a38c4d8b1581459e67be4df6f32d26b1666f02d0f5bfc2c2f25193 - languageName: node - linkType: hard - -"babel-helper-builder-binary-assignment-operator-visitor@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-builder-binary-assignment-operator-visitor@npm:6.24.1" - dependencies: - babel-helper-explode-assignable-expression: ^6.24.1 - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 6ef49597837d042980e78284df014972daac7f1f1f2635d978bb2d13990304322f5135f27b8f2d6eb8c4c2459b496ec76e21544e26afbb5dec88f53089e17476 - languageName: node - linkType: hard - -"babel-helper-call-delegate@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-call-delegate@npm:6.24.1" - dependencies: - babel-helper-hoist-variables: ^6.24.1 - babel-runtime: ^6.22.0 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: b6277d6e48c10cf416632f6dfbac77bdf6ba8ec4ac2f6359a77d6b731dae941c2a3ec7f35e1eba78aad2a7e0838197731d1ef75af529055096c4cb7d96432c88 - languageName: node - linkType: hard - -"babel-helper-define-map@npm:^6.24.1": - version: 6.26.0 - resolution: "babel-helper-define-map@npm:6.26.0" - dependencies: - babel-helper-function-name: ^6.24.1 - babel-runtime: ^6.26.0 - babel-types: ^6.26.0 - lodash: ^4.17.4 - checksum: 08e201eb009a7dbd020232fb7468ac772ebb8cfd33ec9a41113a54f4c90fd1e3474497783d635b8f87d797706323ca0c1758c516a630b0c95277112fc2fe4f13 - languageName: node - linkType: hard - -"babel-helper-explode-assignable-expression@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-explode-assignable-expression@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: 1bafdb51ce3dd95cf25d712d24a0c3c2ae02ff58118c77462f14ede4d8161aaee42c5c759c3d3a3344a5851b8b0f8d16b395713413b8194e1c3264fc5b12b754 - languageName: node - linkType: hard - -"babel-helper-function-name@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-function-name@npm:6.24.1" - dependencies: - babel-helper-get-function-arity: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: d651db9e0b29e135877e90e7858405750a684220d22a6f7c78bb163305a1b322cc1c8bea1bc617625c34d92d0927fdbaa49ee46822e2f86b524eced4c88c7ff0 - languageName: node - linkType: hard - -"babel-helper-get-function-arity@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-get-function-arity@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 37e344d6c5c00b67a3b378490a5d7ba924bab1c2ccd6ecf1b7da96ca679be12d75fbec6279366ae9772e482fb06a7b48293954dd79cbeba9b947e2db67252fbd - languageName: node - linkType: hard - -"babel-helper-hoist-variables@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-hoist-variables@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 6af1c165d5f0ad192df07daa194d13de77572bd914d2fc9a270d56b93b2705d98eebabf412b1211505535af131fbe95886fcfad8b3a07b4d501c24b9cb8e57fe - languageName: node - linkType: hard - -"babel-helper-optimise-call-expression@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-optimise-call-expression@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 16e6aba819b473dbf013391f759497df9f57bc7060bc4e5f7f6b60fb03670eb1dec65dd2227601d58f151e9d647e1f676a12466f5e6674379978820fa02c0fbb - languageName: node - linkType: hard - -"babel-helper-regex@npm:^6.24.1": - version: 6.26.0 - resolution: "babel-helper-regex@npm:6.26.0" - dependencies: - babel-runtime: ^6.26.0 - babel-types: ^6.26.0 - lodash: ^4.17.4 - checksum: ab949a4c90ab255abaafd9ec11a4a6dc77dba360875af2bb0822b699c058858773792c1e969c425c396837f61009f30c9ee5ba4b9a8ca87b0779ae1622f89fb3 - languageName: node - linkType: hard - -"babel-helper-remap-async-to-generator@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-remap-async-to-generator@npm:6.24.1" - dependencies: - babel-helper-function-name: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: f330943104b61e7f9248d222bd5fe5d3238904ee20643b76197571e14a724723d64a8096b292a60f64788f0efe30176882c376eeebde00657925678e304324f0 - languageName: node - linkType: hard - -"babel-helper-replace-supers@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helper-replace-supers@npm:6.24.1" - dependencies: - babel-helper-optimise-call-expression: ^6.24.1 - babel-messages: ^6.23.0 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: ca1d216c5c6afc6af2ef55ea16777ba99e108780ea25da61d93edb09fd85f5e96c756306e2a21e737c3b0c7a16c99762b62a0e5f529d3865b14029fef7351cba - languageName: node - linkType: hard - -"babel-helpers@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-helpers@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - checksum: 751c6010e18648eebae422adfea5f3b5eff70d592d693bfe0f53346227d74b38e6cd2553c4c18de1e64faac585de490eccbd3ab86ba0885bdac42ed4478bc6b0 - languageName: node - linkType: hard - -"babel-messages@npm:^6.23.0": - version: 6.23.0 - resolution: "babel-messages@npm:6.23.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: c8075c17587a33869e1a5bd0a5b73bbe395b68188362dacd5418debbc7c8fd784bcd3295e81ee7e410dc2c2655755add6af03698c522209f6a68334c15e6d6ca - languageName: node - linkType: hard - -"babel-plugin-check-es2015-constants@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-check-es2015-constants@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 39168cb4ff078911726bfaf9d111d1e18f3e99d8b6f6101d343249b28346c3869e415c97fe7e857e7f34b913f8a052634b2b9dcfb4c0272e5f64ed22df69c735 - languageName: node - linkType: hard - -"babel-plugin-syntax-async-functions@npm:^6.8.0": - version: 6.13.0 - resolution: "babel-plugin-syntax-async-functions@npm:6.13.0" - checksum: e982d9756869fa83eb6a4502490a90b0d31e8a41e2ee582045934f022ac8ff5fa6a3386366976fab3a391d5a7ab8ea5f9da623f35ed8ab328b8ab6d9b2feb1d3 - languageName: node - linkType: hard - -"babel-plugin-syntax-exponentiation-operator@npm:^6.8.0": - version: 6.13.0 - resolution: "babel-plugin-syntax-exponentiation-operator@npm:6.13.0" - checksum: cbcb3aeae7005240325f72d55c3c90575033123e8a1ddfa6bf9eac4ee7e246c2a23f5b5ab1144879590d947a3ed1d88838169d125e5d7c4f53678526482b020e - languageName: node - linkType: hard - -"babel-plugin-syntax-trailing-function-commas@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-syntax-trailing-function-commas@npm:6.22.0" - checksum: d8b9039ded835bb128e8e14eeeb6e0ac2a876b85250924bdc3a8dc2a6984d3bfade4de04d40fb15ea04a86d561ac280ae0d7306d7d4ef7a8c52c43b6a23909c6 - languageName: node - linkType: hard - -"babel-plugin-transform-async-to-generator@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-async-to-generator@npm:6.24.1" - dependencies: - babel-helper-remap-async-to-generator: ^6.24.1 - babel-plugin-syntax-async-functions: ^6.8.0 - babel-runtime: ^6.22.0 - checksum: ffe8b4b2ed6db1f413ede385bd1a36f39e02a64ed79ce02779440049af75215c98f8debdc70eb01430bfd889f792682b0136576fe966f7f9e1b30e2a54695a8d - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-arrow-functions@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-transform-es2015-arrow-functions@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 746e2be0fed20771c07f0984ba79ef0bab37d6e98434267ec96cef57272014fe53a180bfb9047bf69ed149d367a2c97baad54d6057531cd037684f371aab2333 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-block-scoped-functions@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-transform-es2015-block-scoped-functions@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: f251611f723d94b4068d2a873a2783e019bd81bd7144cfdbcfc31ef166f4d82fa2f1efba64342ba2630dab93a2b12284067725c0aa08315712419a2bc3b92a75 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-block-scoping@npm:^6.23.0": - version: 6.26.0 - resolution: "babel-plugin-transform-es2015-block-scoping@npm:6.26.0" - dependencies: - babel-runtime: ^6.26.0 - babel-template: ^6.26.0 - babel-traverse: ^6.26.0 - babel-types: ^6.26.0 - lodash: ^4.17.4 - checksum: 5e4dee33bf4aab0ce7751a9ae845c25d3bf03944ffdfc8d784e1de2123a3eec19657dd59274c9969461757f5e2ab75c517e978bafe5309a821a41e278ad38a63 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-classes@npm:^6.23.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-classes@npm:6.24.1" - dependencies: - babel-helper-define-map: ^6.24.1 - babel-helper-function-name: ^6.24.1 - babel-helper-optimise-call-expression: ^6.24.1 - babel-helper-replace-supers: ^6.24.1 - babel-messages: ^6.23.0 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: 999392b47a83cf9297e49fbde00bc9b15fb6d71bc041f7b3d621ac45361486ec4b66f55c47f98dca6c398ceaa8bfc9f3c21257854822c4523e7475a92e6c000a - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-computed-properties@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-computed-properties@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - checksum: 34e466bfd4b021aa3861db66cf10a9093fa6a4fcedbc8c82a55f6ca1fcbd212a9967f2df6c5f9e9a20046fa43c8967633a476f2bbc15cb8d3769cbba948a5c16 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-destructuring@npm:^6.23.0": - version: 6.23.0 - resolution: "babel-plugin-transform-es2015-destructuring@npm:6.23.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 1343d27f09846e6e1e48da7b83d0d4f2d5571559c468ad8ad4c3715b8ff3e21b2d553e90ad420dc6840de260b7f3b9f9c057606d527e3d838a52a3a7c5fffdbe - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-duplicate-keys@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-duplicate-keys@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 756a7a13517c3e80c8312137b9872b9bc32fbfbb905e9f1e45bf321e2b464d0e6a6e6deca22c61b62377225bd8136b73580897cccb394995d6e00bc8ce882ba4 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-for-of@npm:^6.23.0": - version: 6.23.0 - resolution: "babel-plugin-transform-es2015-for-of@npm:6.23.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 0124e320c32b25de84ddaba951a6f0ad031fa5019de54de32bd317d2a97b3f967026008f32e8c88728330c1cce7c4f1d0ecb15007020d50bd5ca1438a882e205 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-function-name@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-function-name@npm:6.24.1" - dependencies: - babel-helper-function-name: ^6.24.1 - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 629ecd824d53ec973a3ef85e74d9fd8c710203084ca2f7ac833879ddfa3b83a28f0270fe2ee5f3b8c078bb4b3e4b843173a646a7cd4abc49e8c1c563d31fb711 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-literals@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-transform-es2015-literals@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 40e270580a0236990f2555f5dc7ae24b4db9f4709ca455ed1a6724b0078592482274be7448579b14122bd06481641a38e7b2e48d0b49b8c81c88e154a26865b4 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-modules-amd@npm:^6.22.0, babel-plugin-transform-es2015-modules-amd@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-modules-amd@npm:6.24.1" - dependencies: - babel-plugin-transform-es2015-modules-commonjs: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - checksum: 084c7a1ef3bd0b2b9f4851b27cfb65f8ea1408349af05b4d88f994c23844a0754abfa4799bbc5f3f0ec94232b3a54a2e46d7f1dff1bdd40fa66a46f645197dfa - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-modules-commonjs@npm:^6.23.0, babel-plugin-transform-es2015-modules-commonjs@npm:^6.24.1": - version: 6.26.2 - resolution: "babel-plugin-transform-es2015-modules-commonjs@npm:6.26.2" - dependencies: - babel-plugin-transform-strict-mode: ^6.24.1 - babel-runtime: ^6.26.0 - babel-template: ^6.26.0 - babel-types: ^6.26.0 - checksum: 9cd93a84037855c1879bcc100229bee25b44c4805a9a9f040e8927f772c4732fa17a0706c81ea0db77b357dd9baf84388eec03ceb36597932c48fe32fb3d4171 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-modules-systemjs@npm:^6.23.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-modules-systemjs@npm:6.24.1" - dependencies: - babel-helper-hoist-variables: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - checksum: b34877e201d7b4d293d87c04962a3575fe7727a9593e99ce3a7f8deea3da8883a08bd87a6a12927083ac26f47f6944a31cdbfe3d6eb4d18dd884cb2d304ee943 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-modules-umd@npm:^6.23.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-modules-umd@npm:6.24.1" - dependencies: - babel-plugin-transform-es2015-modules-amd: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - checksum: 735857b9f2ad0c41ceda31a1594fe2a063025f4428f9e243885a437b5bd415aca445a5e8495ff34b7120617735b1c3a2158033f0be23f1f5a90e655fff742a01 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-object-super@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-object-super@npm:6.24.1" - dependencies: - babel-helper-replace-supers: ^6.24.1 - babel-runtime: ^6.22.0 - checksum: 97b2968f699ac94cb55f4f1e7ea53dc9e4264ec99cab826f40f181da9f6db5980cd8b4985f05c7b6f1e19fbc31681e6e63894dfc5ecf4b3a673d736c4ef0f9db - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-parameters@npm:^6.23.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-parameters@npm:6.24.1" - dependencies: - babel-helper-call-delegate: ^6.24.1 - babel-helper-get-function-arity: ^6.24.1 - babel-runtime: ^6.22.0 - babel-template: ^6.24.1 - babel-traverse: ^6.24.1 - babel-types: ^6.24.1 - checksum: bb6c047dc10499be8ccebdffac22c77f14aee5d3106da8f2e96c801d2746403c809d8c6922e8ebd2eb31d8827b4bb2321ba43378fcdc9dca206417bb345c4f93 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-shorthand-properties@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-shorthand-properties@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 9302c5de158a28432e932501a783560094c624c3659f4e0a472b6b2e9d6e8ab2634f82ef74d3e75363d46ccff6aad119267dbc34f67464c70625e24a651ad9e5 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-spread@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-transform-es2015-spread@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 8694a8a7802d905503194ab81c155354b36d39fc819ad2148f83146518dd37d2c6926c8568712f5aa890169afc9353fd4bcc49397959c6dc9da3480b449c0ae9 - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-sticky-regex@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-sticky-regex@npm:6.24.1" - dependencies: - babel-helper-regex: ^6.24.1 - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: d9c45401caf0d74779a1170e886976d4c865b7de2e90dfffc7557481b9e73b6e37e9f1028aa07b813896c4df88f4d7e89968249a74547c7875e6c499c90c801d - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-template-literals@npm:^6.22.0": - version: 6.22.0 - resolution: "babel-plugin-transform-es2015-template-literals@npm:6.22.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 4fad2b7b383a2e784858ee7bf837419ee8ff9602afe218e1472f8c33a0c008f01d06f23ff2f2322fb23e1ed17e37237a818575fe88ecc5417d85331973b0ea4d - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-typeof-symbol@npm:^6.23.0": - version: 6.23.0 - resolution: "babel-plugin-transform-es2015-typeof-symbol@npm:6.23.0" - dependencies: - babel-runtime: ^6.22.0 - checksum: 68a1609c6abcddf5f138c56bafcd9fad7c6b3b404fe40910148ab70eb21d6c7807a343a64eb81ce45daf4b70c384c528c55fad45e0d581e4b09efa4d574a6a1b - languageName: node - linkType: hard - -"babel-plugin-transform-es2015-unicode-regex@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-es2015-unicode-regex@npm:6.24.1" - dependencies: - babel-helper-regex: ^6.24.1 - babel-runtime: ^6.22.0 - regexpu-core: ^2.0.0 - checksum: 739ddb02e5f77904f83ea45323c9a636e3aed34b2a49c7c68208b5f2834eecb6b655e772f870f16a7aaf09ac8219f754ad69d61741d088f5b681d13cda69265d - languageName: node - linkType: hard - -"babel-plugin-transform-exponentiation-operator@npm:^6.22.0": - version: 6.24.1 - resolution: "babel-plugin-transform-exponentiation-operator@npm:6.24.1" - dependencies: - babel-helper-builder-binary-assignment-operator-visitor: ^6.24.1 - babel-plugin-syntax-exponentiation-operator: ^6.8.0 - babel-runtime: ^6.22.0 - checksum: 533ad53ba2cd6ff3c0f751563e1beea429c620038dc2efeeb8348ab4752ebcc95d1521857abfd08047400f1921b2d4df5e0cd266e65ddbe4c3edc58b9ad6fd3c - languageName: node - linkType: hard - -"babel-plugin-transform-regenerator@npm:^6.22.0": - version: 6.26.0 - resolution: "babel-plugin-transform-regenerator@npm:6.26.0" - dependencies: - regenerator-transform: ^0.10.0 - checksum: 41a51d8f692bf4a5cbd705fa70f3cb6abebae66d9ba3dccfb5921da262f8c30f630e1fe9f7b132e29b96fe0d99385a801f6aa204278c5bd0af4284f7f93a665a - languageName: node - linkType: hard - -"babel-plugin-transform-strict-mode@npm:^6.24.1": - version: 6.24.1 - resolution: "babel-plugin-transform-strict-mode@npm:6.24.1" - dependencies: - babel-runtime: ^6.22.0 - babel-types: ^6.24.1 - checksum: 32d70ce9d8c8918a6a840e46df03dfe1e265eb9b25df5a800fedb5065ef1b4b5f24d7c62d92fca0e374db8b0b9b6f84e68edd02ad21883d48f608583ec29f638 - languageName: node - linkType: hard - -"babel-preset-env@npm:^1.7.0": - version: 1.7.0 - resolution: "babel-preset-env@npm:1.7.0" - dependencies: - babel-plugin-check-es2015-constants: ^6.22.0 - babel-plugin-syntax-trailing-function-commas: ^6.22.0 - babel-plugin-transform-async-to-generator: ^6.22.0 - babel-plugin-transform-es2015-arrow-functions: ^6.22.0 - babel-plugin-transform-es2015-block-scoped-functions: ^6.22.0 - babel-plugin-transform-es2015-block-scoping: ^6.23.0 - babel-plugin-transform-es2015-classes: ^6.23.0 - babel-plugin-transform-es2015-computed-properties: ^6.22.0 - babel-plugin-transform-es2015-destructuring: ^6.23.0 - babel-plugin-transform-es2015-duplicate-keys: ^6.22.0 - babel-plugin-transform-es2015-for-of: ^6.23.0 - babel-plugin-transform-es2015-function-name: ^6.22.0 - babel-plugin-transform-es2015-literals: ^6.22.0 - babel-plugin-transform-es2015-modules-amd: ^6.22.0 - babel-plugin-transform-es2015-modules-commonjs: ^6.23.0 - babel-plugin-transform-es2015-modules-systemjs: ^6.23.0 - babel-plugin-transform-es2015-modules-umd: ^6.23.0 - babel-plugin-transform-es2015-object-super: ^6.22.0 - babel-plugin-transform-es2015-parameters: ^6.23.0 - babel-plugin-transform-es2015-shorthand-properties: ^6.22.0 - babel-plugin-transform-es2015-spread: ^6.22.0 - babel-plugin-transform-es2015-sticky-regex: ^6.22.0 - babel-plugin-transform-es2015-template-literals: ^6.22.0 - babel-plugin-transform-es2015-typeof-symbol: ^6.23.0 - babel-plugin-transform-es2015-unicode-regex: ^6.22.0 - babel-plugin-transform-exponentiation-operator: ^6.22.0 - babel-plugin-transform-regenerator: ^6.22.0 - browserslist: ^3.2.6 - invariant: ^2.2.2 - semver: ^5.3.0 - checksum: 6e459a6c76086a2a377707680148b94c3d0aba425b039b427ca01171ebada7f5db5d336b309548462f6ba015e13176a4724f912875c15084d4aa88d77020d185 - languageName: node - linkType: hard - -"babel-register@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-register@npm:6.26.0" - dependencies: - babel-core: ^6.26.0 - babel-runtime: ^6.26.0 - core-js: ^2.5.0 - home-or-tmp: ^2.0.0 - lodash: ^4.17.4 - mkdirp: ^0.5.1 - source-map-support: ^0.4.15 - checksum: 75d5fe060e4850dbdbd5f56db2928cd0b6b6c93a65ba5f2a991465af4dc3f4adf46d575138f228b2169b1e25e3b4a7cdd16515a355fea41b873321bf56467583 - languageName: node - linkType: hard - -"babel-runtime@npm:^6.18.0, babel-runtime@npm:^6.22.0, babel-runtime@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-runtime@npm:6.26.0" - dependencies: - core-js: ^2.4.0 - regenerator-runtime: ^0.11.0 - checksum: 8aeade94665e67a73c1ccc10f6fd42ba0c689b980032b70929de7a6d9a12eb87ef51902733f8fefede35afea7a5c3ef7e916a64d503446c1eedc9e3284bd3d50 - languageName: node - linkType: hard - -"babel-template@npm:^6.24.1, babel-template@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-template@npm:6.26.0" - dependencies: - babel-runtime: ^6.26.0 - babel-traverse: ^6.26.0 - babel-types: ^6.26.0 - babylon: ^6.18.0 - lodash: ^4.17.4 - checksum: 028dd57380f09b5641b74874a19073c53c4fb3f1696e849575aae18f8c80eaf21db75209057db862f3b893ce2cd9b795d539efa591b58f4a0fb011df0a56fbed - languageName: node - linkType: hard - -"babel-traverse@npm:^6.24.1, babel-traverse@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-traverse@npm:6.26.0" - dependencies: - babel-code-frame: ^6.26.0 - babel-messages: ^6.23.0 - babel-runtime: ^6.26.0 - babel-types: ^6.26.0 - babylon: ^6.18.0 - debug: ^2.6.8 - globals: ^9.18.0 - invariant: ^2.2.2 - lodash: ^4.17.4 - checksum: fca037588d2791ae0409f1b7aa56075b798699cccc53ea04d82dd1c0f97b9e7ab17065f7dd3ecd69101d7874c9c8fd5e0f88fa53abbae1fe94e37e6b81ebcb8d - languageName: node - linkType: hard - -"babel-types@npm:^6.19.0, babel-types@npm:^6.24.1, babel-types@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-types@npm:6.26.0" - dependencies: - babel-runtime: ^6.26.0 - esutils: ^2.0.2 - lodash: ^4.17.4 - to-fast-properties: ^1.0.3 - checksum: d16b0fa86e9b0e4c2623be81d0a35679faff24dd2e43cde4ca58baf49f3e39415a011a889e6c2259ff09e1228e4c3a3db6449a62de59e80152fe1ce7398fde76 - languageName: node - linkType: hard - -"babelify@npm:^7.3.0": - version: 7.3.0 - resolution: "babelify@npm:7.3.0" - dependencies: - babel-core: ^6.0.14 - object-assign: ^4.0.0 - checksum: 4e169606ed0f2ff6f886d2367c72243d36b3b354490ccc916b913f6b4afd14102c91f771d71d485857feb134581dd48702f25431e19b5c7035f474f9898c3c2e - languageName: node - linkType: hard - -"babylon@npm:^6.18.0": - version: 6.18.0 - resolution: "babylon@npm:6.18.0" - bin: - babylon: ./bin/babylon.js - checksum: 0777ae0c735ce1cbfc856d627589ed9aae212b84fb0c03c368b55e6c5d3507841780052808d0ad46e18a2ba516e93d55eeed8cd967f3b2938822dfeccfb2a16d - languageName: node - linkType: hard - -"backoff@npm:^2.5.0": - version: 2.5.0 - resolution: "backoff@npm:2.5.0" - dependencies: - precond: 0.2 - checksum: ccdcf2a26acd9379d0d4f09e3fb3b7ee34dee94f07ab74d1e38b38f89a3675d9f3cbebb142d9c61c655f4c9eb63f1d6ec28cebeb3dc9215efd8fe7cef92725b9 + follow-redirects: ^1.15.6 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: bf007fa4b207d102459300698620b3b0873503c6d47bf5a8f6e43c0c64c90035a4f698b55027ca1958f61ab43723df2781c38a99711848d232cad7accbcdfcdd languageName: node linkType: hard @@ -3508,21 +2847,6 @@ __metadata: languageName: node linkType: hard -"base@npm:^0.11.1": - version: 0.11.2 - resolution: "base@npm:0.11.2" - dependencies: - cache-base: ^1.0.1 - class-utils: ^0.3.5 - component-emitter: ^1.2.1 - define-property: ^1.0.0 - isobject: ^3.0.1 - mixin-deep: ^1.2.0 - pascalcase: ^0.1.1 - checksum: a4a146b912e27eea8f66d09cb0c9eab666f32ce27859a7dfd50f38cd069a2557b39f16dba1bc2aecb3b44bf096738dd207b7970d99b0318423285ab1b1994edd - languageName: node - linkType: hard - "bcrypt-pbkdf@npm:^1.0.0": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" @@ -3553,23 +2877,14 @@ __metadata: languageName: node linkType: hard -"bigint-crypto-utils@npm:^3.0.23": - version: 3.1.4 - resolution: "bigint-crypto-utils@npm:3.1.4" - dependencies: - bigint-mod-arith: ^3.1.0 - checksum: 302511e6743c03936ab32dce086c182efe8f2a2b256d4fec74a783026b11c45f748f247013b9c4eff8671f6519411710bddbe0a007a3564e63f183a8a39de638 - languageName: node - linkType: hard - -"bigint-mod-arith@npm:^3.1.0": - version: 3.1.0 - resolution: "bigint-mod-arith@npm:3.1.0" - checksum: 2dc79460b9eb286d0b007ff8bd0fc1884904b6a13f8119c126efa7a2a6326dc0d668e13c7eb67dc2f81d9f6ad6d5eff8714d8b86ff2c35dbb6156bd02570bb5c +"bigint-crypto-utils@npm:^3.2.2": + version: 3.3.0 + resolution: "bigint-crypto-utils@npm:3.3.0" + checksum: 9598ce57b23f776c8936d44114c9f051e62b5fa654915b664784cbcbacc5aa0485f4479571c51ff58008abb1210c0d6a234853742f07cf84bda890f2a1e01000 languageName: node linkType: hard -"bignumber.js@npm:^9.0.0, bignumber.js@npm:^9.0.1": +"bignumber.js@npm:^9.0.0": version: 9.0.1 resolution: "bignumber.js@npm:9.0.1" checksum: 6e72f6069d9db32fc8d27561164de9f811b15f9144be61f323d8b36150a239eea50c92e20ba38af2ba5e717af10b8ef12db8f9948fe2ff02bf17ede5239d15d3 @@ -3595,19 +2910,6 @@ __metadata: languageName: node linkType: hard -"bip39@npm:2.5.0": - version: 2.5.0 - resolution: "bip39@npm:2.5.0" - dependencies: - create-hash: ^1.1.0 - pbkdf2: ^3.0.9 - randombytes: ^2.0.1 - safe-buffer: ^5.0.1 - unorm: ^1.3.3 - checksum: 26e83583c43a8430afea1c385328b447005c74ddaf997cd8d3e416057f4968360b08ebf7de32374d605295c3abdd7ddd448d8078a2aa3d951735f4499c23875b - languageName: node - linkType: hard - "bip44-constants@npm:^243.0.0": version: 243.0.0 resolution: "bip44-constants@npm:243.0.0" @@ -3622,7 +2924,7 @@ __metadata: languageName: node linkType: hard -"bluebird@npm:^3.5.0, bluebird@npm:^3.5.2": +"bluebird@npm:^3.5.0": version: 3.7.2 resolution: "bluebird@npm:3.7.2" checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef @@ -3636,7 +2938,7 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.10.0, bn.js@npm:^4.11.0, bn.js@npm:^4.11.1, bn.js@npm:^4.11.6, bn.js@npm:^4.11.8, bn.js@npm:^4.11.9, bn.js@npm:^4.8.0": +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.0, bn.js@npm:^4.11.1, bn.js@npm:^4.11.6, bn.js@npm:^4.11.8, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 @@ -3670,6 +2972,22 @@ __metadata: languageName: node linkType: hard +"boxen@npm:^5.1.2": + version: 5.1.2 + resolution: "boxen@npm:5.1.2" + dependencies: + ansi-align: ^3.0.0 + camelcase: ^6.2.0 + chalk: ^4.1.0 + cli-boxes: ^2.2.1 + string-width: ^4.2.2 + type-fest: ^0.20.2 + widest-line: ^3.1.0 + wrap-ansi: ^7.0.0 + checksum: 82d03e42a72576ff235123f17b7c505372fe05c83f75f61e7d4fa4bcb393897ec95ce766fecb8f26b915f0f7a7227d66e5ec7cef43f5b2bd9d3aeed47ec55877 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -3689,24 +3007,6 @@ __metadata: languageName: node linkType: hard -"braces@npm:^2.3.1": - version: 2.3.2 - resolution: "braces@npm:2.3.2" - dependencies: - arr-flatten: ^1.1.0 - array-unique: ^0.3.2 - extend-shallow: ^2.0.1 - fill-range: ^4.0.0 - isobject: ^3.0.1 - repeat-element: ^1.1.2 - snapdragon: ^0.8.1 - snapdragon-node: ^2.0.1 - split-string: ^3.0.2 - to-regex: ^3.0.1 - checksum: e30dcb6aaf4a31c8df17d848aa283a65699782f75ad61ae93ec25c9729c66cf58e66f0000a9fec84e4add1135bb7da40f7cb9601b36bebcfa9ca58e8d5c07de0 - languageName: node - linkType: hard - "braces@npm:^3.0.2, braces@npm:~3.0.2": version: 3.0.2 resolution: "braces@npm:3.0.2" @@ -3723,15 +3023,10 @@ __metadata: languageName: node linkType: hard -"browser-level@npm:^1.0.1": - version: 1.0.1 - resolution: "browser-level@npm:1.0.1" - dependencies: - abstract-level: ^1.0.2 - catering: ^2.1.1 - module-error: ^1.0.2 - run-parallel-limit: ^1.1.0 - checksum: 67fbc77ce832940bfa25073eccff279f512ad56f545deb996a5b23b02316f5e76f4a79d381acc27eda983f5c9a2566aaf9c97e4fdd0748288c4407307537a29b +"brotli-wasm@npm:^2.0.1": + version: 2.0.1 + resolution: "brotli-wasm@npm:2.0.1" + checksum: 3a0506c66ad3a27512deebee3a9c9a0c59cd1dc7de0c1934c37f0a7b8772de8aa22093fb1fb466c8fdd1cd80f99e5a7c814ff1235350853fb1cd4129d99609f5 languageName: node linkType: hard @@ -3806,18 +3101,6 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^3.2.6": - version: 3.2.8 - resolution: "browserslist@npm:3.2.8" - dependencies: - caniuse-lite: ^1.0.30000844 - electron-to-chromium: ^1.3.47 - bin: - browserslist: ./cli.js - checksum: 74d9ab1089a3813f54a7c4f9f6612faa6256799c8e42c7e00e4aae626c17f199049a01707a525a05b1673cd1493936583e51aad295e25249166e7e8fbd0273ba - languageName: node - linkType: hard - "bs58@npm:^4.0.0, bs58@npm:^4.0.1": version: 4.0.1 resolution: "bs58@npm:4.0.1" @@ -3859,15 +3142,6 @@ __metadata: languageName: node linkType: hard -"buffer-xor@npm:^2.0.1": - version: 2.0.2 - resolution: "buffer-xor@npm:2.0.2" - dependencies: - safe-buffer: ^5.1.1 - checksum: 78226fcae9f4a0b4adec69dffc049f26f6bab240dfdd1b3f6fe07c4eb6b90da202ea5c363f98af676156ee39450a06405fddd9e8965f68a5327edcc89dcbe5d0 - languageName: node - linkType: hard - "buffer@npm:4.9.2": version: 4.9.2 resolution: "buffer@npm:4.9.2" @@ -3889,7 +3163,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.0.5, buffer@npm:^5.2.1, buffer@npm:^5.5.0, buffer@npm:^5.6.0": +"buffer@npm:^5.0.5, buffer@npm:^5.5.0, buffer@npm:^5.6.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: @@ -3909,12 +3183,13 @@ __metadata: languageName: node linkType: hard -"busboy@npm:^1.6.0": - version: 1.6.0 - resolution: "busboy@npm:1.6.0" +"bufferutil@npm:4.0.7": + version: 4.0.7 + resolution: "bufferutil@npm:4.0.7" dependencies: - streamsearch: ^1.1.0 - checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: f75aa87e3d1b99b87a95f60a855e63f70af07b57fb8443e75a2ddfef2e47788d130fdd46e3a78fd7e0c10176082b26dfbed970c5b8632e1cc299cafa0e93ce45 languageName: node linkType: hard @@ -3925,25 +3200,6 @@ __metadata: languageName: node linkType: hard -"bytewise-core@npm:^1.2.2": - version: 1.2.3 - resolution: "bytewise-core@npm:1.2.3" - dependencies: - typewise-core: ^1.2 - checksum: e0d28fb7ff5bb6fd9320eef31c6b37e98da3b9a24d9893e2c17e0ee544457e0c76c2d3fc642c99d82daa0f18dcd49e7dce8dcc338711200e9ced79107cb78e8e - languageName: node - linkType: hard - -"bytewise@npm:~1.1.0": - version: 1.1.0 - resolution: "bytewise@npm:1.1.0" - dependencies: - bytewise-core: ^1.2.2 - typewise: ^1.0.3 - checksum: 20d7387ecf8c29adc4740e626fb02eaa27f34ae4c5ca881657d403e792730c0625ba4fed824462b3ddb7d3ebe41b7abbfe24f1cd3bf07cecc5a631f154d2d8d2 - languageName: node - linkType: hard - "cacache@npm:^16.1.0": version: 16.1.3 resolution: "cacache@npm:16.1.3" @@ -3970,23 +3226,6 @@ __metadata: languageName: node linkType: hard -"cache-base@npm:^1.0.1": - version: 1.0.1 - resolution: "cache-base@npm:1.0.1" - dependencies: - collection-visit: ^1.0.0 - component-emitter: ^1.2.1 - get-value: ^2.0.6 - has-value: ^1.0.0 - isobject: ^3.0.1 - set-value: ^2.0.0 - to-object-path: ^0.3.0 - union-value: ^1.0.0 - unset-value: ^1.0.0 - checksum: 9114b8654fe2366eedc390bad0bcf534e2f01b239a888894e2928cb58cdc1e6ea23a73c6f3450dcfd2058aa73a8a981e723cd1e7c670c047bf11afdc65880107 - languageName: node - linkType: hard - "cacheable-lookup@npm:^6.0.4": version: 6.1.0 resolution: "cacheable-lookup@npm:6.1.0" @@ -3994,21 +3233,6 @@ __metadata: languageName: node linkType: hard -"cacheable-request@npm:^6.0.0": - version: 6.1.0 - resolution: "cacheable-request@npm:6.1.0" - dependencies: - clone-response: ^1.0.2 - get-stream: ^5.1.0 - http-cache-semantics: ^4.0.0 - keyv: ^3.0.0 - lowercase-keys: ^2.0.0 - normalize-url: ^4.1.0 - responselike: ^1.0.2 - checksum: b510b237b18d17e89942e9ee2d2a077cb38db03f12167fd100932dfa8fc963424bfae0bfa1598df4ae16c944a5484e43e03df8f32105b04395ee9495e9e4e9f1 - languageName: node - linkType: hard - "cacheable-request@npm:^7.0.2": version: 7.0.2 resolution: "cacheable-request@npm:7.0.2" @@ -4024,16 +3248,6 @@ __metadata: languageName: node linkType: hard -"cachedown@npm:1.0.0": - version: 1.0.0 - resolution: "cachedown@npm:1.0.0" - dependencies: - abstract-leveldown: ^2.4.1 - lru-cache: ^3.2.0 - checksum: ffd229839ca7efbfa14e35321fb8df444421e192bdf7be16048a303d2a24f3ed86cbe6c7a8cca91761423e4c53c3ed1098d337bbb9d3448801d4792172b4ab3e - languageName: node - linkType: hard - "call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": version: 1.0.2 resolution: "call-bind@npm:1.0.2" @@ -4044,6 +3258,19 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + set-function-length: ^1.2.1 + checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 + languageName: node + linkType: hard + "caller-callsite@npm:^2.0.0": version: 2.0.0 resolution: "caller-callsite@npm:2.0.0" @@ -4076,13 +3303,6 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^3.0.0": - version: 3.0.0 - resolution: "camelcase@npm:3.0.0" - checksum: ae4fe1c17c8442a3a345a6b7d2393f028ab7a7601af0c352ad15d1ab97ca75112e19e29c942b2a214898e160194829b68923bce30e018d62149c6d84187f1673 - languageName: node - linkType: hard - "camelcase@npm:^5.0.0": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -4090,50 +3310,53 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.0.0": +"camelcase@npm:^6.0.0, camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30000844": - version: 1.0.30001222 - resolution: "caniuse-lite@npm:1.0.30001222" - checksum: 14a725756db4751131b0e8ff83ae7ddccd779e294fefe7a49a2b1065b57be75e7df83b6752127766874229f6e490ac3974932e6bccfd047f9ab6c422e60d13bd - languageName: node - linkType: hard - -"caseless@npm:^0.12.0, caseless@npm:~0.12.0": +"caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751 languageName: node linkType: hard -"catering@npm:^2.0.0, catering@npm:^2.1.0, catering@npm:^2.1.1": +"catering@npm:^2.0.0, catering@npm:^2.1.0": version: 2.1.1 resolution: "catering@npm:2.1.1" checksum: 205daefa69c935b0c19f3d8f2e0a520dd69aebe9bda55902958003f7c9cff8f967dfb90071b421bd6eb618576f657a89d2bc0986872c9bc04bbd66655e9d4bd6 languageName: node linkType: hard -"cbor@npm:^5.0.2": - version: 5.2.0 - resolution: "cbor@npm:5.2.0" +"cbor@npm:^8.1.0": + version: 8.1.0 + resolution: "cbor@npm:8.1.0" dependencies: - bignumber.js: ^9.0.1 - nofilter: ^1.0.4 - checksum: b3c39dae64370f361526dbec88f51d0f1b47027224cdd21dbd64c228f0fe7eaa945932d349ec5324068a6c6dcdbb1e3b46242852524fd53c526d14cb60514bdc + nofilter: ^3.1.0 + checksum: a90338435dc7b45cc01461af979e3bb6ddd4f2a08584c437586039cd5f2235014c06e49d664295debbfb3514d87b2f06728092ab6aa6175e2e85e9cd7dc0c1fd languageName: node linkType: hard -"cbor@npm:^8.0.0": - version: 8.0.0 - resolution: "cbor@npm:8.0.0" +"cbor@npm:^9.0.0": + version: 9.0.2 + resolution: "cbor@npm:9.0.2" dependencies: - nofilter: ^3.0.2 - checksum: a53199261c531311e813926e249101aac11cef8594edb21715a2968782433902b9cba1939f1c837e59f4ef903d82f3eddfaae8d685c1c6789f3b7ed6f3889ee2 + nofilter: ^3.1.0 + checksum: 925edae7bf964be5a26dba1b7ba6311ac12b6a66234dc958958997a0576cdc740632dc19852a5b84d8a75101936bea1fe122dc22539d6e11f4539c731853ba2e + languageName: node + linkType: hard + +"chai-as-promised@npm:^7.1.1": + version: 7.1.1 + resolution: "chai-as-promised@npm:7.1.1" + dependencies: + check-error: ^1.0.2 + peerDependencies: + chai: ">= 2.1.2 < 5" + checksum: 7262868a5b51a12af4e432838ddf97a893109266a505808e1868ba63a12de7ee1166e9d43b5c501a190c377c1b11ecb9ff8e093c89f097ad96c397e8ec0f8d6a languageName: node linkType: hard @@ -4152,20 +3375,17 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^1.1.3": - version: 1.1.3 - resolution: "chalk@npm:1.1.3" +"chalk@npm:4.1.2, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" dependencies: - ansi-styles: ^2.2.1 - escape-string-regexp: ^1.0.2 - has-ansi: ^2.0.0 - strip-ansi: ^3.0.0 - supports-color: ^2.0.0 - checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc languageName: node linkType: hard -"chalk@npm:^2.0.0, chalk@npm:^2.1.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": +"chalk@npm:^2.0.0, chalk@npm:^2.1.0, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -4186,16 +3406,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -4217,15 +3427,6 @@ __metadata: languageName: node linkType: hard -"checkpoint-store@npm:^1.1.0": - version: 1.1.0 - resolution: "checkpoint-store@npm:1.1.0" - dependencies: - functional-red-black-tree: ^1.0.1 - checksum: 94e921ccb222c7970615e8b2bcd956dbd52f15a1c397af0447dbdef8ecd32ffe342e394d39e55f2912278a460f3736de777b5b57a5baf229c0a6bd04d2465511 - languageName: node - linkType: hard - "chokidar@npm:3.3.0": version: 3.3.0 resolution: "chokidar@npm:3.3.0" @@ -4315,32 +3516,6 @@ __metadata: languageName: node linkType: hard -"class-utils@npm:^0.3.5": - version: 0.3.6 - resolution: "class-utils@npm:0.3.6" - dependencies: - arr-union: ^3.1.0 - define-property: ^0.2.5 - isobject: ^3.0.0 - static-extend: ^0.1.1 - checksum: be108900801e639e50f96a7e4bfa8867c753a7750a7603879f3981f8b0a89cba657497a2d5f40cd4ea557ff15d535a100818bb486baf6e26fe5d7872e75f1078 - languageName: node - linkType: hard - -"classic-level@npm:^1.2.0": - version: 1.2.0 - resolution: "classic-level@npm:1.2.0" - dependencies: - abstract-level: ^1.0.2 - catering: ^2.1.0 - module-error: ^1.0.1 - napi-macros: ~2.0.0 - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: 88ddd12f2192c2775107d5e462998ac01095cb0222ca01dc2be77d8dcbbf9883c4c0a0248529cceee40a2f1232c68027b1aca731da9f767ad8e9483cbd61dd37 - languageName: node - linkType: hard - "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -4348,6 +3523,13 @@ __metadata: languageName: node linkType: hard +"cli-boxes@npm:^2.2.1": + version: 2.2.1 + resolution: "cli-boxes@npm:2.2.1" + checksum: be79f8ec23a558b49e01311b39a1ea01243ecee30539c880cf14bf518a12e223ef40c57ead0cb44f509bffdffc5c129c746cd50d863ab879385370112af4f585 + languageName: node + linkType: hard + "cli-cursor@npm:^2.1.0": version: 2.1.0 resolution: "cli-cursor@npm:2.1.0" @@ -4357,31 +3539,30 @@ __metadata: languageName: node linkType: hard -"cli-table3@npm:^0.5.0": - version: 0.5.1 - resolution: "cli-table3@npm:0.5.1" +"cli-table3@npm:^0.6.0": + version: 0.6.0 + resolution: "cli-table3@npm:0.6.0" dependencies: colors: ^1.1.2 object-assign: ^4.1.0 - string-width: ^2.1.1 + string-width: ^4.2.0 dependenciesMeta: colors: optional: true - checksum: 3ff8c821440a2a0e655a01f04e5b54a0365b3814676cd93cec2b2b0b9952a08311797ad242a181733fcff714fa7d776f8bb45ad812f296390bfa5ef584fb231d + checksum: 98682a2d3eef5ad07d34a08f90398d0640004e28ecf8eb59006436f11ed7b4d453db09f46c2ea880618fbd61fee66321b3b3ee1b20276bc708b6baf6f9663d75 languageName: node linkType: hard -"cli-table3@npm:^0.6.0": - version: 0.6.0 - resolution: "cli-table3@npm:0.6.0" +"cli-table3@npm:^0.6.3": + version: 0.6.4 + resolution: "cli-table3@npm:0.6.4" dependencies: - colors: ^1.1.2 - object-assign: ^4.1.0 + "@colors/colors": 1.5.0 string-width: ^4.2.0 dependenciesMeta: - colors: + "@colors/colors": optional: true - checksum: 98682a2d3eef5ad07d34a08f90398d0640004e28ecf8eb59006436f11ed7b4d453db09f46c2ea880618fbd61fee66321b3b3ee1b20276bc708b6baf6f9663d75 + checksum: 0942d9977c05b31e9c7e0172276246b3ac2124c2929451851c01dbf5fc9b3d40cc4e1c9d468ff26dd3cfd18617963fe227b4cfeeae2881b70f302d69d792b5bb languageName: node linkType: hard @@ -4392,17 +3573,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^3.2.0": - version: 3.2.0 - resolution: "cliui@npm:3.2.0" - dependencies: - string-width: ^1.0.1 - strip-ansi: ^3.0.1 - wrap-ansi: ^2.0.0 - checksum: c68d1dbc3e347bfe79ed19cc7f48007d5edd6cd8438342e32073e0b4e311e3c44e1f4f19221462bc6590de56c2df520e427533a9dde95dee25710bec322746ad - languageName: node - linkType: hard - "cliui@npm:^5.0.0": version: 5.0.0 resolution: "cliui@npm:5.0.0" @@ -4445,30 +3615,6 @@ __metadata: languageName: node linkType: hard -"clone@npm:2.1.2, clone@npm:^2.0.0": - version: 2.1.2 - resolution: "clone@npm:2.1.2" - checksum: aaf106e9bc025b21333e2f4c12da539b568db4925c0501a1bf4070836c9e848c892fa22c35548ce0d1132b08bbbfa17a00144fe58fccdab6fa900fec4250f67d - languageName: node - linkType: hard - -"code-point-at@npm:^1.0.0": - version: 1.1.0 - resolution: "code-point-at@npm:1.1.0" - checksum: 17d5666611f9b16d64fdf48176d9b7fb1c7d1c1607a189f7e600040a11a6616982876af148230336adb7d8fe728a559f743a4e29db3747e3b1a32fa7f4529681 - languageName: node - linkType: hard - -"collection-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "collection-visit@npm:1.0.0" - dependencies: - map-visit: ^1.0.0 - object-visit: ^1.0.0 - checksum: 15d9658fe6eb23594728346adad5433b86bb7a04fd51bbab337755158722f9313a5376ef479de5b35fbc54140764d0d39de89c339f5d25b959ed221466981da9 - languageName: node - linkType: hard - "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -4510,7 +3656,7 @@ __metadata: languageName: node linkType: hard -"colors@npm:1.4.0, colors@npm:^1.1.2": +"colors@npm:^1.1.2": version: 1.4.0 resolution: "colors@npm:1.4.0" checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec @@ -4533,19 +3679,6 @@ __metadata: languageName: node linkType: hard -"command-line-args@npm:^4.0.7": - version: 4.0.7 - resolution: "command-line-args@npm:4.0.7" - dependencies: - array-back: ^2.0.0 - find-replace: ^1.0.3 - typical: ^2.6.1 - bin: - command-line-args: bin/cli.js - checksum: 618109143fbca741048d54a5d31a2a5e166fbda318ed1419c1ca66877ce92ed80d6768a52a2e6392eb751f16ca7755d4014ced6f5f858a68d0cbe793bab6e3ee - languageName: node - linkType: hard - "command-line-args@npm:^5.1.1": version: 5.2.1 resolution: "command-line-args@npm:5.2.1" @@ -4584,17 +3717,17 @@ __metadata: languageName: node linkType: hard -"compare-versions@npm:^5.0.0": - version: 5.0.1 - resolution: "compare-versions@npm:5.0.1" - checksum: 302a4e46224b47b9280cf894c6c87d8df912671fa391dcdbf0e63438d9b0a69fe20dd747fb439e8d54c43af016ff4eaaf0a4c9d8e7ca358bcd12dadf4ad2935e +"commander@npm:^10.0.0": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 languageName: node linkType: hard -"component-emitter@npm:^1.2.1": - version: 1.3.0 - resolution: "component-emitter@npm:1.3.0" - checksum: b3c46de38ffd35c57d1c02488355be9f218e582aec72d72d1b8bbec95a3ac1b38c96cd6e03ff015577e68f550fbb361a3bfdbd9bb248be9390b7b3745691be6b +"compare-versions@npm:^6.0.0": + version: 6.1.0 + resolution: "compare-versions@npm:6.1.0" + checksum: d4e2a45706a023d8d0b6680338b66b79e20bd02d1947f0ac6531dab634cbed89fa373b3f03d503c5e489761194258d6e1bae67a07f88b1efc61648454f2d47e7 languageName: node linkType: hard @@ -4605,18 +3738,6 @@ __metadata: languageName: node linkType: hard -"concat-stream@npm:^1.5.1, concat-stream@npm:^1.6.0, concat-stream@npm:^1.6.2": - version: 1.6.2 - resolution: "concat-stream@npm:1.6.2" - dependencies: - buffer-from: ^1.0.0 - inherits: ^2.0.3 - readable-stream: ^2.2.2 - typedarray: ^0.0.6 - checksum: 1ef77032cb4459dcd5187bd710d6fc962b067b64ec6a505810de3d2b8cc0605638551b42f8ec91edf6fcd26141b32ef19ad749239b58fae3aba99187adc32285 - languageName: node - linkType: hard - "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -4651,15 +3772,6 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.5.1": - version: 1.7.0 - resolution: "convert-source-map@npm:1.7.0" - dependencies: - safe-buffer: ~5.1.1 - checksum: bcd2e3ea7d37f96b85a6e362c8a89402ccc73757256e3ee53aa2c22fe915adb854c66b1f81111be815a3a6a6ce3c58e8001858e883c9d5b4fe08a853fa865967 - languageName: node - linkType: hard - "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -4681,34 +3793,6 @@ __metadata: languageName: node linkType: hard -"cookiejar@npm:^2.1.1": - version: 2.1.4 - resolution: "cookiejar@npm:2.1.4" - checksum: c4442111963077dc0e5672359956d6556a195d31cbb35b528356ce5f184922b99ac48245ac05ed86cf993f7df157c56da10ab3efdadfed79778a0d9b1b092d5b - languageName: node - linkType: hard - -"copy-descriptor@npm:^0.1.0": - version: 0.1.1 - resolution: "copy-descriptor@npm:0.1.1" - checksum: d4b7b57b14f1d256bb9aa0b479241048afd7f5bcf22035fc7b94e8af757adeae247ea23c1a774fe44869fd5694efba4a969b88d966766c5245fdee59837fe45b - languageName: node - linkType: hard - -"core-js-pure@npm:^3.0.1": - version: 3.11.0 - resolution: "core-js-pure@npm:3.11.0" - checksum: 8f55c393197bbb3fd8a125b0cc9f4949df1864d2d6b27ff17e03c1f4f8a047f422c0dd39bf1ade613004cc6a1ee8cc95290360b6247e245e133fe3d92d52d45a - languageName: node - linkType: hard - -"core-js@npm:^2.4.0, core-js@npm:^2.5.0": - version: 2.6.12 - resolution: "core-js@npm:2.6.12" - checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016 - languageName: node - linkType: hard - "core-util-is@npm:1.0.2, core-util-is@npm:~1.0.0": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -4738,6 +3822,23 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^8.0.0": + version: 8.3.6 + resolution: "cosmiconfig@npm:8.3.6" + dependencies: + import-fresh: ^3.3.0 + js-yaml: ^4.1.0 + parse-json: ^5.2.0 + path-type: ^4.0.0 + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: dc339ebea427898c9e03bf01b56ba7afbac07fc7d2a2d5a15d6e9c14de98275a9565da949375aee1809591c152c0a3877bb86dbeaf74d5bd5aaa79955ad9e7a0 + languageName: node + linkType: hard + "crc-32@npm:^1.2.0": version: 1.2.0 resolution: "crc-32@npm:1.2.0" @@ -4794,16 +3895,6 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:^2.1.0, cross-fetch@npm:^2.1.1": - version: 2.2.6 - resolution: "cross-fetch@npm:2.2.6" - dependencies: - node-fetch: ^2.6.7 - whatwg-fetch: ^2.0.4 - checksum: df9c6728b314ff96022dca468a3d2a05b4546cd318d82a7e1f1445e7160472d39029bccbe5f20d319b8ba3793930592b0b956244aef6a87a133fbcfed85fc8ca - languageName: node - linkType: hard - "cross-fetch@npm:^3.1.4": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" @@ -4826,7 +3917,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.2": +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: @@ -4878,13 +3969,6 @@ __metadata: languageName: node linkType: hard -"crypto-js@npm:^4.0.0": - version: 4.1.1 - resolution: "crypto-js@npm:4.1.1" - checksum: b3747c12ee3a7632fab3b3e171ea50f78b182545f0714f6d3e7e2858385f0f4101a15f2517e033802ce9d12ba50a391575ff4638c9de3dd9b2c4bc47768d5425 - languageName: node - linkType: hard - "csv-parse@npm:^5.4.0": version: 5.4.0 resolution: "csv-parse@npm:5.4.0" @@ -4911,6 +3995,39 @@ __metadata: languageName: node linkType: hard +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 + languageName: node + linkType: hard + "death@npm:^1.1.0": version: 1.1.0 resolution: "death@npm:1.1.0" @@ -4918,7 +4035,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0, debug@npm:^2.6.8, debug@npm:^2.6.9": +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.6.0, debug@npm:^2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: @@ -4948,7 +4065,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.1.0, debug@npm:^3.2.7": +"debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -4957,7 +4074,7 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.1.1, decamelize@npm:^1.2.0": +"decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa @@ -5005,17 +4122,12 @@ __metadata: languageName: node linkType: hard -"deep-equal@npm:~1.1.1": - version: 1.1.1 - resolution: "deep-equal@npm:1.1.1" +"deep-eql@npm:^4.0.1": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" dependencies: - is-arguments: ^1.0.4 - is-date-object: ^1.0.1 - is-regex: ^1.0.4 - object-is: ^1.0.1 - object-keys: ^1.1.1 - regexp.prototype.flags: ^1.2.0 - checksum: f92686f2c5bcdf714a75a5fa7a9e47cb374a8ec9307e717b8d1ce61f56a75aaebf5619c2a12b8087a705b5a2f60d0292c35f8b58cb1f72e3268a3a15cab9f78d + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f languageName: node linkType: hard @@ -5033,38 +4145,6 @@ __metadata: languageName: node linkType: hard -"defender-admin-client@npm:^1.29.0-rc.1": - version: 1.37.0 - resolution: "defender-admin-client@npm:1.37.0" - dependencies: - axios: ^0.21.2 - defender-base-client: 1.37.0 - lodash: ^4.17.19 - node-fetch: ^2.6.0 - checksum: 6e9e9931bf95b6adbf39ca0cfdb1b348c54803b5908409bff6c56977cda14f519d29e2d7f4cfdc64d20271d90d4f11c6bb69091a6a6d0b50d328568251de6551 - languageName: node - linkType: hard - -"defender-base-client@npm:1.37.0, defender-base-client@npm:^1.3.1": - version: 1.37.0 - resolution: "defender-base-client@npm:1.37.0" - dependencies: - amazon-cognito-identity-js: ^4.3.3 - async-retry: ^1.3.3 - axios: ^0.21.2 - lodash: ^4.17.19 - node-fetch: ^2.6.0 - checksum: 759b58245c4abfad3211a3cd6801c20b826ced3ad93c8763f0a8754a136af4073a8518d773b7bde7732c713333cf74c46f4df55f27893a045b7ffff633fb695c - languageName: node - linkType: hard - -"defer-to-connect@npm:^1.0.1": - version: 1.1.3 - resolution: "defer-to-connect@npm:1.1.3" - checksum: 9491b301dcfa04956f989481ba7a43c2231044206269eb4ab64a52d6639ee15b1252262a789eb4239fb46ab63e44d4e408641bae8e0793d640aee55398cb3930 - languageName: node - linkType: hard - "defer-to-connect@npm:^2.0.1": version: 2.0.1 resolution: "defer-to-connect@npm:2.0.1" @@ -5076,18 +4156,8 @@ __metadata: version: 1.2.2 resolution: "deferred-leveldown@npm:1.2.2" dependencies: - abstract-leveldown: ~2.6.0 - checksum: ad3a26d20dc80c702c85c4795cbb52ef25d8e500728c98098b468c499ca745051e6cc03bd12be97ff38c43466a7895879db76ffb761a75b0f009829d990a0ea9 - languageName: node - linkType: hard - -"deferred-leveldown@npm:~4.0.0": - version: 4.0.2 - resolution: "deferred-leveldown@npm:4.0.2" - dependencies: - abstract-leveldown: ~5.0.0 - inherits: ^2.0.3 - checksum: 6b3649bbb7a2617e08eecdddb516d0bde215bd376a37089df203ad78627f59c424c785afbcbfd3e53488d4f9e5d27d9d126d5645b7da53e8760cc34df2d2f13e + abstract-leveldown: ~2.6.0 + checksum: ad3a26d20dc80c702c85c4795cbb52ef25d8e500728c98098b468c499ca745051e6cc03bd12be97ff38c43466a7895879db76ffb761a75b0f009829d990a0ea9 languageName: node linkType: hard @@ -5101,6 +4171,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + gopd: ^1.0.1 + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b + languageName: node + linkType: hard + "define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": version: 1.1.4 resolution: "define-properties@npm:1.1.4" @@ -5111,38 +4192,14 @@ __metadata: languageName: node linkType: hard -"define-property@npm:^0.2.5": - version: 0.2.5 - resolution: "define-property@npm:0.2.5" - dependencies: - is-descriptor: ^0.1.0 - checksum: 85af107072b04973b13f9e4128ab74ddfda48ec7ad2e54b193c0ffb57067c4ce5b7786a7b4ae1f24bd03e87c5d18766b094571810b314d7540f86d4354dbd394 - languageName: node - linkType: hard - -"define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "define-property@npm:1.0.0" - dependencies: - is-descriptor: ^1.0.0 - checksum: 5fbed11dace44dd22914035ba9ae83ad06008532ca814d7936a53a09e897838acdad5b108dd0688cc8d2a7cf0681acbe00ee4136cf36743f680d10517379350a - languageName: node - linkType: hard - -"define-property@npm:^2.0.2": - version: 2.0.2 - resolution: "define-property@npm:2.0.2" +"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" dependencies: - is-descriptor: ^1.0.2 - isobject: ^3.0.1 - checksum: 3217ed53fc9eed06ba8da6f4d33e28c68a82e2f2a8ab4d562c4920d8169a166fe7271453675e6c69301466f36a65d7f47edf0cf7f474b9aa52a5ead9c1b13c99 - languageName: node - linkType: hard - -"defined@npm:~1.0.0": - version: 1.0.0 - resolution: "defined@npm:1.0.0" - checksum: 77672997c5001773371c4dbcce98da0b3dc43089d6da2ad87c4b800adb727633cea8723ea3889fe0c2112a2404e2fd07e3bfd0e55f7426aa6441d8992045dbd5 + define-data-property: ^1.0.1 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 languageName: node linkType: hard @@ -5184,15 +4241,6 @@ __metadata: languageName: node linkType: hard -"detect-indent@npm:^4.0.0": - version: 4.0.0 - resolution: "detect-indent@npm:4.0.0" - dependencies: - repeating: ^2.0.0 - checksum: 328f273915c1610899bc7d4784ce874413d0a698346364cd3ee5d79afba1c5cf4dbc97b85a801e20f4d903c0598bd5096af32b800dfb8696b81464ccb3dfda2c - languageName: node - linkType: hard - "detect-port@npm:^1.3.0": version: 1.3.0 resolution: "detect-port@npm:1.3.0" @@ -5301,17 +4349,6 @@ __metadata: languageName: node linkType: hard -"dotignore@npm:~0.1.2": - version: 0.1.2 - resolution: "dotignore@npm:0.1.2" - dependencies: - minimatch: ^3.0.4 - bin: - ignored: bin/ignored - checksum: 06bab15e2a2400c6f823a0edbcd73661180f6245a4041a3fe3b9fde4b22ae74b896604df4520a877093f05c656bd080087376c9f605bccdea847664c59910f37 - languageName: node - linkType: hard - "duplexer3@npm:^0.1.4": version: 0.1.4 resolution: "duplexer3@npm:0.1.4" @@ -5319,6 +4356,13 @@ __metadata: languageName: node linkType: hard +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + "ecc-jsbn@npm:~0.1.1": version: 0.1.2 resolution: "ecc-jsbn@npm:0.1.2" @@ -5336,13 +4380,6 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.3.47": - version: 1.3.727 - resolution: "electron-to-chromium@npm:1.3.727" - checksum: 27e725e497475e998ca597e196e6895a55a24b0ce4c489cac4dfa24f1ff38b8fa54fbdb219d79e562783c8f20615705f1c857ccab91883c2818d6d908054bd37 - languageName: node - linkType: hard - "elliptic@npm:6.5.4, elliptic@npm:^6.4.0, elliptic@npm:^6.5.0, elliptic@npm:^6.5.2, elliptic@npm:^6.5.3, elliptic@npm:^6.5.4": version: 6.5.4 resolution: "elliptic@npm:6.5.4" @@ -5365,13 +4402,6 @@ __metadata: languageName: node linkType: hard -"emoji-regex@npm:^10.1.0": - version: 10.1.0 - resolution: "emoji-regex@npm:10.1.0" - checksum: 5bc780fc4d75f89369155a87c55f7e83a0bf72bcccda7df7f2c570cde4738d8b17d112d12afdadfec16647d1faef6501307b4304f81d35c823a938fe6547df0f - languageName: node - linkType: hard - "emoji-regex@npm:^7.0.1": version: 7.0.3 resolution: "emoji-regex@npm:7.0.3" @@ -5386,6 +4416,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -5393,19 +4430,6 @@ __metadata: languageName: node linkType: hard -"encoding-down@npm:5.0.4, encoding-down@npm:~5.0.0": - version: 5.0.4 - resolution: "encoding-down@npm:5.0.4" - dependencies: - abstract-leveldown: ^5.0.0 - inherits: ^2.0.3 - level-codec: ^9.0.0 - level-errors: ^2.0.0 - xtend: ^4.0.1 - checksum: b8d9d4b058622c11e33d8ec0fb6432194925e109ed8e44e93555406496e8b77b294c8c338dd5ed9ab8d7bc50250a48bb93f9af62ecee3ce8d82f4ef78b2ca880 - languageName: node - linkType: hard - "encoding-down@npm:^6.3.0": version: 6.3.0 resolution: "encoding-down@npm:6.3.0" @@ -5418,7 +4442,7 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.11, encoding@npm:^0.1.13": +"encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -5470,7 +4494,7 @@ __metadata: languageName: node linkType: hard -"error-ex@npm:^1.2.0, error-ex@npm:^1.3.1": +"error-ex@npm:^1.3.1": version: 1.3.2 resolution: "error-ex@npm:1.3.2" dependencies: @@ -5511,6 +4535,96 @@ __metadata: languageName: node linkType: hard +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": + version: 1.23.3 + resolution: "es-abstract@npm:1.23.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + arraybuffer.prototype.slice: ^1.0.3 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + data-view-buffer: ^1.0.1 + data-view-byte-length: ^1.0.1 + data-view-byte-offset: ^1.0.0 + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-set-tostringtag: ^2.0.3 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.4 + get-symbol-description: ^1.0.2 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 + has-symbols: ^1.0.3 + hasown: ^2.0.2 + internal-slot: ^1.0.7 + is-array-buffer: ^3.0.4 + is-callable: ^1.2.7 + is-data-view: ^1.0.1 + is-negative-zero: ^2.0.3 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.3 + is-string: ^1.0.7 + is-typed-array: ^1.1.13 + is-weakref: ^1.0.2 + object-inspect: ^1.13.1 + object-keys: ^1.1.1 + object.assign: ^4.1.5 + regexp.prototype.flags: ^1.5.2 + safe-array-concat: ^1.1.2 + safe-regex-test: ^1.0.3 + string.prototype.trim: ^1.2.9 + string.prototype.trimend: ^1.0.8 + string.prototype.trimstart: ^1.0.8 + typed-array-buffer: ^1.0.2 + typed-array-byte-length: ^1.0.1 + typed-array-byte-offset: ^1.0.2 + typed-array-length: ^1.0.6 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.15 + checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: ^1.2.4 + checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: ^1.3.0 + checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: ^1.2.4 + has-tostringtag: ^1.0.2 + hasown: ^2.0.1 + checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 + languageName: node + linkType: hard + "es-shim-unscopables@npm:^1.0.0": version: 1.0.0 resolution: "es-shim-unscopables@npm:1.0.0" @@ -5520,6 +4634,15 @@ __metadata: languageName: node linkType: hard +"es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: ^2.0.0 + checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 + languageName: node + linkType: hard + "es-to-primitive@npm:^1.2.1": version: 1.2.1 resolution: "es-to-primitive@npm:1.2.1" @@ -5584,7 +4707,7 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:1.0.5, escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": +"escape-string-regexp@npm:1.0.5, escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 @@ -5978,22 +5101,7 @@ __metadata: languageName: node linkType: hard -"eth-block-tracker@npm:^3.0.0": - version: 3.0.1 - resolution: "eth-block-tracker@npm:3.0.1" - dependencies: - eth-query: ^2.1.0 - ethereumjs-tx: ^1.3.3 - ethereumjs-util: ^5.1.3 - ethjs-util: ^0.1.3 - json-rpc-engine: ^3.6.0 - pify: ^2.3.0 - tape: ^4.6.3 - checksum: b68dda7a60e2c15fa7097f31277ebfce08852de83229c2c65879a5482db28610bc85248cfe6578971ad2357552d5ce6124fb0c2a29d18fd30c70f092beeda3b8 - languageName: node - linkType: hard - -"eth-ens-namehash@npm:2.0.8, eth-ens-namehash@npm:^2.0.8": +"eth-ens-namehash@npm:2.0.8": version: 2.0.8 resolution: "eth-ens-namehash@npm:2.0.8" dependencies: @@ -6003,67 +5111,6 @@ __metadata: languageName: node linkType: hard -"eth-gas-reporter@npm:^0.2.25": - version: 0.2.25 - resolution: "eth-gas-reporter@npm:0.2.25" - dependencies: - "@ethersproject/abi": ^5.0.0-beta.146 - "@solidity-parser/parser": ^0.14.0 - cli-table3: ^0.5.0 - colors: 1.4.0 - ethereum-cryptography: ^1.0.3 - ethers: ^4.0.40 - fs-readdir-recursive: ^1.1.0 - lodash: ^4.17.14 - markdown-table: ^1.1.3 - mocha: ^7.1.1 - req-cwd: ^2.0.0 - request: ^2.88.0 - request-promise-native: ^1.0.5 - sha1: ^1.1.1 - sync-request: ^6.0.0 - peerDependencies: - "@codechecks/client": ^0.1.0 - peerDependenciesMeta: - "@codechecks/client": - optional: true - checksum: 3bfa81e554b069bb817f2a073a601a0429e6b582c56ad99db0727dc2a102ab00fc27888820b8a042a194a8fb7d40954d10cd7b011ede6b8170285d2d5a88666c - languageName: node - linkType: hard - -"eth-json-rpc-infura@npm:^3.1.0": - version: 3.2.1 - resolution: "eth-json-rpc-infura@npm:3.2.1" - dependencies: - cross-fetch: ^2.1.1 - eth-json-rpc-middleware: ^1.5.0 - json-rpc-engine: ^3.4.0 - json-rpc-error: ^2.0.0 - checksum: 393e825986c0eedb9a1bb771b84e5b7c4037d8f870ab92cdba9dbaa52b5c7d5755ed02fd80d2a07b5db7a3af2c0b30d37756eb39cd7d2ae39173c6c2ea138e7d - languageName: node - linkType: hard - -"eth-json-rpc-middleware@npm:^1.5.0": - version: 1.6.0 - resolution: "eth-json-rpc-middleware@npm:1.6.0" - dependencies: - async: ^2.5.0 - eth-query: ^2.1.2 - eth-tx-summary: ^3.1.2 - ethereumjs-block: ^1.6.0 - ethereumjs-tx: ^1.3.3 - ethereumjs-util: ^5.1.2 - ethereumjs-vm: ^2.1.0 - fetch-ponyfill: ^4.0.0 - json-rpc-engine: ^3.6.0 - json-rpc-error: ^2.0.0 - json-stable-stringify: ^1.0.1 - promise-to-callback: ^1.0.0 - tape: ^4.6.3 - checksum: 0f6c146bdb277b3be9eef68f7424e1709a57f58330a3ae076153313be60f5026a5eee0de16d1ee6e41515e76cb1d38ef590948dd55d4b3ab1b3659af61337922 - languageName: node - linkType: hard - "eth-lib@npm:0.2.8": version: 0.2.8 resolution: "eth-lib@npm:0.2.8" @@ -6089,70 +5136,6 @@ __metadata: languageName: node linkType: hard -"eth-query@npm:^2.0.2, eth-query@npm:^2.1.0, eth-query@npm:^2.1.2": - version: 2.1.2 - resolution: "eth-query@npm:2.1.2" - dependencies: - json-rpc-random-id: ^1.0.0 - xtend: ^4.0.1 - checksum: 83daa0e28452c54722aec78cd24d036bad5b6e7c08035d98e10d4bea11f71662f12cab63ebd8a848d4df46ad316503d54ecccb41c9244d2ea8b29364b0a20201 - languageName: node - linkType: hard - -"eth-sig-util@npm:3.0.0": - version: 3.0.0 - resolution: "eth-sig-util@npm:3.0.0" - dependencies: - buffer: ^5.2.1 - elliptic: ^6.4.0 - ethereumjs-abi: 0.6.5 - ethereumjs-util: ^5.1.1 - tweetnacl: ^1.0.0 - tweetnacl-util: ^0.15.0 - checksum: fbe44efb7909737b070e1e1d8c7096da3bdbd1356de242fc3458849e042e39c83a4e2dd1cbce0dc21ff3e5eca1843981751428bc160dcf3a6fcca2f1e8161be4 - languageName: node - linkType: hard - -"eth-sig-util@npm:^1.4.2": - version: 1.4.2 - resolution: "eth-sig-util@npm:1.4.2" - dependencies: - ethereumjs-abi: "git+https://github.com/ethereumjs/ethereumjs-abi.git" - ethereumjs-util: ^5.1.1 - checksum: 578f5c571c1bb0a86dc1bd4a5b56b8073b37823496d7afa74d772cf91ae6860f91bafcbee931be39a3d13f0c195df9f026a27fce350605ad5d15901a5a4ea94a - languageName: node - linkType: hard - -"eth-tx-summary@npm:^3.1.2": - version: 3.2.4 - resolution: "eth-tx-summary@npm:3.2.4" - dependencies: - async: ^2.1.2 - clone: ^2.0.0 - concat-stream: ^1.5.1 - end-of-stream: ^1.1.0 - eth-query: ^2.0.2 - ethereumjs-block: ^1.4.1 - ethereumjs-tx: ^1.1.1 - ethereumjs-util: ^5.0.1 - ethereumjs-vm: ^2.6.0 - through2: ^2.0.3 - checksum: 7df8b91bc2bd3f6941e2a5b3230cad5c5523ca3750190cd06af07983feba1bb4af893f226f01072958b00aa626869846894bcb1bfaa451d9c8f7f5b8cdf5ce0a - languageName: node - linkType: hard - -"ethashjs@npm:~0.0.7": - version: 0.0.8 - resolution: "ethashjs@npm:0.0.8" - dependencies: - async: ^2.1.2 - buffer-xor: ^2.0.1 - ethereumjs-util: ^7.0.2 - miller-rabin: ^4.0.0 - checksum: d9b6b47d32cbe017848ce5d8aec86eb6416300c6f52a68029bf6fc8fcf5429a45c14f2033d514435acd02047af16f6f804056e81587b30ed677039ac678b15f8 - languageName: node - linkType: hard - "ethereum-bloom-filters@npm:^1.0.6": version: 1.0.9 resolution: "ethereum-bloom-filters@npm:1.0.9" @@ -6223,42 +5206,19 @@ __metadata: languageName: node linkType: hard -"ethereum-waffle@npm:3.4.4": - version: 3.4.4 - resolution: "ethereum-waffle@npm:3.4.4" - dependencies: - "@ethereum-waffle/chai": ^3.4.4 - "@ethereum-waffle/compiler": ^3.4.4 - "@ethereum-waffle/mock-contract": ^3.4.4 - "@ethereum-waffle/provider": ^3.4.4 - ethers: ^5.0.1 - bin: - waffle: bin/waffle - checksum: 5a181b52f66f1b3c89ed1b68ef44cbd9acd4d743262de9edbe1fd57b0925576dd62c3436b1e65434d5ac03ab16da0df283972cd9aae726de0b8b9cdd7876b917 - languageName: node - linkType: hard - -"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": - version: 0.6.8 - resolution: "ethereumjs-abi@https://github.com/ethereumjs/ethereumjs-abi.git#commit=1a27c59c15ab1e95ee8e5c4ed6ad814c49cc439e" - dependencies: - bn.js: ^4.11.8 - ethereumjs-util: ^6.0.0 - checksum: 06142cd1eca1200f8cc6d3fb636ccab70d34ab43f1d633aeb8bd9f18d500b9e7a2facb74e32359838855fe9a5567651478b4713f4cfb9fbfa8d37dd7fabbc1dd - languageName: node - linkType: hard - -"ethereumjs-abi@npm:0.6.5": - version: 0.6.5 - resolution: "ethereumjs-abi@npm:0.6.5" +"ethereum-cryptography@npm:^2.1.3": + version: 2.1.3 + resolution: "ethereum-cryptography@npm:2.1.3" dependencies: - bn.js: ^4.10.0 - ethereumjs-util: ^4.3.0 - checksum: 3abdc79dc60614d30b1cefb5e6bfbdab3ca8252b4e742330544103f86d6e49a55921d9b8822a0a47fee3efd9dd2493ec93448b1869d82479a4c71a44001e8337 + "@noble/curves": 1.3.0 + "@noble/hashes": 1.3.3 + "@scure/bip32": 1.3.3 + "@scure/bip39": 1.2.2 + checksum: 7f9c14f868a588641179cace3eb86c332c4743290865db699870710253cabc4dc74bd4bce5e7bc6db667482e032e94d6f79521219eb6be5dc422059d279a27b7 languageName: node linkType: hard -"ethereumjs-abi@npm:0.6.8, ethereumjs-abi@npm:^0.6.8": +"ethereumjs-abi@npm:^0.6.8": version: 0.6.8 resolution: "ethereumjs-abi@npm:0.6.8" dependencies: @@ -6268,42 +5228,7 @@ __metadata: languageName: node linkType: hard -"ethereumjs-account@npm:3.0.0, ethereumjs-account@npm:^3.0.0": - version: 3.0.0 - resolution: "ethereumjs-account@npm:3.0.0" - dependencies: - ethereumjs-util: ^6.0.0 - rlp: ^2.2.1 - safe-buffer: ^5.1.1 - checksum: 64dbe026d29aca12c79596cf4085fb27e209988f11b7d5bf3a1f2aadaaa517d90d722680c8b525144c26a2d9cd8494aa26ac088fa80b358cc3e28024f7ddbe81 - languageName: node - linkType: hard - -"ethereumjs-account@npm:^2.0.3": - version: 2.0.5 - resolution: "ethereumjs-account@npm:2.0.5" - dependencies: - ethereumjs-util: ^5.0.0 - rlp: ^2.0.0 - safe-buffer: ^5.1.1 - checksum: 2e4546b8b0213168eebd3a5296da904b6f55470e39b4c742d252748927d2b268f8d6374b0178c1d5b7188646f97dae74a7ac1c7485fe96ea557c152b52223f18 - languageName: node - linkType: hard - -"ethereumjs-block@npm:2.2.2, ethereumjs-block@npm:^2.2.2, ethereumjs-block@npm:~2.2.0, ethereumjs-block@npm:~2.2.2": - version: 2.2.2 - resolution: "ethereumjs-block@npm:2.2.2" - dependencies: - async: ^2.0.1 - ethereumjs-common: ^1.5.0 - ethereumjs-tx: ^2.1.1 - ethereumjs-util: ^5.0.0 - merkle-patricia-tree: ^2.1.2 - checksum: 91f7f60820394e072c9a115da2871a096414644109d2449d4a79b30be67b0080bc848dfa7e2ae7b2ab255de3be4f6736c6cb2b418c29eada794d018cc384e189 - languageName: node - linkType: hard - -"ethereumjs-block@npm:^1.2.2, ethereumjs-block@npm:^1.4.1, ethereumjs-block@npm:^1.6.0": +"ethereumjs-block@npm:^1.7.1": version: 1.7.1 resolution: "ethereumjs-block@npm:1.7.1" dependencies: @@ -6316,49 +5241,14 @@ __metadata: languageName: node linkType: hard -"ethereumjs-blockchain@npm:^4.0.3": - version: 4.0.4 - resolution: "ethereumjs-blockchain@npm:4.0.4" - dependencies: - async: ^2.6.1 - ethashjs: ~0.0.7 - ethereumjs-block: ~2.2.2 - ethereumjs-common: ^1.5.0 - ethereumjs-util: ^6.1.0 - flow-stoplight: ^1.0.0 - level-mem: ^3.0.1 - lru-cache: ^5.1.1 - rlp: ^2.2.2 - semaphore: ^1.1.0 - checksum: efa04b2e2d02ce9c524f246f862b1ca779bbfd9f795cc7a9e471f0d96229de5188f1f6b17e54948f640100116b646ed03242494c23cd66f0f7e8384a4f217ba4 - languageName: node - linkType: hard - -"ethereumjs-common@npm:1.5.0": - version: 1.5.0 - resolution: "ethereumjs-common@npm:1.5.0" - checksum: a30474986a88b8f3ee53f9fb34027528f12d1bc7ecee8b80aa8060a09ccde3b2af4dd24c928287018003e4e206cd4f6311cdd508442d1452d02ec3d8e7a0601e - languageName: node - linkType: hard - -"ethereumjs-common@npm:^1.1.0, ethereumjs-common@npm:^1.5.0": +"ethereumjs-common@npm:^1.5.2": version: 1.5.2 resolution: "ethereumjs-common@npm:1.5.2" checksum: 3fc64faced268e0c61da50c5db76d18cfd44325d5706792f32ac8c85c0e800d52db284f042c3bd0623daf59b946176ef7dbea476d1b0252492137fa4549a3349 languageName: node linkType: hard -"ethereumjs-tx@npm:2.1.2, ethereumjs-tx@npm:^2.1.1, ethereumjs-tx@npm:^2.1.2": - version: 2.1.2 - resolution: "ethereumjs-tx@npm:2.1.2" - dependencies: - ethereumjs-common: ^1.5.0 - ethereumjs-util: ^6.0.0 - checksum: a5b607b4e125ed696d76a9e4db8a95e03a967323c66694912d799619b16fa43985336924221f9e7582dc1b09ff88a62116bf2290ee14d952bf7e6715e5728525 - languageName: node - linkType: hard - -"ethereumjs-tx@npm:^1.1.1, ethereumjs-tx@npm:^1.2.0, ethereumjs-tx@npm:^1.2.2, ethereumjs-tx@npm:^1.3.3": +"ethereumjs-tx@npm:^1.2.2, ethereumjs-tx@npm:^1.3.7": version: 1.3.7 resolution: "ethereumjs-tx@npm:1.3.7" dependencies: @@ -6368,35 +5258,7 @@ __metadata: languageName: node linkType: hard -"ethereumjs-util@npm:6.2.1, ethereumjs-util@npm:^6.0.0, ethereumjs-util@npm:^6.1.0, ethereumjs-util@npm:^6.2.0, ethereumjs-util@npm:^6.2.1": - version: 6.2.1 - resolution: "ethereumjs-util@npm:6.2.1" - dependencies: - "@types/bn.js": ^4.11.3 - bn.js: ^4.11.0 - create-hash: ^1.1.2 - elliptic: ^6.5.2 - ethereum-cryptography: ^0.1.3 - ethjs-util: 0.1.6 - rlp: ^2.2.3 - checksum: e3cb4a2c034a2529281fdfc21a2126fe032fdc3038863f5720352daa65ddcc50fc8c67dbedf381a882dc3802e05d979287126d7ecf781504bde1fd8218693bde - languageName: node - linkType: hard - -"ethereumjs-util@npm:^4.3.0": - version: 4.5.1 - resolution: "ethereumjs-util@npm:4.5.1" - dependencies: - bn.js: ^4.8.0 - create-hash: ^1.1.2 - elliptic: ^6.5.2 - ethereum-cryptography: ^0.1.3 - rlp: ^2.0.0 - checksum: ee91fbd29634d40cad9adf90f202158324c089bbc10b405d2ef139f4542090e6f76a616d16c601b52d6b5c5d59ddb6c8387cf60cc732884e732dad9a62b8a539 - languageName: node - linkType: hard - -"ethereumjs-util@npm:^5.0.0, ethereumjs-util@npm:^5.0.1, ethereumjs-util@npm:^5.1.1, ethereumjs-util@npm:^5.1.2, ethereumjs-util@npm:^5.1.3, ethereumjs-util@npm:^5.1.5, ethereumjs-util@npm:^5.2.0": +"ethereumjs-util@npm:^5.0.0": version: 5.2.1 resolution: "ethereumjs-util@npm:5.2.1" dependencies: @@ -6411,96 +5273,35 @@ __metadata: languageName: node linkType: hard -"ethereumjs-util@npm:^7.0.10, ethereumjs-util@npm:^7.0.2, ethereumjs-util@npm:^7.0.3, ethereumjs-util@npm:^7.1.0, ethereumjs-util@npm:^7.1.1, ethereumjs-util@npm:^7.1.2, ethereumjs-util@npm:^7.1.4, ethereumjs-util@npm:^7.1.5": - version: 7.1.5 - resolution: "ethereumjs-util@npm:7.1.5" +"ethereumjs-util@npm:^6.0.0, ethereumjs-util@npm:^6.2.1": + version: 6.2.1 + resolution: "ethereumjs-util@npm:6.2.1" dependencies: - "@types/bn.js": ^5.1.0 - bn.js: ^5.1.2 + "@types/bn.js": ^4.11.3 + bn.js: ^4.11.0 create-hash: ^1.1.2 + elliptic: ^6.5.2 ethereum-cryptography: ^0.1.3 - rlp: ^2.2.4 - checksum: 27a3c79d6e06b2df34b80d478ce465b371c8458b58f5afc14d91c8564c13363ad336e6e83f57eb0bd719fde94d10ee5697ceef78b5aa932087150c5287b286d1 - languageName: node - linkType: hard - -"ethereumjs-vm@npm:4.2.0": - version: 4.2.0 - resolution: "ethereumjs-vm@npm:4.2.0" - dependencies: - async: ^2.1.2 - async-eventemitter: ^0.2.2 - core-js-pure: ^3.0.1 - ethereumjs-account: ^3.0.0 - ethereumjs-block: ^2.2.2 - ethereumjs-blockchain: ^4.0.3 - ethereumjs-common: ^1.5.0 - ethereumjs-tx: ^2.1.2 - ethereumjs-util: ^6.2.0 - fake-merkle-patricia-tree: ^1.0.1 - functional-red-black-tree: ^1.0.1 - merkle-patricia-tree: ^2.3.2 - rustbn.js: ~0.2.0 - safe-buffer: ^5.1.1 - util.promisify: ^1.0.0 - checksum: ca73c406d55baefacafbdd8cefce80740098e5834096042e93285dc386ee670b4fed2f7846b78e3078fdf41231d04b3f1c40e435e639d072e0529ccb560b797b - languageName: node - linkType: hard - -"ethereumjs-vm@npm:^2.1.0, ethereumjs-vm@npm:^2.3.4, ethereumjs-vm@npm:^2.6.0": - version: 2.6.0 - resolution: "ethereumjs-vm@npm:2.6.0" - dependencies: - async: ^2.1.2 - async-eventemitter: ^0.2.2 - ethereumjs-account: ^2.0.3 - ethereumjs-block: ~2.2.0 - ethereumjs-common: ^1.1.0 - ethereumjs-util: ^6.0.0 - fake-merkle-patricia-tree: ^1.0.1 - functional-red-black-tree: ^1.0.1 - merkle-patricia-tree: ^2.3.2 - rustbn.js: ~0.2.0 - safe-buffer: ^5.1.1 - checksum: 3b3098b2ac3d5335797e4d73fceb76d1b776e453abb5fa4d1cd94f6391f493e95e3c89a8ee602558bc2a3b36b89977e66473de73faa87c8540b1954aa7b8c3fd - languageName: node - linkType: hard - -"ethereumjs-wallet@npm:0.6.5": - version: 0.6.5 - resolution: "ethereumjs-wallet@npm:0.6.5" - dependencies: - aes-js: ^3.1.1 - bs58check: ^2.1.2 - ethereum-cryptography: ^0.1.3 - ethereumjs-util: ^6.0.0 - randombytes: ^2.0.6 - safe-buffer: ^5.1.2 - scryptsy: ^1.2.1 - utf8: ^3.0.0 - uuid: ^3.3.2 - checksum: 54a9cc8beb8ea55e9be9b024b6ed09349423145fd8c49b8662d60d9258039330163c830fec055f92becc71ea54b430d2ef29f6bd73fa49d93ea854af01d13e58 + ethjs-util: 0.1.6 + rlp: ^2.2.3 + checksum: e3cb4a2c034a2529281fdfc21a2126fe032fdc3038863f5720352daa65ddcc50fc8c67dbedf381a882dc3802e05d979287126d7ecf781504bde1fd8218693bde languageName: node linkType: hard -"ethers@npm:^4.0.40": - version: 4.0.49 - resolution: "ethers@npm:4.0.49" +"ethereumjs-util@npm:^7.0.10, ethereumjs-util@npm:^7.0.3, ethereumjs-util@npm:^7.1.0, ethereumjs-util@npm:^7.1.1, ethereumjs-util@npm:^7.1.2, ethereumjs-util@npm:^7.1.4, ethereumjs-util@npm:^7.1.5": + version: 7.1.5 + resolution: "ethereumjs-util@npm:7.1.5" dependencies: - aes-js: 3.0.0 - bn.js: ^4.11.9 - elliptic: 6.5.4 - hash.js: 1.1.3 - js-sha3: 0.5.7 - scrypt-js: 2.0.4 - setimmediate: 1.0.4 - uuid: 2.0.1 - xmlhttprequest: 1.8.0 - checksum: 357115348a5f1484c7745fae1d852876788216c7d94c072c80132192f1800c4d388433ea2456750856641d6d4eed8a3b41847eb44f5e1c42139963864e3bcc38 + "@types/bn.js": ^5.1.0 + bn.js: ^5.1.2 + create-hash: ^1.1.2 + ethereum-cryptography: ^0.1.3 + rlp: ^2.2.4 + checksum: 27a3c79d6e06b2df34b80d478ce465b371c8458b58f5afc14d91c8564c13363ad336e6e83f57eb0bd719fde94d10ee5697ceef78b5aa932087150c5287b286d1 languageName: node linkType: hard -"ethers@npm:^5.0.1, ethers@npm:^5.0.2, ethers@npm:^5.5.2, ethers@npm:^5.6.1, ethers@npm:^5.7.1, ethers@npm:^5.7.2": +"ethers@npm:^5.6.1, ethers@npm:^5.7.1, ethers@npm:^5.7.2": version: 5.7.2 resolution: "ethers@npm:5.7.2" dependencies: @@ -6538,6 +5339,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^6.1.0": + version: 6.12.0 + resolution: "ethers@npm:6.12.0" + dependencies: + "@adraffy/ens-normalize": 1.10.1 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@types/node": 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + checksum: a9fa6937f57be00f217cac045752113f0be6ecbef77b90d653202f4127930023e86d20f06631cc4114bdbcf28fcb7dcb5244a88e2e430df1dfcb623e93c23366 + languageName: node + linkType: hard + "ethjs-unit@npm:0.1.6": version: 0.1.6 resolution: "ethjs-unit@npm:0.1.6" @@ -6558,13 +5374,6 @@ __metadata: languageName: node linkType: hard -"event-target-shim@npm:^5.0.0": - version: 5.0.1 - resolution: "event-target-shim@npm:5.0.1" - checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 - languageName: node - linkType: hard - "eventemitter3@npm:4.0.4": version: 4.0.4 resolution: "eventemitter3@npm:4.0.4" @@ -6572,13 +5381,6 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.0.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 - languageName: node - linkType: hard - "evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": version: 1.0.3 resolution: "evp_bytestokey@npm:1.0.3" @@ -6597,21 +5399,6 @@ __metadata: languageName: node linkType: hard -"expand-brackets@npm:^2.1.4": - version: 2.1.4 - resolution: "expand-brackets@npm:2.1.4" - dependencies: - debug: ^2.3.3 - define-property: ^0.2.5 - extend-shallow: ^2.0.1 - posix-character-classes: ^0.1.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: 1781d422e7edfa20009e2abda673cadb040a6037f0bd30fcd7357304f4f0c284afd420d7622722ca4a016f39b6d091841ab57b401c1f7e2e5131ac65b9f14fa1 - languageName: node - linkType: hard - "express@npm:^4.14.0": version: 4.18.2 resolution: "express@npm:4.18.2" @@ -6660,25 +5447,6 @@ __metadata: languageName: node linkType: hard -"extend-shallow@npm:^2.0.1": - version: 2.0.1 - resolution: "extend-shallow@npm:2.0.1" - dependencies: - is-extendable: ^0.1.0 - checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 - languageName: node - linkType: hard - -"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": - version: 3.0.2 - resolution: "extend-shallow@npm:3.0.2" - dependencies: - assign-symbols: ^1.0.0 - is-extendable: ^1.0.1 - checksum: a920b0cd5838a9995ace31dfd11ab5e79bf6e295aa566910ce53dff19f4b1c0fda2ef21f26b28586c7a2450ca2b42d97bd8c0f5cec9351a819222bf861e02461 - languageName: node - linkType: hard - "extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -6697,22 +5465,6 @@ __metadata: languageName: node linkType: hard -"extglob@npm:^2.0.4": - version: 2.0.4 - resolution: "extglob@npm:2.0.4" - dependencies: - array-unique: ^0.3.2 - define-property: ^1.0.0 - expand-brackets: ^2.1.4 - extend-shallow: ^2.0.1 - fragment-cache: ^0.2.1 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: a41531b8934735b684cef5e8c5a01d0f298d7d384500ceca38793a9ce098125aab04ee73e2d75d5b2901bc5dddd2b64e1b5e3bf19139ea48bac52af4a92f1d00 - languageName: node - linkType: hard - "extsprintf@npm:1.3.0": version: 1.3.0 resolution: "extsprintf@npm:1.3.0" @@ -6727,15 +5479,6 @@ __metadata: languageName: node linkType: hard -"fake-merkle-patricia-tree@npm:^1.0.1": - version: 1.0.1 - resolution: "fake-merkle-patricia-tree@npm:1.0.1" - dependencies: - checkpoint-store: ^1.1.0 - checksum: 8f9fe05bb5beabb31e4fbb8d2cfe83cfb36fd9f6ba78193dea8fab7a679470d45bb04c6f052d4f79da03e81129c5b5bed528902430184e1e11b4959f397019ac - languageName: node - linkType: hard - "fast-base64-decode@npm:^1.0.0": version: 1.0.0 resolution: "fast-base64-decode@npm:1.0.0" @@ -6757,6 +5500,13 @@ __metadata: languageName: node linkType: hard +"fast-diff@npm:^1.2.0": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 + languageName: node + linkType: hard + "fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.9": version: 3.2.11 resolution: "fast-glob@npm:3.2.11" @@ -6793,15 +5543,6 @@ __metadata: languageName: node linkType: hard -"fetch-ponyfill@npm:^4.0.0": - version: 4.1.0 - resolution: "fetch-ponyfill@npm:4.1.0" - dependencies: - node-fetch: ~1.7.1 - checksum: 00c85b661a8314e18cb314640b69d3b6e9635517d54290c8f366ddcb21b506ac8fa5d92f899c0fe21bc2163238130be2cf73ffd9d5a8a41a9866a55c52f57f16 - languageName: node - linkType: hard - "figures@npm:^2.0.0": version: 2.0.0 resolution: "figures@npm:2.0.0" @@ -6829,18 +5570,6 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^4.0.0": - version: 4.0.0 - resolution: "fill-range@npm:4.0.0" - dependencies: - extend-shallow: ^2.0.1 - is-number: ^3.0.0 - repeat-string: ^1.6.1 - to-regex-range: ^2.1.0 - checksum: dbb5102467786ab42bc7a3ec7380ae5d6bfd1b5177b2216de89e4a541193f8ba599a6db84651bd2c58c8921db41b8cc3d699ea83b477342d3ce404020f73c298 - languageName: node - linkType: hard - "fill-range@npm:^7.0.1": version: 7.0.1 resolution: "fill-range@npm:7.0.1" @@ -6865,16 +5594,6 @@ __metadata: languageName: node linkType: hard -"find-replace@npm:^1.0.3": - version: 1.0.3 - resolution: "find-replace@npm:1.0.3" - dependencies: - array-back: ^1.0.4 - test-value: ^2.1.0 - checksum: fd95f44e59bd54ea1c0169480952b339a4642cd62d81236fef7f87146d3bc00a042b17d81f896712e8542e01fe5c84e82ac37b6b77b4e3422abbcf7c13bbacfd - languageName: node - linkType: hard - "find-replace@npm:^3.0.0": version: 3.0.0 resolution: "find-replace@npm:3.0.0" @@ -6903,16 +5622,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^1.0.0": - version: 1.1.2 - resolution: "find-up@npm:1.1.2" - dependencies: - path-exists: ^2.0.0 - pinkie-promise: ^2.0.0 - checksum: a2cb9f4c9f06ee3a1e92ed71d5aed41ac8ae30aefa568132f6c556fac7678a5035126153b59eaec68da78ac409eef02503b2b059706bdbf232668d7245e3240a - languageName: node - linkType: hard - "find-up@npm:^2.1.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" @@ -6922,25 +5631,6 @@ __metadata: languageName: node linkType: hard -"find-yarn-workspace-root@npm:^1.2.1": - version: 1.2.1 - resolution: "find-yarn-workspace-root@npm:1.2.1" - dependencies: - fs-extra: ^4.0.3 - micromatch: ^3.1.4 - checksum: a8f4565fb1ead6122acc0d324fa3257c20f7b0c91b7b266dab9eee7251fb5558fcff5b35dbfd301bfd1cbb91c1cdd1799b28ffa5b9a92efd8c7ded3663652bbe - languageName: node - linkType: hard - -"find-yarn-workspace-root@npm:^2.0.0": - version: 2.0.0 - resolution: "find-yarn-workspace-root@npm:2.0.0" - dependencies: - micromatch: ^4.0.2 - checksum: fa5ca8f9d08fe7a54ce7c0a5931ff9b7e36f9ee7b9475fb13752bcea80ec6b5f180fa5102d60b376d5526ce924ea3fc6b19301262efa0a5d248dd710f3644242 - languageName: node - linkType: hard - "flat-cache@npm:^2.0.1": version: 2.0.1 resolution: "flat-cache@npm:2.0.1" @@ -6996,14 +5686,7 @@ __metadata: languageName: node linkType: hard -"flow-stoplight@npm:^1.0.0": - version: 1.0.0 - resolution: "flow-stoplight@npm:1.0.0" - checksum: 2f1f34629e724afe7de7b6cb7b5f9ef1b37fa5a4b8a10e24b9c1043872777c41f4c7e09994ecfd5bc70138a04966c3153c4e15187a24771f5d5151a325a96a2e - languageName: node - linkType: hard - -"follow-redirects@npm:^1.12.1, follow-redirects@npm:^1.14.0": +"follow-redirects@npm:^1.12.1": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" peerDependenciesMeta: @@ -7013,7 +5696,17 @@ __metadata: languageName: node linkType: hard -"for-each@npm:^0.3.3, for-each@npm:~0.3.3": +"follow-redirects@npm:^1.15.6": + version: 1.15.6 + resolution: "follow-redirects@npm:1.15.6" + peerDependenciesMeta: + debug: + optional: true + checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" dependencies: @@ -7022,10 +5715,13 @@ __metadata: languageName: node linkType: hard -"for-in@npm:^1.0.2": - version: 1.0.2 - resolution: "for-in@npm:1.0.2" - checksum: 09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 languageName: node linkType: hard @@ -7043,25 +5739,14 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^2.2.0": - version: 2.5.1 - resolution: "form-data@npm:2.5.1" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.6 - mime-types: ^2.1.12 - checksum: 5134ada56cc246b293a1ac7678dba6830000603a3979cf83ff7b2f21f2e3725202237cfb89e32bcb38a1d35727efbd3c3a22e65b42321e8ade8eec01ce755d08 - languageName: node - linkType: hard - -"form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c languageName: node linkType: hard @@ -7097,15 +5782,6 @@ __metadata: languageName: node linkType: hard -"fragment-cache@npm:^0.2.1": - version: 0.2.1 - resolution: "fragment-cache@npm:0.2.1" - dependencies: - map-cache: ^0.2.2 - checksum: 1cbbd0b0116b67d5790175de0038a11df23c1cd2e8dcdbade58ebba5594c2d641dade6b4f126d82a7b4a6ffc2ea12e3d387dbb64ea2ae97cf02847d436f60fdc - languageName: node - linkType: hard - "fresh@npm:0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" @@ -7126,7 +5802,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^4.0.2, fs-extra@npm:^4.0.3": +"fs-extra@npm:^4.0.2": version: 4.0.3 resolution: "fs-extra@npm:4.0.3" dependencies: @@ -7189,13 +5865,6 @@ __metadata: languageName: node linkType: hard -"fs-readdir-recursive@npm:^1.1.0": - version: 1.1.0 - resolution: "fs-readdir-recursive@npm:1.1.0" - checksum: 29d50f3d2128391c7fc9fd051c8b7ea45bcc8aa84daf31ef52b17218e20bfd2bd34d02382742801954cc8d1905832b68227f6b680a666ce525d8b6b75068ad1e - languageName: node - linkType: hard - "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" @@ -7241,13 +5910,20 @@ __metadata: languageName: node linkType: hard -"function-bind@npm:^1.1.1, function-bind@npm:~1.1.1": +"function-bind@npm:^1.1.1": version: 1.1.1 resolution: "function-bind@npm:1.1.1" checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a languageName: node linkType: hard +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + "function.prototype.name@npm:^1.1.5": version: 1.1.5 resolution: "function.prototype.name@npm:1.1.5" @@ -7260,6 +5936,18 @@ __metadata: languageName: node linkType: hard +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 + languageName: node + linkType: hard + "functional-red-black-tree@npm:^1.0.1, functional-red-black-tree@npm:~1.0.1": version: 1.0.1 resolution: "functional-red-black-tree@npm:1.0.1" @@ -7267,64 +5955,25 @@ __metadata: languageName: node linkType: hard -"functions-have-names@npm:^1.2.2": +"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 languageName: node linkType: hard -"ganache-core@npm:^2.13.2": - version: 2.13.2 - resolution: "ganache-core@npm:2.13.2" - dependencies: - abstract-leveldown: 3.0.0 - async: 2.6.2 - bip39: 2.5.0 - cachedown: 1.0.0 - clone: 2.1.2 - debug: 3.2.6 - encoding-down: 5.0.4 - eth-sig-util: 3.0.0 - ethereumjs-abi: 0.6.8 - ethereumjs-account: 3.0.0 - ethereumjs-block: 2.2.2 - ethereumjs-common: 1.5.0 - ethereumjs-tx: 2.1.2 - ethereumjs-util: 6.2.1 - ethereumjs-vm: 4.2.0 - ethereumjs-wallet: 0.6.5 - heap: 0.2.6 - keccak: 3.0.1 - level-sublevel: 6.6.4 - levelup: 3.1.1 - lodash: 4.17.20 - lru-cache: 5.1.1 - merkle-patricia-tree: 3.0.0 - patch-package: 6.2.2 - seedrandom: 3.0.1 - source-map-support: 0.5.12 - tmp: 0.1.0 - web3: 1.2.11 - web3-provider-engine: 14.2.1 - websocket: 1.0.32 - dependenciesMeta: - ethereumjs-wallet: - optional: true - web3: - optional: true - checksum: 799b275abd09259c88a4e78c335e807d14cc12d3a1ceb9d7cdeef484cf5fab541847edf9cf209f448190199dbd0796393d308d50e6823565154c17dd0c3a4048 - languageName: node - linkType: hard - -"ganache@npm:^7.4.0": - version: 7.5.0 - resolution: "ganache@npm:7.5.0" +"ganache@npm:^7.9.1": + version: 7.9.1 + resolution: "ganache@npm:7.9.1" dependencies: "@trufflesuite/bigint-buffer": 1.1.10 + "@trufflesuite/uws-js-unofficial": 20.30.0-unofficial.0 "@types/bn.js": ^5.1.0 "@types/lru-cache": 5.1.1 "@types/seedrandom": 3.0.1 + abstract-level: 1.0.3 + abstract-leveldown: 7.2.0 + async-eventemitter: 0.2.4 bufferutil: 4.0.5 emittery: 0.10.0 keccak: 3.0.2 @@ -7339,7 +5988,7 @@ __metadata: bin: ganache: dist/node/cli.js ganache-cli: dist/node/cli.js - checksum: 3baec5c71d066264bfd14ec9a47d17f82fdea198aa7c3f020975b3c35da81872853e306fdd397f22f109f7e01268eb4434a87bb30ef2d66624fbc6fc4ce0c1ad + checksum: 5807ef87ce7f82122790075001f6621af69e4a6b0a6a52be40b7cfae97a331b2dca7cfa0f6ebe0f3162cf5e88e393cd4dcb3aefeea7e3131285d9689e52e03ab languageName: node linkType: hard @@ -7359,13 +6008,6 @@ __metadata: languageName: node linkType: hard -"get-caller-file@npm:^1.0.1": - version: 1.0.3 - resolution: "get-caller-file@npm:1.0.3" - checksum: 2b90a7f848896abcebcdc0acc627a435bcf05b9cd280599bc980ebfcdc222416c3df12c24c4845f69adc4346728e8966f70b758f9369f3534182791dfbc25c05 - languageName: node - linkType: hard - "get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" @@ -7391,10 +6033,16 @@ __metadata: languageName: node linkType: hard -"get-port@npm:^3.1.0": - version: 3.2.0 - resolution: "get-port@npm:3.2.0" - checksum: 31f530326569683ac4b7452eb7573c40e9dbe52aec14d80745c35475261e6389160da153d5b8ae911150b4ce99003472b30c69ba5be0cedeaa7865b95542d168 +"get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + hasown: ^2.0.0 + checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 languageName: node linkType: hard @@ -7405,15 +6053,6 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^4.1.0": - version: 4.1.0 - resolution: "get-stream@npm:4.1.0" - dependencies: - pump: ^3.0.0 - checksum: 443e1914170c15bd52ff8ea6eff6dfc6d712b031303e36302d2778e3de2506af9ee964d6124010f7818736dcfde05c04ba7ca6cc26883106e084357a17ae7d73 - languageName: node - linkType: hard - "get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" @@ -7440,10 +6079,14 @@ __metadata: languageName: node linkType: hard -"get-value@npm:^2.0.3, get-value@npm:^2.0.6": - version: 2.0.6 - resolution: "get-value@npm:2.0.6" - checksum: 5c3b99cb5398ea8016bf46ff17afc5d1d286874d2ad38ca5edb6e87d75c0965b0094cb9a9dddef2c59c23d250702323539a7fbdd870620db38c7e7d7ec87c1eb +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: ^1.0.5 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 languageName: node linkType: hard @@ -7500,7 +6143,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.1.7, glob@npm:~7.1.6": +"glob@npm:7.1.7": version: 7.1.7 resolution: "glob@npm:7.1.7" dependencies: @@ -7528,6 +6171,21 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.3.10": + version: 10.3.12 + resolution: "glob@npm:10.3.12" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.6 + minimatch: ^9.0.1 + minipass: ^7.0.4 + path-scurry: ^1.10.2 + bin: + glob: dist/esm/bin.mjs + checksum: 2b0949d6363021aaa561b108ac317bf5a97271b8a5d7a5fac1a176e40e8068ecdcccc992f8a7e958593d501103ac06d673de92adc1efcbdab45edefe35f8d7c6 + languageName: node + linkType: hard + "glob@npm:^5.0.15": version: 5.0.15 resolution: "glob@npm:5.0.15" @@ -7555,7 +6213,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.1": +"glob@npm:^8.0.1, glob@npm:^8.0.3": version: 8.1.0 resolution: "glob@npm:8.1.0" dependencies: @@ -7614,10 +6272,12 @@ __metadata: languageName: node linkType: hard -"globals@npm:^9.18.0": - version: 9.18.0 - resolution: "globals@npm:9.18.0" - checksum: e9c066aecfdc5ea6f727344a4246ecc243aaf66ede3bffee10ddc0c73351794c25e727dd046090dcecd821199a63b9de6af299a6e3ba292c8b22f0a80ea32073 +"globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" + dependencies: + define-properties: ^1.1.3 + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 languageName: node linkType: hard @@ -7651,6 +6311,15 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + "got@npm:12.1.0": version: 12.1.0 resolution: "got@npm:12.1.0" @@ -7672,25 +6341,6 @@ __metadata: languageName: node linkType: hard -"got@npm:9.6.0": - version: 9.6.0 - resolution: "got@npm:9.6.0" - dependencies: - "@sindresorhus/is": ^0.14.0 - "@szmarczak/http-timer": ^1.1.2 - cacheable-request: ^6.0.0 - decompress-response: ^3.3.0 - duplexer3: ^0.1.4 - get-stream: ^4.1.0 - lowercase-keys: ^1.0.1 - mimic-response: ^1.0.1 - p-cancelable: ^1.0.0 - to-readable-stream: ^1.0.0 - url-parse-lax: ^3.0.0 - checksum: 941807bd9704bacf5eb401f0cc1212ffa1f67c6642f2d028fd75900471c221b1da2b8527f4553d2558f3faeda62ea1cf31665f8b002c6137f5de8732f07370b0 - languageName: node - linkType: hard - "got@npm:^7.1.0": version: 7.1.0 resolution: "got@npm:7.1.0" @@ -7713,7 +6363,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da @@ -7778,7 +6428,7 @@ __metadata: languageName: node linkType: hard -"hardhat-contract-sizer@npm:^2.6.1": +"hardhat-contract-sizer@npm:~2.6.0": version: 2.6.1 resolution: "hardhat-contract-sizer@npm:2.6.1" dependencies: @@ -7790,56 +6440,70 @@ __metadata: languageName: node linkType: hard -"hardhat-gas-reporter@npm:^1.0.9": - version: 1.0.9 - resolution: "hardhat-gas-reporter@npm:1.0.9" +"hardhat-gas-reporter@npm:^2.1.1": + version: 2.1.1 + resolution: "hardhat-gas-reporter@npm:2.1.1" dependencies: - array-uniq: 1.0.3 - eth-gas-reporter: ^0.2.25 + "@ethersproject/abi": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/units": ^5.7.0 + "@solidity-parser/parser": ^0.18.0 + axios: ^1.6.7 + brotli-wasm: ^2.0.1 + chalk: 4.1.2 + cli-table3: ^0.6.3 + ethereum-cryptography: ^2.1.3 + glob: ^10.3.10 + jsonschema: ^1.4.1 + lodash: ^4.17.21 + markdown-table: 2.0.0 sha1: ^1.1.1 + viem: 2.7.14 peerDependencies: - hardhat: ^2.0.2 - checksum: 77f8f8d085ff3d9d7787f0227e5355e1800f7d6707bc70171e0567bf69706703ae7f6f53dce1be1d409e7e71e3629a434c94b546bdbbc1e4c1af47cd5d0c6776 + hardhat: ^2.16.0 + checksum: ca06f18ed7cfaa794f23e92ec6835b0e364cea1361056708488e8610a3b50d74a2b47d9b3771df36fc00bb24380ab03f7bcf183a153b047a2896c2184245b5c6 languageName: node linkType: hard -"hardhat-tracer@npm:^2.3.2": - version: 2.3.2 - resolution: "hardhat-tracer@npm:2.3.2" +"hardhat-tracer@npm:^2.8.1": + version: 2.8.2 + resolution: "hardhat-tracer@npm:2.8.2" dependencies: chalk: ^4.1.2 + debug: ^4.3.4 ethers: ^5.6.1 peerDependencies: chai: 4.x - hardhat: 2.x - checksum: 6c1601e4ba808100ce0895fc7859fd09a3bbffcf42cf5e59c8caf7f0bcd53a729d0400750877a81622995fa6b8b9b33d2a34e604f2df2d0d41e1fa515330c1da + hardhat: ">=2.16 <2.21.0" + checksum: 8504f3eb4772ed61e67dd2a6377c84afc36ebfa2ba239bf0e8fc7006482a8a6e1a12e96c11ea4718e4334e1c0ae71eca894045fa2e4d1be538fb3d96faa17c1d languageName: node linkType: hard -"hardhat@npm:^2.11.2": - version: 2.11.2 - resolution: "hardhat@npm:2.11.2" +"hardhat@npm:~2.20.0": + version: 2.20.1 + resolution: "hardhat@npm:2.20.1" dependencies: "@ethersproject/abi": ^5.1.2 "@metamask/eth-sig-util": ^4.0.0 - "@nomicfoundation/ethereumjs-block": ^4.0.0 - "@nomicfoundation/ethereumjs-blockchain": ^6.0.0 - "@nomicfoundation/ethereumjs-common": ^3.0.0 - "@nomicfoundation/ethereumjs-evm": ^1.0.0 - "@nomicfoundation/ethereumjs-rlp": ^4.0.0 - "@nomicfoundation/ethereumjs-statemanager": ^1.0.0 - "@nomicfoundation/ethereumjs-trie": ^5.0.0 - "@nomicfoundation/ethereumjs-tx": ^4.0.0 - "@nomicfoundation/ethereumjs-util": ^8.0.0 - "@nomicfoundation/ethereumjs-vm": ^6.0.0 - "@nomicfoundation/solidity-analyzer": ^0.0.3 + "@nomicfoundation/ethereumjs-block": 5.0.4 + "@nomicfoundation/ethereumjs-blockchain": 7.0.4 + "@nomicfoundation/ethereumjs-common": 4.0.4 + "@nomicfoundation/ethereumjs-evm": 2.0.4 + "@nomicfoundation/ethereumjs-rlp": 5.0.4 + "@nomicfoundation/ethereumjs-statemanager": 2.0.4 + "@nomicfoundation/ethereumjs-trie": 6.0.4 + "@nomicfoundation/ethereumjs-tx": 5.0.4 + "@nomicfoundation/ethereumjs-util": 9.0.4 + "@nomicfoundation/ethereumjs-verkle": 0.0.2 + "@nomicfoundation/ethereumjs-vm": 7.0.4 + "@nomicfoundation/solidity-analyzer": ^0.1.0 "@sentry/node": ^5.18.1 "@types/bn.js": ^5.1.0 "@types/lru-cache": ^5.1.0 - abort-controller: ^3.0.0 adm-zip: ^0.4.16 aggregate-error: ^3.0.0 ansi-escapes: ^4.3.0 + boxen: ^5.1.2 chalk: ^2.4.2 chokidar: ^3.4.0 ci-info: ^2.0.0 @@ -7859,7 +6523,6 @@ __metadata: mnemonist: ^0.38.0 mocha: ^10.0.0 p-map: ^4.0.0 - qs: ^6.7.0 raw-body: ^2.4.1 resolve: 1.17.0 semver: ^6.3.0 @@ -7867,7 +6530,7 @@ __metadata: source-map-support: ^0.5.13 stacktrace-parser: ^0.1.10 tsort: 0.0.1 - undici: ^5.4.0 + undici: ^5.14.0 uuid: ^8.3.2 ws: ^7.4.6 peerDependencies: @@ -7879,17 +6542,8 @@ __metadata: typescript: optional: true bin: - hardhat: internal/cli/cli.js - checksum: 6fc289931c970a16fe09f7aa2b14f8b4f4a63304895be7e89112d4065cfdb15887d90cdd827d10f413fb5cc1ca09fb0b512b7ffc79dc6bc121368bda70dffb4a - languageName: node - linkType: hard - -"has-ansi@npm:^2.0.0": - version: 2.0.0 - resolution: "has-ansi@npm:2.0.0" - dependencies: - ansi-regex: ^2.0.0 - checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec + hardhat: internal/cli/bootstrap.js + checksum: 191f2878f18740a59afa9afa3486487a6e2c7c57d54410779349a40a1046117b6329a151f6e66bba0c2a94b15f9880f38a1e4d7053c33eca022a3de5669326e8 languageName: node linkType: hard @@ -7930,6 +6584,22 @@ __metadata: languageName: node linkType: hard +"has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 + languageName: node + linkType: hard + "has-symbol-support-x@npm:^1.4.1": version: 1.4.2 resolution: "has-symbol-support-x@npm:1.4.2" @@ -7962,53 +6632,23 @@ __metadata: languageName: node linkType: hard -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - -"has-value@npm:^0.3.1": - version: 0.3.1 - resolution: "has-value@npm:0.3.1" - dependencies: - get-value: ^2.0.3 - has-values: ^0.1.4 - isobject: ^2.0.0 - checksum: 29e2a1e6571dad83451b769c7ce032fce6009f65bccace07c2962d3ad4d5530b6743d8f3229e4ecf3ea8e905d23a752c5f7089100c1f3162039fa6dc3976558f - languageName: node - linkType: hard - -"has-value@npm:^1.0.0": - version: 1.0.0 - resolution: "has-value@npm:1.0.0" +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" dependencies: - get-value: ^2.0.6 - has-values: ^1.0.0 - isobject: ^3.0.0 - checksum: b9421d354e44f03d3272ac39fd49f804f19bc1e4fa3ceef7745df43d6b402053f828445c03226b21d7d934a21ac9cf4bc569396dc312f496ddff873197bbd847 - languageName: node - linkType: hard - -"has-values@npm:^0.1.4": - version: 0.1.4 - resolution: "has-values@npm:0.1.4" - checksum: ab1c4bcaf811ccd1856c11cfe90e62fca9e2b026ebe474233a3d282d8d67e3b59ed85b622c7673bac3db198cb98bd1da2b39300a2f98e453729b115350af49bc + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d languageName: node linkType: hard -"has-values@npm:^1.0.0": - version: 1.0.0 - resolution: "has-values@npm:1.0.0" - dependencies: - is-number: ^3.0.0 - kind-of: ^4.0.0 - checksum: 77e6693f732b5e4cf6c38dfe85fdcefad0fab011af74995c3e83863fabf5e3a836f406d83565816baa0bc0a523c9410db8b990fe977074d61aeb6d8f4fcffa11 +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 languageName: node linkType: hard -"has@npm:^1.0.3, has@npm:~1.0.3": +"has@npm:^1.0.3": version: 1.0.3 resolution: "has@npm:1.0.3" dependencies: @@ -8035,16 +6675,6 @@ __metadata: languageName: node linkType: hard -"hash.js@npm:1.1.3": - version: 1.1.3 - resolution: "hash.js@npm:1.1.3" - dependencies: - inherits: ^2.0.3 - minimalistic-assert: ^1.0.0 - checksum: 93de6f178bf71feee38f66868a57ecb5602d937c1ccd69951b0bfec1488813b6afdbb4a81ddb2c62488c419b4a35af352298b006f14c9cfbf5b872c4191b657f - languageName: node - linkType: hard - "hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.5, hash.js@npm:^1.1.7": version: 1.1.7 resolution: "hash.js@npm:1.1.7" @@ -8055,6 +6685,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + "hdkey@npm:^2.0.1": version: 2.0.1 resolution: "hdkey@npm:2.0.1" @@ -8075,13 +6714,6 @@ __metadata: languageName: node linkType: hard -"heap@npm:0.2.6": - version: 0.2.6 - resolution: "heap@npm:0.2.6" - checksum: 1291b9b9efb5090d01c6d04a89c91ca6e0e0eb7f3694d8254f7a5effcc5ab9249bc3d16767b276645ffe86d9b2bbd82ed977f8988f55375e9f2a2c80647ebbdc - languageName: node - linkType: hard - "heap@npm:>= 0.2.0": version: 0.2.7 resolution: "heap@npm:0.2.7" @@ -8100,35 +6732,6 @@ __metadata: languageName: node linkType: hard -"home-or-tmp@npm:^2.0.0": - version: 2.0.0 - resolution: "home-or-tmp@npm:2.0.0" - dependencies: - os-homedir: ^1.0.0 - os-tmpdir: ^1.0.1 - checksum: b783c6ffd22f716d82f53e8c781cbe49bc9f4109a89ea86a27951e54c0bd335caf06bd828be2958cd9f4681986df1739558ae786abda6298cdd6d3edc2c362f1 - languageName: node - linkType: hard - -"hosted-git-info@npm:^2.1.4, hosted-git-info@npm:^2.6.0": - version: 2.8.9 - resolution: "hosted-git-info@npm:2.8.9" - checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd - languageName: node - linkType: hard - -"http-basic@npm:^8.1.1": - version: 8.1.3 - resolution: "http-basic@npm:8.1.3" - dependencies: - caseless: ^0.12.0 - concat-stream: ^1.6.2 - http-response-object: ^3.0.1 - parse-cache-control: ^1.0.1 - checksum: 7df5dc4d4b6eb8cc3beaa77f8e5c3074288ec3835abd83c85e5bb66d8a95a0ef97664d862caf5e225698cb795f78f9a5abd0d39404e5356ccd3e5e10c87936a5 - languageName: node - linkType: hard - "http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -8162,17 +6765,8 @@ __metadata: dependencies: "@tootallnate/once": 2 agent-base: 6 - debug: 4 - checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 - languageName: node - linkType: hard - -"http-response-object@npm:^3.0.1": - version: 3.0.2 - resolution: "http-response-object@npm:3.0.2" - dependencies: - "@types/node": ^10.0.3 - checksum: 6cbdcb4ce7b27c9158a131b772c903ed54add2ba831e29cc165e91c3969fa6f8105ddf924aac5b954b534ad15a1ae697b693331b2be5281ee24d79aae20c3264 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 languageName: node linkType: hard @@ -8273,6 +6867,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.2.4": + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 + languageName: node + linkType: hard + "immediate@npm:^3.2.3": version: 3.3.0 resolution: "immediate@npm:3.3.0" @@ -8304,7 +6905,7 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -8345,7 +6946,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3, inherits@npm:~2.0.4": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -8391,26 +6992,21 @@ __metadata: languageName: node linkType: hard -"interpret@npm:^1.0.0": - version: 1.4.0 - resolution: "interpret@npm:1.4.0" - checksum: 2e5f51268b5941e4a17e4ef0575bc91ed0ab5f8515e3cf77486f7c14d13f3010df9c0959f37063dcc96e78d12dc6b0bb1b9e111cdfe69771f4656d2993d36155 - languageName: node - linkType: hard - -"invariant@npm:^2.2.2": - version: 2.2.4 - resolution: "invariant@npm:2.2.4" +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" dependencies: - loose-envify: ^1.0.0 - checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + es-errors: ^1.3.0 + hasown: ^2.0.0 + side-channel: ^1.0.4 + checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb languageName: node linkType: hard -"invert-kv@npm:^1.0.0": - version: 1.0.0 - resolution: "invert-kv@npm:1.0.0" - checksum: aebeee31dda3b3d25ffd242e9a050926e7fe5df642d60953ab183aca1a7d1ffb39922eb2618affb0e850cf2923116f0da1345367759d88d097df5da1f1e1590e +"interpret@npm:^1.0.0": + version: 1.4.0 + resolution: "interpret@npm:1.4.0" + checksum: 2e5f51268b5941e4a17e4ef0575bc91ed0ab5f8515e3cf77486f7c14d13f3010df9c0959f37063dcc96e78d12dc6b0bb1b9e111cdfe69771f4656d2993d36155 languageName: node linkType: hard @@ -8437,24 +7033,6 @@ __metadata: languageName: node linkType: hard -"is-accessor-descriptor@npm:^0.1.6": - version: 0.1.6 - resolution: "is-accessor-descriptor@npm:0.1.6" - dependencies: - kind-of: ^3.0.2 - checksum: 3d629a086a9585bc16a83a8e8a3416f400023301855cafb7ccc9a1d63145b7480f0ad28877dcc2cce09492c4ec1c39ef4c071996f24ee6ac626be4217b8ffc8a - languageName: node - linkType: hard - -"is-accessor-descriptor@npm:^1.0.0": - version: 1.0.0 - resolution: "is-accessor-descriptor@npm:1.0.0" - dependencies: - kind-of: ^6.0.0 - checksum: 8e475968e9b22f9849343c25854fa24492dbe8ba0dea1a818978f9f1b887339190b022c9300d08c47fe36f1b913d70ce8cbaca00369c55a56705fdb7caed37fe - languageName: node - linkType: hard - "is-arguments@npm:^1.0.4": version: 1.1.0 resolution: "is-arguments@npm:1.1.0" @@ -8464,6 +7042,16 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -8496,13 +7084,6 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^1.1.5": - version: 1.1.6 - resolution: "is-buffer@npm:1.1.6" - checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 - languageName: node - linkType: hard - "is-buffer@npm:^2.0.5, is-buffer@npm:~2.0.3": version: 2.0.5 resolution: "is-buffer@npm:2.0.5" @@ -8517,17 +7098,6 @@ __metadata: languageName: node linkType: hard -"is-ci@npm:^2.0.0": - version: 2.0.0 - resolution: "is-ci@npm:2.0.0" - dependencies: - ci-info: ^2.0.0 - bin: - is-ci: bin.js - checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 - languageName: node - linkType: hard - "is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": version: 2.11.0 resolution: "is-core-module@npm:2.11.0" @@ -8537,21 +7107,12 @@ __metadata: languageName: node linkType: hard -"is-data-descriptor@npm:^0.1.4": - version: 0.1.4 - resolution: "is-data-descriptor@npm:0.1.4" - dependencies: - kind-of: ^3.0.2 - checksum: 5c622e078ba933a78338ae398a3d1fc5c23332b395312daf4f74bab4afb10d061cea74821add726cb4db8b946ba36217ee71a24fe71dd5bca4632edb7f6aad87 - languageName: node - linkType: hard - -"is-data-descriptor@npm:^1.0.0": - version: 1.0.0 - resolution: "is-data-descriptor@npm:1.0.0" +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" dependencies: - kind-of: ^6.0.0 - checksum: e705e6816241c013b05a65dc452244ee378d1c3e3842bd140beabe6e12c0d700ef23c91803f971aa7b091fb0573c5da8963af34a2b573337d87bc3e1f53a4e6d + is-typed-array: ^1.1.13 + checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 languageName: node linkType: hard @@ -8562,28 +7123,6 @@ __metadata: languageName: node linkType: hard -"is-descriptor@npm:^0.1.0": - version: 0.1.6 - resolution: "is-descriptor@npm:0.1.6" - dependencies: - is-accessor-descriptor: ^0.1.6 - is-data-descriptor: ^0.1.4 - kind-of: ^5.0.0 - checksum: 0f780c1b46b465f71d970fd7754096ffdb7b69fd8797ca1f5069c163eaedcd6a20ec4a50af669075c9ebcfb5266d2e53c8b227e485eefdb0d1fee09aa1dd8ab6 - languageName: node - linkType: hard - -"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": - version: 1.0.2 - resolution: "is-descriptor@npm:1.0.2" - dependencies: - is-accessor-descriptor: ^1.0.0 - is-data-descriptor: ^1.0.0 - kind-of: ^6.0.2 - checksum: 2ed623560bee035fb67b23e32ce885700bef8abe3fbf8c909907d86507b91a2c89a9d3a4d835a4d7334dd5db0237a0aeae9ca109c1e4ef1c0e7b577c0846ab5a - languageName: node - linkType: hard - "is-directory@npm:^0.3.1": version: 0.3.1 resolution: "is-directory@npm:0.3.1" @@ -8591,31 +7130,6 @@ __metadata: languageName: node linkType: hard -"is-docker@npm:^2.0.0": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 - languageName: node - linkType: hard - -"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": - version: 0.1.1 - resolution: "is-extendable@npm:0.1.1" - checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 - languageName: node - linkType: hard - -"is-extendable@npm:^1.0.1": - version: 1.0.1 - resolution: "is-extendable@npm:1.0.1" - dependencies: - is-plain-object: ^2.0.4 - checksum: db07bc1e9de6170de70eff7001943691f05b9d1547730b11be01c0ebfe67362912ba743cf4be6fd20a5e03b4180c685dad80b7c509fe717037e3eee30ad8e84f - languageName: node - linkType: hard - "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -8623,29 +7137,6 @@ __metadata: languageName: node linkType: hard -"is-finite@npm:^1.0.0": - version: 1.1.0 - resolution: "is-finite@npm:1.1.0" - checksum: 532b97ed3d03e04c6bd203984d9e4ba3c0c390efee492bad5d1d1cd1802a68ab27adbd3ef6382f6312bed6c8bb1bd3e325ea79a8dc8fe080ed7a06f5f97b93e7 - languageName: node - linkType: hard - -"is-fn@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fn@npm:1.0.0" - checksum: eeea1e536716f93a92dc1a8550b2c0909fe74bb5144d0fb6d65e0d31eb9c06c30559f69d83a9351d2288cc7293b43bc074e0fab5fae19e312ff38aa0c7672827 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^1.0.0": - version: 1.0.0 - resolution: "is-fullwidth-code-point@npm:1.0.0" - dependencies: - number-is-nan: ^1.0.0 - checksum: 4d46a7465a66a8aebcc5340d3b63a56602133874af576a9ca42c6f0f4bd787a743605771c5f246db77da96605fefeffb65fc1dbe862dcc7328f4b4d03edf5a57 - languageName: node - linkType: hard - "is-fullwidth-code-point@npm:^2.0.0": version: 2.0.0 resolution: "is-fullwidth-code-point@npm:2.0.0" @@ -8706,6 +7197,13 @@ __metadata: languageName: node linkType: hard +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd + languageName: node + linkType: hard + "is-number-object@npm:^1.0.4": version: 1.0.4 resolution: "is-number-object@npm:1.0.4" @@ -8713,15 +7211,6 @@ __metadata: languageName: node linkType: hard -"is-number@npm:^3.0.0": - version: 3.0.0 - resolution: "is-number@npm:3.0.0" - dependencies: - kind-of: ^3.0.2 - checksum: 0c62bf8e9d72c4dd203a74d8cfc751c746e75513380fef420cda8237e619a988ee43e678ddb23c87ac24d91ac0fe9f22e4ffb1301a50310c697e9d73ca3994e9 - languageName: node - linkType: hard - "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -8757,16 +7246,7 @@ __metadata: languageName: node linkType: hard -"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: ^3.0.1 - checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca - languageName: node - linkType: hard - -"is-regex@npm:^1.0.4, is-regex@npm:^1.1.4": +"is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" dependencies: @@ -8776,15 +7256,6 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:~1.0.5": - version: 1.0.5 - resolution: "is-regex@npm:1.0.5" - dependencies: - has: ^1.0.3 - checksum: 33e70e084a949ee4c57ee12f2c26e9f5e9c09bb988638b116a0381909804b8556e244060ba4b051d2b6228d54447e9eaf6219f3c5a7b6d0afe70a951feec174b - languageName: node - linkType: hard - "is-retry-allowed@npm:^1.0.0": version: 1.2.0 resolution: "is-retry-allowed@npm:1.2.0" @@ -8801,7 +7272,16 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^1.0.0, is-stream@npm:^1.0.1": +"is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: ^1.0.7 + checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 + languageName: node + linkType: hard + +"is-stream@npm:^1.0.0": version: 1.1.0 resolution: "is-stream@npm:1.1.0" checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae @@ -8826,6 +7306,15 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: ^1.1.14 + checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 + languageName: node + linkType: hard + "is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": version: 1.1.9 resolution: "is-typed-array@npm:1.1.9" @@ -8853,20 +7342,6 @@ __metadata: languageName: node linkType: hard -"is-url@npm:^1.2.4": - version: 1.2.4 - resolution: "is-url@npm:1.2.4" - checksum: 100e74b3b1feab87a43ef7653736e88d997eb7bd32e71fd3ebc413e58c1cbe56269699c776aaea84244b0567f2a7d68dfaa512a062293ed2f9fdecb394148432 - languageName: node - linkType: hard - -"is-utf8@npm:^0.2.0": - version: 0.2.1 - resolution: "is-utf8@npm:0.2.1" - checksum: 167ccd2be869fc228cc62c1a28df4b78c6b5485d15a29027d3b5dceb09b383e86a3522008b56dcac14b592b22f0a224388718c2505027a994fd8471465de54b3 - languageName: node - linkType: hard - "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -8876,22 +7351,6 @@ __metadata: languageName: node linkType: hard -"is-windows@npm:^1.0.2": - version: 1.0.2 - resolution: "is-windows@npm:1.0.2" - checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 - languageName: node - linkType: hard - -"is-wsl@npm:^2.1.1": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: ^2.0.0 - checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 - languageName: node - linkType: hard - "isarray@npm:0.0.1": version: 0.0.1 resolution: "isarray@npm:0.0.1" @@ -8899,13 +7358,20 @@ __metadata: languageName: node linkType: hard -"isarray@npm:1.0.0, isarray@npm:^1.0.0, isarray@npm:~1.0.0": +"isarray@npm:^1.0.0, isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab languageName: node linkType: hard +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -8913,22 +7379,6 @@ __metadata: languageName: node linkType: hard -"isobject@npm:^2.0.0": - version: 2.1.0 - resolution: "isobject@npm:2.1.0" - dependencies: - isarray: 1.0.0 - checksum: 811c6f5a866877d31f0606a88af4a45f282544de886bf29f6a34c46616a1ae2ed17076cc6bf34c0128f33eecf7e1fcaa2c82cf3770560d3e26810894e96ae79f - languageName: node - linkType: hard - -"isobject@npm:^3.0.0, isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 - languageName: node - linkType: hard - "isomorphic-unfetch@npm:^3.0.0": version: 3.1.0 resolution: "isomorphic-unfetch@npm:3.1.0" @@ -8939,6 +7389,15 @@ __metadata: languageName: node linkType: hard +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 + languageName: node + linkType: hard + "isstream@npm:~0.1.2": version: 0.1.2 resolution: "isstream@npm:0.1.2" @@ -8956,6 +7415,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^2.3.6": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + "js-cookie@npm:^2.2.1": version: 2.2.1 resolution: "js-cookie@npm:2.2.1" @@ -8984,13 +7456,6 @@ __metadata: languageName: node linkType: hard -"js-sha3@npm:0.5.7, js-sha3@npm:^0.5.7": - version: 0.5.7 - resolution: "js-sha3@npm:0.5.7" - checksum: 973a28ea4b26cc7f12d2ab24f796e24ee4a71eef45a6634a052f6eb38cf8b2333db798e896e6e094ea6fa4dfe8e42a2a7942b425cf40da3f866623fd05bb91ea - languageName: node - linkType: hard - "js-sha3@npm:0.8.0, js-sha3@npm:^0.8.0": version: 0.8.0 resolution: "js-sha3@npm:0.8.0" @@ -8998,6 +7463,13 @@ __metadata: languageName: node linkType: hard +"js-sha3@npm:^0.5.7": + version: 0.5.7 + resolution: "js-sha3@npm:0.5.7" + checksum: 973a28ea4b26cc7f12d2ab24f796e24ee4a71eef45a6634a052f6eb38cf8b2333db798e896e6e094ea6fa4dfe8e42a2a7942b425cf40da3f866623fd05bb91ea + languageName: node + linkType: hard + "js-sha512@npm:^0.8.0": version: 0.8.0 resolution: "js-sha512@npm:0.8.0" @@ -9005,20 +7477,13 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": +"js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 languageName: node linkType: hard -"js-tokens@npm:^3.0.2": - version: 3.0.2 - resolution: "js-tokens@npm:3.0.2" - checksum: ff24cf90e6e4ac446eba56e604781c1aaf3bdaf9b13a00596a0ebd972fa3b25dc83c0f0f67289c33252abb4111e0d14e952a5d9ffb61f5c22532d555ebd8d8a9 - languageName: node - linkType: hard - "js-yaml@npm:3.13.1": version: 3.13.1 resolution: "js-yaml@npm:3.13.1" @@ -9061,31 +7526,6 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^1.3.0": - version: 1.3.0 - resolution: "jsesc@npm:1.3.0" - bin: - jsesc: bin/jsesc - checksum: 9384cc72bf8ef7f2eb75fea64176b8b0c1c5e77604854c72cb4670b7072e112e3baaa69ef134be98cb078834a7812b0bfe676ad441ccd749a59427f5ed2127f1 - languageName: node - linkType: hard - -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" - bin: - jsesc: bin/jsesc - checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 - languageName: node - linkType: hard - -"json-buffer@npm:3.0.0": - version: 3.0.0 - resolution: "json-buffer@npm:3.0.0" - checksum: 0cecacb8025370686a916069a2ff81f7d55167421b6aa7270ee74e244012650dd6bce22b0852202ea7ff8624fce50ff0ec1bdf95914ccb4553426e290d5a63fa - languageName: node - linkType: hard - "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" @@ -9100,33 +7540,10 @@ __metadata: languageName: node linkType: hard -"json-rpc-engine@npm:^3.4.0, json-rpc-engine@npm:^3.6.0": - version: 3.8.0 - resolution: "json-rpc-engine@npm:3.8.0" - dependencies: - async: ^2.0.1 - babel-preset-env: ^1.7.0 - babelify: ^7.3.0 - json-rpc-error: ^2.0.0 - promise-to-callback: ^1.0.0 - safe-event-emitter: ^1.0.1 - checksum: 4a02ddda196b68717cdcdf9bc8eac91f956b717431daf1f317e016d564bd5b8974e8a66f75fd1f069d63b8e944128020ec7c371f28cf29ac0951d3338b2f667c - languageName: node - linkType: hard - -"json-rpc-error@npm:^2.0.0": - version: 2.0.0 - resolution: "json-rpc-error@npm:2.0.0" - dependencies: - inherits: ^2.0.1 - checksum: bbfb1ff82d0605b4dfd4ac6d093e863a8f623e0e83a098ccab5711a08d2ae09ea603260d4573a524e596701e64733690a5c31901e99daebe05b09053d8702d0c - languageName: node - linkType: hard - -"json-rpc-random-id@npm:^1.0.0": - version: 1.0.1 - resolution: "json-rpc-random-id@npm:1.0.1" - checksum: fcd2e884193a129ace4002bd65a86e9cdb206733b4693baea77bd8b372cf8de3043fbea27716a2c9a716581a908ca8d978d9dfec4847eb2cf77edb4cf4b2252c +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f languageName: node linkType: hard @@ -9158,15 +7575,6 @@ __metadata: languageName: node linkType: hard -"json-stable-stringify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify@npm:1.0.1" - dependencies: - jsonify: ~0.0.0 - checksum: 65d6cbf0fca72a4136999f65f4401cf39a129f7aeff0fdd987ac3d3423a2113659294045fb8377e6e20d865cac32b1b8d70f3d87346c9786adcee60661d96ca5 - languageName: node - linkType: hard - "json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -9174,15 +7582,6 @@ __metadata: languageName: node linkType: hard -"json5@npm:^0.5.1": - version: 0.5.1 - resolution: "json5@npm:0.5.1" - bin: - json5: lib/cli.js - checksum: 9b85bf06955b23eaa4b7328aa8892e3887e81ca731dd27af04a5f5f1458fbc5e1de57a24442e3272f8a888dd1abe1cb68eb693324035f6b3aeba4fcab7667d62 - languageName: node - linkType: hard - "json5@npm:^1.0.1": version: 1.0.1 resolution: "json5@npm:1.0.1" @@ -9231,13 +7630,6 @@ __metadata: languageName: node linkType: hard -"jsonify@npm:~0.0.0": - version: 0.0.0 - resolution: "jsonify@npm:0.0.0" - checksum: d8d4ed476c116e6987a460dcb82f22284686caae9f498ac87b0502c1765ac1522f4f450a4cad4cc368d202fd3b27a3860735140a82867fc6d558f5f199c38bce - languageName: node - linkType: hard - "jsonschema@npm:^1.2.4": version: 1.4.0 resolution: "jsonschema@npm:1.4.0" @@ -9245,6 +7637,13 @@ __metadata: languageName: node linkType: hard +"jsonschema@npm:^1.4.1": + version: 1.4.1 + resolution: "jsonschema@npm:1.4.1" + checksum: 1ef02a6cd9bc32241ec86bbf1300bdbc3b5f2d8df6eb795517cf7d1cd9909e7beba1e54fdf73990fd66be98a182bda9add9607296b0cb00b1348212988e424b2 + languageName: node + linkType: hard + "jsprim@npm:^1.2.2": version: 1.4.1 resolution: "jsprim@npm:1.4.1" @@ -9257,17 +7656,6 @@ __metadata: languageName: node linkType: hard -"keccak@npm:3.0.1": - version: 3.0.1 - resolution: "keccak@npm:3.0.1" - dependencies: - node-addon-api: ^2.0.0 - node-gyp: latest - node-gyp-build: ^4.2.0 - checksum: 1de1b62fbb3e035ee186232b11f154bd5c2c12a2d910bc8ec313dab412b6f39ddc51d3a105618dd8de752875da0ead21abb0eb1d4e7d7b17771a4acbb7159390 - languageName: node - linkType: hard - "keccak@npm:3.0.2, keccak@npm:^3.0.0, keccak@npm:^3.0.2": version: 3.0.2 resolution: "keccak@npm:3.0.2" @@ -9289,56 +7677,13 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^3.0.0": - version: 3.1.0 - resolution: "keyv@npm:3.1.0" - dependencies: - json-buffer: 3.0.0 - checksum: bb7e8f3acffdbafbc2dd5b63f377fe6ec4c0e2c44fc82720449ef8ab54f4a7ce3802671ed94c0f475ae0a8549703353a2124561fcf3317010c141b32ca1ce903 - languageName: node - linkType: hard - -"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": - version: 3.2.2 - resolution: "kind-of@npm:3.2.2" - dependencies: - is-buffer: ^1.1.5 - checksum: e898df8ca2f31038f27d24f0b8080da7be274f986bc6ed176f37c77c454d76627619e1681f6f9d2e8d2fd7557a18ecc419a6bb54e422abcbb8da8f1a75e4b386 - languageName: node - linkType: hard - -"kind-of@npm:^4.0.0": - version: 4.0.0 - resolution: "kind-of@npm:4.0.0" - dependencies: - is-buffer: ^1.1.5 - checksum: 1b9e7624a8771b5a2489026e820f3bbbcc67893e1345804a56b23a91e9069965854d2a223a7c6ee563c45be9d8c6ff1ef87f28ed5f0d1a8d00d9dcbb067c529f - languageName: node - linkType: hard - -"kind-of@npm:^5.0.0": - version: 5.1.0 - resolution: "kind-of@npm:5.1.0" - checksum: f2a0102ae0cf19c4a953397e552571bad2b588b53282874f25fca7236396e650e2db50d41f9f516bd402536e4df968dbb51b8e69e4d5d4a7173def78448f7bab - languageName: node - linkType: hard - -"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": +"kind-of@npm:^6.0.2": version: 6.0.3 resolution: "kind-of@npm:6.0.3" checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b languageName: node linkType: hard -"klaw-sync@npm:^6.0.0": - version: 6.0.0 - resolution: "klaw-sync@npm:6.0.0" - dependencies: - graceful-fs: ^4.1.11 - checksum: 0da397f8961313c3ef8f79fb63af9002cde5a8fb2aeb1a37351feff0dd6006129c790400c3f5c3b4e757bedcabb13d21ec0a5eaef5a593d59515d4f2c291e475 - languageName: node - linkType: hard - "klaw@npm:^1.0.0": version: 1.3.1 resolution: "klaw@npm:1.3.1" @@ -9351,15 +7696,6 @@ __metadata: languageName: node linkType: hard -"lcid@npm:^1.0.0": - version: 1.0.0 - resolution: "lcid@npm:1.0.0" - dependencies: - invert-kv: ^1.0.0 - checksum: e8c7a4db07663068c5c44b650938a2bc41aa992037eebb69376214320f202c1250e70b50c32f939e28345fd30c2d35b8e8cd9a19d5932c398246a864ce54843d - languageName: node - linkType: hard - "level-codec@npm:^9.0.0": version: 9.0.2 resolution: "level-codec@npm:9.0.2" @@ -9419,17 +7755,6 @@ __metadata: languageName: node linkType: hard -"level-iterator-stream@npm:^2.0.3": - version: 2.0.3 - resolution: "level-iterator-stream@npm:2.0.3" - dependencies: - inherits: ^2.0.1 - readable-stream: ^2.0.5 - xtend: ^4.0.0 - checksum: dd4211798d032a06ebc3e9c5a3a969b003cb15f1fe6398d9c50c87dc8b0bf8b07197cada253fd7f8c4a933f3c86e12bb041df1561c89b749ac4b991d6e68b17f - languageName: node - linkType: hard - "level-iterator-stream@npm:~1.3.0": version: 1.3.1 resolution: "level-iterator-stream@npm:1.3.1" @@ -9442,17 +7767,6 @@ __metadata: languageName: node linkType: hard -"level-iterator-stream@npm:~3.0.0": - version: 3.0.1 - resolution: "level-iterator-stream@npm:3.0.1" - dependencies: - inherits: ^2.0.1 - readable-stream: ^2.3.6 - xtend: ^4.0.0 - checksum: f3348316907c70163ea15319ef7e28c21c6b4b948616e11dcbbb8e3dab9ec5b39f7bf13e0d53f7d23c69641b7a2985a4911c5c9a03bd57a07f1af469aba6e3a8 - languageName: node - linkType: hard - "level-iterator-stream@npm:~4.0.0": version: 4.0.2 resolution: "level-iterator-stream@npm:4.0.2" @@ -9464,16 +7778,6 @@ __metadata: languageName: node linkType: hard -"level-mem@npm:^3.0.1": - version: 3.0.1 - resolution: "level-mem@npm:3.0.1" - dependencies: - level-packager: ~4.0.0 - memdown: ~3.0.0 - checksum: e4c680922afc3c8cd4502d761ab610c8aa7bcacde2550a0a463e1db069eeb55b6b7bec0bb7fda564cec82422944776f9909fe101b0d7746ad8f4f7446ec2a5cd - languageName: node - linkType: hard - "level-mem@npm:^5.0.1": version: 5.0.1 resolution: "level-mem@npm:5.0.1" @@ -9494,43 +7798,6 @@ __metadata: languageName: node linkType: hard -"level-packager@npm:~4.0.0": - version: 4.0.1 - resolution: "level-packager@npm:4.0.1" - dependencies: - encoding-down: ~5.0.0 - levelup: ^3.0.0 - checksum: af33054cfdf1f3cb409941c2e6a67190c0437f8b57a518fa1d40d3f9fd75edbb72c2c17595a52b10030fe2d64c8ef474ddb570f925d88402c94cfc95263865cb - languageName: node - linkType: hard - -"level-post@npm:^1.0.7": - version: 1.0.7 - resolution: "level-post@npm:1.0.7" - dependencies: - ltgt: ^2.1.2 - checksum: 27239cfebe2004036d7ed0ace860d03f829f099de62baf727cce53bd99cb06bfc4a202fa7cb828847fa01c421bab13d9d3e79c9554f5cffff681541dda575218 - languageName: node - linkType: hard - -"level-sublevel@npm:6.6.4": - version: 6.6.4 - resolution: "level-sublevel@npm:6.6.4" - dependencies: - bytewise: ~1.1.0 - level-codec: ^9.0.0 - level-errors: ^2.0.0 - level-iterator-stream: ^2.0.3 - ltgt: ~2.1.1 - pull-defer: ^0.2.2 - pull-level: ^2.0.3 - pull-stream: ^3.6.8 - typewiselite: ~1.0.0 - xtend: ~4.0.0 - checksum: 8370e6fbf67bf08daa23de07699d3d2ccf6a349a28db4025a890d4c07857811808372fdf5029c4afedf24e2ff828be6bb7cd9fd0b676090daba38981b2e75cff - languageName: node - linkType: hard - "level-supports@npm:^2.0.1": version: 2.1.0 resolution: "level-supports@npm:2.1.0" @@ -9574,17 +7841,6 @@ __metadata: languageName: node linkType: hard -"level-ws@npm:^1.0.0": - version: 1.0.0 - resolution: "level-ws@npm:1.0.0" - dependencies: - inherits: ^2.0.3 - readable-stream: ^2.2.8 - xtend: ^4.0.1 - checksum: 752fd0f89eb1ccf811c09de24ca8987437ea84f88e672d0037324fb5d71c5bc022c25ba64d6a00fca33beec48a81e3cd1ef99c2f9fff267b3a4f2233939fad35 - languageName: node - linkType: hard - "level-ws@npm:^2.0.0": version: 2.0.0 resolution: "level-ws@npm:2.0.0" @@ -9596,16 +7852,6 @@ __metadata: languageName: node linkType: hard -"level@npm:^8.0.0": - version: 8.0.0 - resolution: "level@npm:8.0.0" - dependencies: - browser-level: ^1.0.1 - classic-level: ^1.2.0 - checksum: 13eb25bd71bfdca6cd714d1233adf9da97de9a8a4bf9f28d62a390b5c96d0250abaf983eb90eb8c4e89c7a985bb330750683d106f12670e5ea8fba1d7e608a1f - languageName: node - linkType: hard - "leveldown@npm:6.1.0": version: 6.1.0 resolution: "leveldown@npm:6.1.0" @@ -9618,18 +7864,6 @@ __metadata: languageName: node linkType: hard -"levelup@npm:3.1.1, levelup@npm:^3.0.0": - version: 3.1.1 - resolution: "levelup@npm:3.1.1" - dependencies: - deferred-leveldown: ~4.0.0 - level-errors: ~2.0.0 - level-iterator-stream: ~3.0.0 - xtend: ~4.0.0 - checksum: cddcac2cf5eddcf85ade62efd21f11326cd83559619db6a78696725eac5c5cd16f62d8d49f6594fd3097d9329a1d04847f6d7df23bf4d69f18c16e49afd4a416 - languageName: node - linkType: hard - "levelup@npm:^1.2.1": version: 1.3.9 resolution: "levelup@npm:1.3.9" @@ -9678,16 +7912,10 @@ __metadata: languageName: node linkType: hard -"load-json-file@npm:^1.0.0": - version: 1.1.0 - resolution: "load-json-file@npm:1.1.0" - dependencies: - graceful-fs: ^4.1.2 - parse-json: ^2.2.0 - pify: ^2.0.0 - pinkie-promise: ^2.0.0 - strip-bom: ^2.0.0 - checksum: 0e4e4f380d897e13aa236246a917527ea5a14e4fc34d49e01ce4e7e2a1e08e2740ee463a03fb021c04f594f29a178f4adb994087549d7c1c5315fcd29bf9934b +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 languageName: node linkType: hard @@ -9720,13 +7948,6 @@ __metadata: languageName: node linkType: hard -"lodash.assign@npm:^4.0.3, lodash.assign@npm:^4.0.6": - version: 4.2.0 - resolution: "lodash.assign@npm:4.2.0" - checksum: 75bbc6733c9f577c448031b4051f990f068802708891f94be9d4c2faffd6a9ec67a2c49671dafc908a068d35687765464853282842b4560b662e6c903d11cc90 - languageName: node - linkType: hard - "lodash.camelcase@npm:^4.3.0": version: 4.3.0 resolution: "lodash.camelcase@npm:4.3.0" @@ -9734,6 +7955,20 @@ __metadata: languageName: node linkType: hard +"lodash.clonedeep@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.clonedeep@npm:4.5.0" + checksum: 92c46f094b064e876a23c97f57f81fbffd5d760bf2d8a1c61d85db6d1e488c66b0384c943abee4f6af7debf5ad4e4282e74ff83177c9e63d8ff081a4837c3489 + languageName: node + linkType: hard + +"lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -9755,14 +7990,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.20": - version: 4.17.20 - resolution: "lodash@npm:4.17.20" - checksum: b31afa09739b7292a88ec49ffdb2fcaeb41f690def010f7a067eeedffece32da6b6847bfe4d38a77e6f41778b9b2bca75eeab91209936518173271f0b69376ea - languageName: node - linkType: hard - -"lodash@npm:^4.17.11, lodash@npm:^4.17.12, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.4": +"lodash@npm:^4.17.11, lodash@npm:^4.17.12, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -9795,31 +8023,6 @@ __metadata: languageName: node linkType: hard -"looper@npm:^2.0.0": - version: 2.0.0 - resolution: "looper@npm:2.0.0" - checksum: ee5124d54c97cd9e778e602e297ed37dd6405b7c36830f90bb1aaa6adb8d64f2a228aa341459e6bf2db9a8d7dc9eb8c16ec9c6bffeab1c47f91efe213858ce36 - languageName: node - linkType: hard - -"looper@npm:^3.0.0": - version: 3.0.0 - resolution: "looper@npm:3.0.0" - checksum: 2ec29b4161e95d33f2257867b0b9ab7f2fef5425582362c966f8f9041a2a6032466b8be159af99323655aca9e6fe1c9da086cf208f6346bd97c9f83ab77ccce0 - languageName: node - linkType: hard - -"loose-envify@npm:^1.0.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: ^3.0.0 || ^4.0.0 - bin: - loose-envify: cli.js - checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 - languageName: node - linkType: hard - "loupe@npm:^2.3.1": version: 2.3.4 resolution: "loupe@npm:2.3.4" @@ -9829,7 +8032,7 @@ __metadata: languageName: node linkType: hard -"lowercase-keys@npm:^1.0.0, lowercase-keys@npm:^1.0.1": +"lowercase-keys@npm:^1.0.0": version: 1.0.1 resolution: "lowercase-keys@npm:1.0.1" checksum: 4d045026595936e09953e3867722e309415ff2c80d7701d067546d75ef698dac218a4f53c6d1d0e7368b47e45fd7529df47e6cb56fbb90523ba599f898b3d147 @@ -9850,21 +8053,10 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:5.1.1, lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: ^3.0.2 - checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb - languageName: node - linkType: hard - -"lru-cache@npm:^3.2.0": - version: 3.2.0 - resolution: "lru-cache@npm:3.2.0" - dependencies: - pseudomap: ^1.0.1 - checksum: 8e5fb3d7a83401165b8dc9fe16d74828df5754aaeda1061e4f2ea1d0e984b9071a6487f1c3f6f034f935429629f94366abbfb753827ab2977a56b3f5c276e736 +"lru-cache@npm:^10.0.0, lru-cache@npm:^10.2.0": + version: 10.2.0 + resolution: "lru-cache@npm:10.2.0" + checksum: eee7ddda4a7475deac51ac81d7dd78709095c6fa46e8350dc2d22462559a1faa3b81ed931d5464b13d48cbd7e08b46100b6f768c76833912bc444b99c37e25db languageName: node linkType: hard @@ -9891,20 +8083,13 @@ __metadata: languageName: node linkType: hard -"ltgt@npm:^2.1.2, ltgt@npm:~2.2.0": +"ltgt@npm:~2.2.0": version: 2.2.1 resolution: "ltgt@npm:2.2.1" checksum: 7e3874296f7538bc8087b428ac4208008d7b76916354b34a08818ca7c83958c1df10ec427eeeaad895f6b81e41e24745b18d30f89abcc21d228b94f6961d50a2 languageName: node linkType: hard -"ltgt@npm:~2.1.1": - version: 2.1.3 - resolution: "ltgt@npm:2.1.3" - checksum: b09281f6aeccb34eda52588d21f9116f6e5b7ae1c79f6180bba06edcdcba50de9c6d199be7f817a7ae59819064e3ca7d066fe0bcc67e2458006e4e45cd05cb11 - languageName: node - linkType: hard - "make-error@npm:^1.1.1": version: 1.3.6 resolution: "make-error@npm:1.3.6" @@ -9936,33 +8121,12 @@ __metadata: languageName: node linkType: hard -"map-cache@npm:^0.2.2": - version: 0.2.2 - resolution: "map-cache@npm:0.2.2" - checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 - languageName: node - linkType: hard - -"map-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "map-visit@npm:1.0.0" +"markdown-table@npm:2.0.0": + version: 2.0.0 + resolution: "markdown-table@npm:2.0.0" dependencies: - object-visit: ^1.0.0 - checksum: c27045a5021c344fc19b9132eb30313e441863b2951029f8f8b66f79d3d8c1e7e5091578075a996f74e417479506fe9ede28c44ca7bc351a61c9d8073daec36a - languageName: node - linkType: hard - -"markdown-table@npm:^1.1.3": - version: 1.1.3 - resolution: "markdown-table@npm:1.1.3" - checksum: 292e8c956ae833c2ccb0a55cd8d87980cd657ab11cd9ff63c3fcc4d3a518d3b3882ba07410b8f477ba9e30b3f70658677e4e8acf61816dd6cfdd1f6293130664 - languageName: node - linkType: hard - -"mcl-wasm@npm:^0.7.1": - version: 0.7.6 - resolution: "mcl-wasm@npm:0.7.6" - checksum: 93d21906a030f146648f3eba57765c5189aae354471da228790216688683fcdf947b60fbfacf68823f62138c16ee0abfa4516851c63813fab032396a1c92729b + repeat-string: ^1.0.0 + checksum: 9bb634a9300016cbb41216c1eab44c74b6b7083ac07872e296f900a29449cf0e260ece03fa10c3e9784ab94c61664d1d147da0315f95e1336e2bdcc025615c90 languageName: node linkType: hard @@ -10012,31 +8176,6 @@ __metadata: languageName: node linkType: hard -"memdown@npm:~3.0.0": - version: 3.0.0 - resolution: "memdown@npm:3.0.0" - dependencies: - abstract-leveldown: ~5.0.0 - functional-red-black-tree: ~1.0.1 - immediate: ~3.2.3 - inherits: ~2.0.1 - ltgt: ~2.2.0 - safe-buffer: ~5.1.1 - checksum: 4446fdf7198dcdbae764324200526f41738c9f2a32decb59b5a4dbb1bdfc72e2fc046e9bbe016469ab8a0a52e5d5c8b36bf3829e90dd4674a5f4c961e059d4de - languageName: node - linkType: hard - -"memory-level@npm:^1.0.0": - version: 1.0.0 - resolution: "memory-level@npm:1.0.0" - dependencies: - abstract-level: ^1.0.0 - functional-red-black-tree: ^1.0.1 - module-error: ^1.0.1 - checksum: 80b1b7aedaf936e754adbcd7b9303018c3684fb32f9992fd967c448f145d177f16c724fbba9ed3c3590a9475fd563151eae664d69b83d2ad48714852e9fc5c72 - languageName: node - linkType: hard - "memorystream@npm:^0.3.1": version: 0.3.1 resolution: "memorystream@npm:0.3.1" @@ -10058,22 +8197,7 @@ __metadata: languageName: node linkType: hard -"merkle-patricia-tree@npm:3.0.0": - version: 3.0.0 - resolution: "merkle-patricia-tree@npm:3.0.0" - dependencies: - async: ^2.6.1 - ethereumjs-util: ^5.2.0 - level-mem: ^3.0.1 - level-ws: ^1.0.0 - readable-stream: ^3.0.6 - rlp: ^2.0.0 - semaphore: ">=1.0.1" - checksum: a500f00e7954eea132309310c48ee2635e9a190e0a775811236a0dc375465ff7e01b230ac0ee213ca13bb995399066719eedb4218e0f47596e9cab79cebc575e - languageName: node - linkType: hard - -"merkle-patricia-tree@npm:^2.1.2, merkle-patricia-tree@npm:^2.3.2": +"merkle-patricia-tree@npm:^2.1.2": version: 2.3.2 resolution: "merkle-patricia-tree@npm:2.3.2" dependencies: @@ -10117,28 +8241,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^3.1.4": - version: 3.1.10 - resolution: "micromatch@npm:3.1.10" - dependencies: - arr-diff: ^4.0.0 - array-unique: ^0.3.2 - braces: ^2.3.1 - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - extglob: ^2.0.4 - fragment-cache: ^0.2.1 - kind-of: ^6.0.2 - nanomatch: ^1.2.9 - object.pick: ^1.3.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.2 - checksum: ad226cba4daa95b4eaf47b2ca331c8d2e038d7b41ae7ed0697cde27f3f1d6142881ab03d4da51b65d9d315eceb5e4cdddb3fbb55f5f72cfa19cf3ea469d054dc - languageName: node - linkType: hard - -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": +"micromatch@npm:^4.0.4": version: 4.0.5 resolution: "micromatch@npm:4.0.5" dependencies: @@ -10192,7 +8295,7 @@ __metadata: languageName: node linkType: hard -"mimic-response@npm:^1.0.0, mimic-response@npm:^1.0.1": +"mimic-response@npm:^1.0.0": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823 @@ -10265,13 +8368,29 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:~1.2.5": +"minimatch@npm:^9.0.1": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" + dependencies: + brace-expansion: ^2.0.1 + checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.6 resolution: "minimist@npm:1.2.6" checksum: d15428cd1e11eb14e1233bcfb88ae07ed7a147de251441d61158619dfb32c4d7e9061d09cab4825fdee18ecd6fce323228c8c47b5ba7cd20af378ca4048fb3fb languageName: node linkType: hard +"minimist@npm:^1.2.7": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -10349,6 +8468,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.4": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + "minizlib@npm:^1.2.1": version: 1.3.3 resolution: "minizlib@npm:1.3.3" @@ -10368,16 +8494,6 @@ __metadata: languageName: node linkType: hard -"mixin-deep@npm:^1.2.0": - version: 1.3.2 - resolution: "mixin-deep@npm:1.3.2" - dependencies: - for-in: ^1.0.2 - is-extendable: ^1.0.1 - checksum: 820d5a51fcb7479f2926b97f2c3bb223546bc915e6b3a3eb5d906dda871bba569863595424a76682f2b15718252954644f3891437cb7e3f220949bed54b1750d - languageName: node - linkType: hard - "mkdirp-promise@npm:^5.0.1": version: 5.0.1 resolution: "mkdirp-promise@npm:5.0.1" @@ -10484,41 +8600,6 @@ __metadata: languageName: node linkType: hard -"mocha@npm:^7.1.1": - version: 7.2.0 - resolution: "mocha@npm:7.2.0" - dependencies: - ansi-colors: 3.2.3 - browser-stdout: 1.3.1 - chokidar: 3.3.0 - debug: 3.2.6 - diff: 3.5.0 - escape-string-regexp: 1.0.5 - find-up: 3.0.0 - glob: 7.1.3 - growl: 1.10.5 - he: 1.2.0 - js-yaml: 3.13.1 - log-symbols: 3.0.0 - minimatch: 3.0.4 - mkdirp: 0.5.5 - ms: 2.1.1 - node-environment-flags: 1.0.6 - object.assign: 4.1.0 - strip-json-comments: 2.0.1 - supports-color: 6.0.0 - which: 1.3.1 - wide-align: 1.1.3 - yargs: 13.3.2 - yargs-parser: 13.1.2 - yargs-unparser: 1.6.0 - bin: - _mocha: bin/_mocha - mocha: bin/mocha - checksum: d098484fe1b165bb964fdbf6b88b256c71fead47575ca7c5bcf8ed07db0dcff41905f6d2f0a05111a0441efaef9d09241a8cc1ddf7961056b28984ec63ba2874 - languageName: node - linkType: hard - "mock-fs@npm:^4.1.0": version: 4.13.0 resolution: "mock-fs@npm:4.13.0" @@ -10526,7 +8607,7 @@ __metadata: languageName: node linkType: hard -"module-error@npm:^1.0.1, module-error@npm:^1.0.2": +"module-error@npm:^1.0.1": version: 1.0.2 resolution: "module-error@npm:1.0.2" checksum: 5d653e35bd55b3e95f8aee2cdac108082ea892e71b8f651be92cde43e4ee86abee4fa8bd7fc3fe5e68b63926d42f63c54cd17b87a560c31f18739295575a3962 @@ -10641,25 +8722,6 @@ __metadata: languageName: node linkType: hard -"nanomatch@npm:^1.2.9": - version: 1.2.13 - resolution: "nanomatch@npm:1.2.13" - dependencies: - arr-diff: ^4.0.0 - array-unique: ^0.3.2 - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - fragment-cache: ^0.2.1 - is-windows: ^1.0.2 - kind-of: ^6.0.2 - object.pick: ^1.3.0 - regex-not: ^1.0.0 - snapdragon: ^0.8.1 - to-regex: ^3.0.1 - checksum: 54d4166d6ef08db41252eb4e96d4109ebcb8029f0374f9db873bd91a1f896c32ec780d2a2ea65c0b2d7caf1f28d5e1ea33746a470f32146ac8bba821d80d38d8 - languageName: node - linkType: hard - "napi-macros@npm:~2.0.0": version: 2.0.0 resolution: "napi-macros@npm:2.0.0" @@ -10737,7 +8799,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:2.6.7, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7": +"node-fetch@npm:2.6.7, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" dependencies: @@ -10751,16 +8813,6 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:~1.7.1": - version: 1.7.3 - resolution: "node-fetch@npm:1.7.3" - dependencies: - encoding: ^0.1.11 - is-stream: ^1.0.1 - checksum: 3bb0528c05d541316ebe52770d71ee25a6dce334df4231fd55df41a644143e07f068637488c18a5b0c43f05041dbd3346752f9e19b50df50569a802484544d5b - languageName: node - linkType: hard - "node-gyp-build@npm:4.4.0": version: 4.4.0 resolution: "node-gyp-build@npm:4.4.0" @@ -10803,17 +8855,10 @@ __metadata: languageName: node linkType: hard -"nofilter@npm:^1.0.4": - version: 1.0.4 - resolution: "nofilter@npm:1.0.4" - checksum: 54d864f745de5c3312994e880cf2d4f55e34830d6adc8275dce3731507ca380d21040336e4a277a4901551c07f04c452fbeffd57fad1dc8f68a2943eaf894a04 - languageName: node - linkType: hard - -"nofilter@npm:^3.0.2": - version: 3.0.3 - resolution: "nofilter@npm:3.0.3" - checksum: c13974cf064179f5574dc4ff2c4e26ff3dedf06309715ea888e92ab2947e2a1068f22b9597a2b79813d2d1958b63f65548b9ad4dbb7d9ab85c05d01a97d40333 +"nofilter@npm:^3.1.0": + version: 3.1.0 + resolution: "nofilter@npm:3.1.0" + checksum: 58aa85a5b4b35cbb6e42de8a8591c5e338061edc9f3e7286f2c335e9e9b9b8fa7c335ae45daa8a1f3433164dc0b9a3d187fa96f9516e04a17a1f9ce722becc4f languageName: node linkType: hard @@ -10839,18 +8884,6 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^2.3.2": - version: 2.5.0 - resolution: "normalize-package-data@npm:2.5.0" - dependencies: - hosted-git-info: ^2.1.4 - resolve: ^1.10.0 - semver: 2 || 3 || 4 || 5 - validate-npm-package-license: ^3.0.1 - checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 - languageName: node - linkType: hard - "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -10858,13 +8891,6 @@ __metadata: languageName: node linkType: hard -"normalize-url@npm:^4.1.0": - version: 4.5.0 - resolution: "normalize-url@npm:4.5.0" - checksum: 34e9d01095df5c9348bf75f6cf0552c01438a29119aecdb747eead6ccd36a386209acdc093fc993edd32731b3056ff2977ffab44e4b8eed4d8aafdf0feae90c7 - languageName: node - linkType: hard - "normalize-url@npm:^6.0.1": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" @@ -10884,13 +8910,6 @@ __metadata: languageName: node linkType: hard -"number-is-nan@npm:^1.0.0": - version: 1.0.1 - resolution: "number-is-nan@npm:1.0.1" - checksum: 13656bc9aa771b96cef209ffca31c31a03b507ca6862ba7c3f638a283560620d723d52e626d57892c7fff475f4c36ac07f0600f14544692ff595abff214b9ffb - languageName: node - linkType: hard - "number-to-bn@npm:1.7.0": version: 1.7.0 resolution: "number-to-bn@npm:1.7.0" @@ -10908,24 +8927,13 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4, object-assign@npm:^4.0.0, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f languageName: node linkType: hard -"object-copy@npm:^0.1.0": - version: 0.1.0 - resolution: "object-copy@npm:0.1.0" - dependencies: - copy-descriptor: ^0.1.0 - define-property: ^0.2.5 - kind-of: ^3.0.3 - checksum: a9e35f07e3a2c882a7e979090360d1a20ab51d1fa19dfdac3aa8873b328a7c4c7683946ee97c824ae40079d848d6740a3788fa14f2185155dab7ed970a72c783 - languageName: node - linkType: hard - "object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": version: 1.12.2 resolution: "object-inspect@npm:1.12.2" @@ -10933,20 +8941,10 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:~1.7.0": - version: 1.7.0 - resolution: "object-inspect@npm:1.7.0" - checksum: 53cc00d1a95025228d09549a6562905171932ae83a50b95f3bda7daaaf8ac7c518577180f1dfe72d262c0824737a81f025d93e4992c0506a268fb3f3bfaef3e9 - languageName: node - linkType: hard - -"object-is@npm:^1.0.1": - version: 1.1.5 - resolution: "object-is@npm:1.1.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe +"object-inspect@npm:^1.13.1": + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f languageName: node linkType: hard @@ -10964,15 +8962,6 @@ __metadata: languageName: node linkType: hard -"object-visit@npm:^1.0.0": - version: 1.0.1 - resolution: "object-visit@npm:1.0.1" - dependencies: - isobject: ^3.0.0 - checksum: b0ee07f5bf3bb881b881ff53b467ebbde2b37ebb38649d6944a6cd7681b32eedd99da9bd1e01c55facf81f54ed06b13af61aba6ad87f0052982995e09333f790 - languageName: node - linkType: hard - "object.assign@npm:4.1.0": version: 4.1.0 resolution: "object.assign@npm:4.1.0" @@ -10997,23 +8986,26 @@ __metadata: languageName: node linkType: hard -"object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.1": - version: 2.1.2 - resolution: "object.getownpropertydescriptors@npm:2.1.2" +"object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.18.0-next.2 - checksum: 6c1c0162a2bea912f092dbf48699998d6f4b788a9884ee99ba41ddf25c3f0924ec56c6a55738c4ae3bd91d1203813a9a8e18e6fff1f477e2626cdbcd1a5f3ca8 + call-bind: ^1.0.5 + define-properties: ^1.2.1 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 languageName: node linkType: hard -"object.pick@npm:^1.3.0": - version: 1.3.0 - resolution: "object.pick@npm:1.3.0" +"object.getownpropertydescriptors@npm:^2.0.3": + version: 2.1.2 + resolution: "object.getownpropertydescriptors@npm:2.1.2" dependencies: - isobject: ^3.0.1 - checksum: 77fb6eed57c67adf75e9901187e37af39f052ef601cb4480386436561357eb9e459e820762f01fd02c5c1b42ece839ad393717a6d1850d848ee11fbabb3e580a + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.18.0-next.2 + checksum: 6c1c0162a2bea912f092dbf48699998d6f4b788a9884ee99ba41ddf25c3f0924ec56c6a55738c4ae3bd91d1203813a9a8e18e6fff1f477e2626cdbcd1a5f3ca8 languageName: node linkType: hard @@ -11035,15 +9027,6 @@ __metadata: languageName: node linkType: hard -"oboe@npm:2.1.4": - version: 2.1.4 - resolution: "oboe@npm:2.1.4" - dependencies: - http-https: ^1.0.0 - checksum: b9172453fba362aec86c45d7bcb4f512302bb23ef34c7c9c498974dc4e7ec0e298931bac5a093445fd946d5604e5dd16563e2d2ae922101ac4b47be2e18e30cc - languageName: node - linkType: hard - "oboe@npm:2.1.5": version: 2.1.5 resolution: "oboe@npm:2.1.5" @@ -11080,16 +9063,6 @@ __metadata: languageName: node linkType: hard -"open@npm:^7.4.2": - version: 7.4.2 - resolution: "open@npm:7.4.2" - dependencies: - is-docker: ^2.0.0 - is-wsl: ^2.1.1 - checksum: 3333900ec0e420d64c23b831bc3467e57031461d843c801f569b2204a1acc3cd7b3ec3c7897afc9dde86491dfa289708eb92bba164093d8bd88fb2c231843c91 - languageName: node - linkType: hard - "optionator@npm:^0.8.1, optionator@npm:^0.8.2": version: 0.8.3 resolution: "optionator@npm:0.8.3" @@ -11118,23 +9091,14 @@ __metadata: languageName: node linkType: hard -"os-homedir@npm:^1.0.0": - version: 1.0.2 - resolution: "os-homedir@npm:1.0.2" - checksum: af609f5a7ab72de2f6ca9be6d6b91a599777afc122ac5cad47e126c1f67c176fe9b52516b9eeca1ff6ca0ab8587fe66208bc85e40a3940125f03cdb91408e9d2 - languageName: node - linkType: hard - -"os-locale@npm:^1.4.0": - version: 1.4.0 - resolution: "os-locale@npm:1.4.0" - dependencies: - lcid: ^1.0.0 - checksum: 0161a1b6b5a8492f99f4b47fe465df9fc521c55ba5414fce6444c45e2500487b8ed5b40a47a98a2363fe83ff04ab033785300ed8df717255ec4c3b625e55b1fb +"ordinal@npm:^1.0.3": + version: 1.0.3 + resolution: "ordinal@npm:1.0.3" + checksum: 6761c5b7606b6c4b0c22b4097dab4fe7ffcddacc49238eedf9c0ced877f5d4e4ad3f4fd43fefa1cc3f167cc54c7149267441b2ae85b81ccf13f45cf4b7947164 languageName: node linkType: hard -"os-tmpdir@npm:^1.0.1, os-tmpdir@npm:~1.0.2": +"os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d @@ -11148,13 +9112,6 @@ __metadata: languageName: node linkType: hard -"p-cancelable@npm:^1.0.0": - version: 1.1.0 - resolution: "p-cancelable@npm:1.1.0" - checksum: 2db3814fef6d9025787f30afaee4496a8857a28be3c5706432cbad76c688a6db1874308f48e364a42f5317f5e41e8e7b4f2ff5c8ff2256dbb6264bc361704ece - languageName: node - linkType: hard - "p-cancelable@npm:^3.0.0": version: 3.0.0 resolution: "p-cancelable@npm:3.0.0" @@ -11277,13 +9234,6 @@ __metadata: languageName: node linkType: hard -"parse-cache-control@npm:^1.0.1": - version: 1.0.1 - resolution: "parse-cache-control@npm:1.0.1" - checksum: 5a70868792124eb07c2dd07a78fcb824102e972e908254e9e59ce59a4796c51705ff28196d2b20d3b7353d14e9f98e65ed0e4eda9be072cc99b5297dc0466fee - languageName: node - linkType: hard - "parse-headers@npm:^2.0.0": version: 2.0.3 resolution: "parse-headers@npm:2.0.3" @@ -11291,15 +9241,6 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^2.2.0": - version: 2.2.0 - resolution: "parse-json@npm:2.2.0" - dependencies: - error-ex: ^1.2.0 - checksum: dda78a63e57a47b713a038630868538f718a7ca0cd172a36887b0392ccf544ed0374902eb28f8bf3409e8b71d62b79d17062f8543afccf2745f9b0b2d2bb80ca - languageName: node - linkType: hard - "parse-json@npm:^4.0.0": version: 4.0.0 resolution: "parse-json@npm:4.0.0" @@ -11310,78 +9251,22 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:~1.3.3": - version: 1.3.3 - resolution: "parseurl@npm:1.3.3" - checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 - languageName: node - linkType: hard - -"pascalcase@npm:^0.1.1": - version: 0.1.1 - resolution: "pascalcase@npm:0.1.1" - checksum: f83681c3c8ff75fa473a2bb2b113289952f802ff895d435edd717e7cb898b0408cbdb247117a938edcbc5d141020909846cc2b92c47213d764e2a94d2ad2b925 - languageName: node - linkType: hard - -"patch-package@npm:6.2.2": - version: 6.2.2 - resolution: "patch-package@npm:6.2.2" - dependencies: - "@yarnpkg/lockfile": ^1.1.0 - chalk: ^2.4.2 - cross-spawn: ^6.0.5 - find-yarn-workspace-root: ^1.2.1 - fs-extra: ^7.0.1 - is-ci: ^2.0.0 - klaw-sync: ^6.0.0 - minimist: ^1.2.0 - rimraf: ^2.6.3 - semver: ^5.6.0 - slash: ^2.0.0 - tmp: ^0.0.33 - bin: - patch-package: index.js - checksum: 5e2f49457b0dc56b5ce0a9d23e281e062e9f225d87a832540f02ffed29ffa7f298b1877daf13c16500ef8a759109c975e3d28d6bd63b0d953f349177abee1767 - languageName: node - linkType: hard - -"patch-package@npm:^6.2.2": - version: 6.4.7 - resolution: "patch-package@npm:6.4.7" +"parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" dependencies: - "@yarnpkg/lockfile": ^1.1.0 - chalk: ^2.4.2 - cross-spawn: ^6.0.5 - find-yarn-workspace-root: ^2.0.0 - fs-extra: ^7.0.1 - is-ci: ^2.0.0 - klaw-sync: ^6.0.0 - minimist: ^1.2.0 - open: ^7.4.2 - rimraf: ^2.6.3 - semver: ^5.6.0 - slash: ^2.0.0 - tmp: ^0.0.33 - bin: - patch-package: index.js - checksum: f36d5324da3b69ee635e7cd2c68f4d3dd89dc91d60ffdaad3b602fd953277f4da901c91033683bf6ff31c14799bc049849af3a389455c25d0435fe9cfb0d4088 - languageName: node - linkType: hard - -"path-browserify@npm:^1.0.0": - version: 1.0.1 - resolution: "path-browserify@npm:1.0.1" - checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 languageName: node linkType: hard -"path-exists@npm:^2.0.0": - version: 2.1.0 - resolution: "path-exists@npm:2.1.0" - dependencies: - pinkie-promise: ^2.0.0 - checksum: fdb734f1d00f225f7a0033ce6d73bff6a7f76ea08936abf0e5196fa6e54a645103538cd8aedcb90d6d8c3fa3705ded0c58a4da5948ae92aa8834892c1ab44a84 +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 languageName: node linkType: hard @@ -11399,7 +9284,7 @@ __metadata: languageName: node linkType: hard -"path-is-absolute@npm:^1.0.0, path-is-absolute@npm:^1.0.1": +"path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 @@ -11434,6 +9319,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.10.2": + version: 1.10.2 + resolution: "path-scurry@npm:1.10.2" + dependencies: + lru-cache: ^10.2.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: 6739b4290f7d1a949c61c758b481c07ac7d1a841964c68cf5e1fa153d7e18cbde4872b37aadf9c5173c800d627f219c47945859159de36c977dd82419997b9b8 + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -11441,17 +9336,6 @@ __metadata: languageName: node linkType: hard -"path-type@npm:^1.0.0": - version: 1.1.0 - resolution: "path-type@npm:1.1.0" - dependencies: - graceful-fs: ^4.1.2 - pify: ^2.0.0 - pinkie-promise: ^2.0.0 - checksum: 59a4b2c0e566baf4db3021a1ed4ec09a8b36fca960a490b54a6bcefdb9987dafe772852982b6011cd09579478a96e57960a01f75fa78a794192853c9d468fc79 - languageName: node - linkType: hard - "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -11493,13 +9377,6 @@ __metadata: languageName: node linkType: hard -"pify@npm:^2.0.0, pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba - languageName: node - linkType: hard - "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" @@ -11507,40 +9384,17 @@ __metadata: languageName: node linkType: hard -"pinkie-promise@npm:^2.0.0": - version: 2.0.1 - resolution: "pinkie-promise@npm:2.0.1" - dependencies: - pinkie: ^2.0.0 - checksum: b53a4a2e73bf56b6f421eef711e7bdcb693d6abb474d57c5c413b809f654ba5ee750c6a96dd7225052d4b96c4d053cdcb34b708a86fceed4663303abee52fcca - languageName: node - linkType: hard - -"pinkie@npm:^2.0.0": - version: 2.0.4 - resolution: "pinkie@npm:2.0.4" - checksum: b12b10afea1177595aab036fc220785488f67b4b0fc49e7a27979472592e971614fa1c728e63ad3e7eb748b4ec3c3dbd780819331dad6f7d635c77c10537b9db - languageName: node - linkType: hard - -"posix-character-classes@npm:^0.1.0": - version: 0.1.1 - resolution: "posix-character-classes@npm:0.1.1" - checksum: dedb99913c60625a16050cfed2fb5c017648fc075be41ac18474e1c6c3549ef4ada201c8bd9bd006d36827e289c571b6092e1ef6e756cdbab2fd7046b25c6442 - languageName: node - linkType: hard - -"postinstall-postinstall@npm:^2.1.0": - version: 2.1.0 - resolution: "postinstall-postinstall@npm:2.1.0" - checksum: e1d34252cf8d2c5641c7d2db7426ec96e3d7a975f01c174c68f09ef5b8327bc8d5a9aa2001a45e693db2cdbf69577094d3fe6597b564ad2d2202b65fba76134b +"pluralize@npm:^8.0.0": + version: 8.0.0 + resolution: "pluralize@npm:8.0.0" + checksum: 08931d4a6a4a5561a7f94f67a31c17e6632cb21e459ab3ff4f6f629d9a822984cf8afef2311d2005fbea5d7ef26016ebb090db008e2d8bce39d0a9a9d218736e languageName: node linkType: hard -"precond@npm:0.2": - version: 0.2.3 - resolution: "precond@npm:0.2.3" - checksum: c613e7d68af3e0b43a294a994bf067cc2bc44b03fd17bc4fb133e30617a4f5b49414b08e9b392d52d7c6822d8a71f66a7fe93a8a1e7d02240177202cff3f63ef +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae languageName: node linkType: hard @@ -11565,26 +9419,16 @@ __metadata: languageName: node linkType: hard -"prepend-http@npm:^2.0.0": - version: 2.0.0 - resolution: "prepend-http@npm:2.0.0" - checksum: 7694a9525405447662c1ffd352fcb41b6410c705b739b6f4e3a3e21cf5fdede8377890088e8934436b8b17ba55365a615f153960f30877bf0d0392f9e93503ea - languageName: node - linkType: hard - -"prettier-plugin-solidity@npm:^1.0.0-beta.24": - version: 1.0.0-beta.24 - resolution: "prettier-plugin-solidity@npm:1.0.0-beta.24" +"prettier-plugin-solidity@npm:^1.3.1": + version: 1.3.1 + resolution: "prettier-plugin-solidity@npm:1.3.1" dependencies: - "@solidity-parser/parser": ^0.14.3 - emoji-regex: ^10.1.0 - escape-string-regexp: ^4.0.0 - semver: ^7.3.7 - solidity-comments-extractor: ^0.0.7 - string-width: ^4.2.3 + "@solidity-parser/parser": ^0.17.0 + semver: ^7.5.4 + solidity-comments-extractor: ^0.0.8 peerDependencies: - prettier: ^2.3.0 - checksum: 5923fbb2827307a23f3182c85f601b6bae476ac69ab115524fc3f08b823eaf7eaa93844a2564ad0a5ac49be0ce946381e0ef3407c1e5cfd4928811fa071823e0 + prettier: ">=2.3.0" + checksum: 286bf3b5899d7fad66e49c78ebac164bacfbf419f874a932ed99e491d97d77e91fa03ca068197939d3696ba7991db9e5258390dd42dee8d2184fa8c2e11921e4 languageName: node linkType: hard @@ -11597,7 +9441,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.1.2, prettier@npm:^2.3.0, prettier@npm:^2.3.1": +"prettier@npm:^2.3.0, prettier@npm:^2.3.1": version: 2.7.1 resolution: "prettier@npm:2.7.1" bin: @@ -11606,6 +9450,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:^2.8.3": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 + languageName: node + linkType: hard + "printj@npm:~1.1.0": version: 1.1.2 resolution: "printj@npm:1.1.2" @@ -11615,13 +9468,6 @@ __metadata: languageName: node linkType: hard -"private@npm:^0.1.6, private@npm:^0.1.8": - version: 0.1.8 - resolution: "private@npm:0.1.8" - checksum: a00abd713d25389f6de7294f0e7879b8a5d09a9ec5fd81cc2f21b29d4f9a80ec53bc4222927d3a281d4aadd4cd373d9a28726fca3935921950dc75fd71d1fdbb - languageName: node - linkType: hard - "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -11660,25 +9506,6 @@ __metadata: languageName: node linkType: hard -"promise-to-callback@npm:^1.0.0": - version: 1.0.0 - resolution: "promise-to-callback@npm:1.0.0" - dependencies: - is-fn: ^1.0.0 - set-immediate-shim: ^1.0.1 - checksum: 8c9e1327386e00f799589cdf96fff2586a13b52b0185222bc3199e1305ba9344589eedfd4038dcbaf5592d85d567097d1507b81e948b7fff6ffdd3de49d54e14 - languageName: node - linkType: hard - -"promise@npm:^8.0.0": - version: 8.2.0 - resolution: "promise@npm:8.2.0" - dependencies: - asap: ~2.0.6 - checksum: 45d65ffe4fbd9172ef848f790ac1366822e63f063a5ef42a14e75b577ffa3c37870a9d8472729d9d429d7c8a770428f9d13650b52aafaa361dcc69cf84873b20 - languageName: node - linkType: hard - "proper-lockfile@npm:^4.1.1": version: 4.1.2 resolution: "proper-lockfile@npm:4.1.2" @@ -11700,6 +9527,13 @@ __metadata: languageName: node linkType: hard +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 + languageName: node + linkType: hard + "prr@npm:~1.0.1": version: 1.0.1 resolution: "prr@npm:1.0.1" @@ -11707,13 +9541,6 @@ __metadata: languageName: node linkType: hard -"pseudomap@npm:^1.0.1": - version: 1.0.2 - resolution: "pseudomap@npm:1.0.2" - checksum: 856c0aae0ff2ad60881168334448e898ad7a0e45fe7386d114b150084254c01e200c957cf378378025df4e052c7890c5bd933939b0e0d2ecfcc1dc2f0b2991f5 - languageName: node - linkType: hard - "psl@npm:^1.1.28": version: 1.8.0 resolution: "psl@npm:1.8.0" @@ -11735,68 +9562,6 @@ __metadata: languageName: node linkType: hard -"pull-cat@npm:^1.1.9": - version: 1.1.11 - resolution: "pull-cat@npm:1.1.11" - checksum: 785173d94732ba5e6e65f27ee128542522aeb87519c5d72aa9b8bc510f6c4f67b91fcfd565782a20aafc116e57354f2dd0fa8fd039b45a61b8da89b0253a7440 - languageName: node - linkType: hard - -"pull-defer@npm:^0.2.2": - version: 0.2.3 - resolution: "pull-defer@npm:0.2.3" - checksum: 4ea99ed64a2d79167e87293aba5088cde91f210a319c690a65aa6704d829be33b76cecc732f8d4ed3eee47e7eb09a6f77042897ea6414862bacbd722ce182d66 - languageName: node - linkType: hard - -"pull-level@npm:^2.0.3": - version: 2.0.4 - resolution: "pull-level@npm:2.0.4" - dependencies: - level-post: ^1.0.7 - pull-cat: ^1.1.9 - pull-live: ^1.0.1 - pull-pushable: ^2.0.0 - pull-stream: ^3.4.0 - pull-window: ^2.1.4 - stream-to-pull-stream: ^1.7.1 - checksum: f4e0573b3ff3f3659eb50ac86b505aee12d5f4c1d8bafc3bf6fd67d173b3b39a3fe5161d8bfa5eba8a0c5873fbda75f3b160276cfa678d5edd517dcd3349ecc2 - languageName: node - linkType: hard - -"pull-live@npm:^1.0.1": - version: 1.0.1 - resolution: "pull-live@npm:1.0.1" - dependencies: - pull-cat: ^1.1.9 - pull-stream: ^3.4.0 - checksum: e4328771e811aec1e03996d1070ec8fecb2560cc48b96814cd9f4aebd870a710903f8693e423765d3d65d8021b3b9ccc38c8660baef3df45e217c9b1bbc5581a - languageName: node - linkType: hard - -"pull-pushable@npm:^2.0.0": - version: 2.2.0 - resolution: "pull-pushable@npm:2.2.0" - checksum: 1c88ef55f6f14799ae5cf060415d089d15452ef865d874f075c155f8224c321371cb7f04a10b3fba263b6f128158c78253efd18bcb54afbb99f9cae846f883a6 - languageName: node - linkType: hard - -"pull-stream@npm:^3.2.3, pull-stream@npm:^3.4.0, pull-stream@npm:^3.6.8": - version: 3.6.14 - resolution: "pull-stream@npm:3.6.14" - checksum: fc3d86d488894cdf1f980848886be54d8c9cf16a982e9f651098e673bf0134dd1be9b02435f59afe5b48d479c6bafb828348f7fac95fd4593633bffefdfb7503 - languageName: node - linkType: hard - -"pull-window@npm:^2.1.4": - version: 2.1.4 - resolution: "pull-window@npm:2.1.4" - dependencies: - looper: ^2.0.0 - checksum: e006995108a80c81eea93dfaadf68285dc5b9b3cbaf654da39731ca3f308376f15b0546c61730cd0fa38303e273a1845c6d65f0fda35ed9c66252a65e446df18 - languageName: node - linkType: hard - "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -11807,13 +9572,6 @@ __metadata: languageName: node linkType: hard -"punycode@npm:1.3.2": - version: 1.3.2 - resolution: "punycode@npm:1.3.2" - checksum: b8807fd594b1db33335692d1f03e8beeddde6fda7fbb4a2e32925d88d20a3aa4cd8dcc0c109ccaccbd2ba761c208dfaaada83007087ea8bfb0129c9ef1b99ed6 - languageName: node - linkType: hard - "punycode@npm:2.1.0": version: 2.1.0 resolution: "punycode@npm:2.1.0" @@ -11828,7 +9586,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0, qs@npm:^6.4.0, qs@npm:^6.7.0": +"qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" dependencies: @@ -11855,13 +9613,6 @@ __metadata: languageName: node linkType: hard -"querystring@npm:0.2.0": - version: 0.2.0 - resolution: "querystring@npm:0.2.0" - checksum: 8258d6734f19be27e93f601758858c299bdebe71147909e367101ba459b95446fbe5b975bf9beb76390156a592b6f4ac3a68b6087cea165c259705b8b4e56a69 - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2, queue-microtask@npm:^1.2.3": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -11876,7 +9627,7 @@ __metadata: languageName: node linkType: hard -"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.0.6, randombytes@npm:^2.1.0": +"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" dependencies: @@ -11914,27 +9665,6 @@ __metadata: languageName: node linkType: hard -"read-pkg-up@npm:^1.0.1": - version: 1.0.1 - resolution: "read-pkg-up@npm:1.0.1" - dependencies: - find-up: ^1.0.0 - read-pkg: ^1.0.0 - checksum: d18399a0f46e2da32beb2f041edd0cda49d2f2cc30195a05c759ef3ed9b5e6e19ba1ad1bae2362bdec8c6a9f2c3d18f4d5e8c369e808b03d498d5781cb9122c7 - languageName: node - linkType: hard - -"read-pkg@npm:^1.0.0": - version: 1.1.0 - resolution: "read-pkg@npm:1.1.0" - dependencies: - load-json-file: ^1.0.0 - normalize-package-data: ^2.3.2 - path-type: ^1.0.0 - checksum: a0f5d5e32227ec8e6a028dd5c5134eab229768dcb7a5d9a41a284ed28ad4b9284fecc47383dc1593b5694f4de603a7ffaee84b738956b9b77e0999567485a366 - languageName: node - linkType: hard - "readable-stream@npm:^1.0.33": version: 1.1.14 resolution: "readable-stream@npm:1.1.14" @@ -11947,7 +9677,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.2.8, readable-stream@npm:^2.2.9, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.0": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" dependencies: @@ -11962,7 +9692,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.0, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:^3.1.0, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": version: 3.6.0 resolution: "readable-stream@npm:3.6.0" dependencies: @@ -12028,42 +9758,7 @@ __metadata: languageName: node linkType: hard -"regenerate@npm:^1.2.1": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.11.0": - version: 0.11.1 - resolution: "regenerator-runtime@npm:0.11.1" - checksum: 3c97bd2c7b2b3247e6f8e2147a002eb78c995323732dad5dc70fac8d8d0b758d0295e7015b90d3d444446ae77cbd24b9f9123ec3a77018e81d8999818301b4f4 - languageName: node - linkType: hard - -"regenerator-transform@npm:^0.10.0": - version: 0.10.1 - resolution: "regenerator-transform@npm:0.10.1" - dependencies: - babel-runtime: ^6.18.0 - babel-types: ^6.19.0 - private: ^0.1.6 - checksum: bd366a3b0fa0d0975c48fb9eff250363a9ab28c25b472ecdc397bb19a836746640a30d8f641718a895f9178564bd8a01a0179a9c8e5813f76fc29e62a115d9d7 - languageName: node - linkType: hard - -"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": - version: 1.0.2 - resolution: "regex-not@npm:1.0.2" - dependencies: - extend-shallow: ^3.0.2 - safe-regex: ^1.1.0 - checksum: 3081403de79559387a35ef9d033740e41818a559512668cef3d12da4e8a29ef34ee13c8ed1256b07e27ae392790172e8a15c8a06b72962fd4550476cde3d8f77 - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.4.3": +"regexp.prototype.flags@npm:^1.4.3": version: 1.4.3 resolution: "regexp.prototype.flags@npm:1.4.3" dependencies: @@ -12074,6 +9769,18 @@ __metadata: languageName: node linkType: hard +"regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" + dependencies: + call-bind: ^1.0.6 + define-properties: ^1.2.1 + es-errors: ^1.3.0 + set-function-name: ^2.0.1 + checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 + languageName: node + linkType: hard + "regexpp@npm:^2.0.1": version: 2.0.1 resolution: "regexpp@npm:2.0.1" @@ -12088,101 +9795,14 @@ __metadata: languageName: node linkType: hard -"regexpu-core@npm:^2.0.0": - version: 2.0.0 - resolution: "regexpu-core@npm:2.0.0" - dependencies: - regenerate: ^1.2.1 - regjsgen: ^0.2.0 - regjsparser: ^0.1.4 - checksum: 14a78eb4608fa991ded6a1433ee6a570f95a4cfb7fe312145a44d6ecbb3dc8c707016a099494c741aa0ac75a1329b40814d30ff134c0d67679c80187029c7d2d - languageName: node - linkType: hard - -"regjsgen@npm:^0.2.0": - version: 0.2.0 - resolution: "regjsgen@npm:0.2.0" - checksum: 1f3ae570151e2c29193cdc5a5890c0b83cd8c5029ed69315b0ea303bc2644f9ab5d536d2288fd9b70293fd351d7dd7fc1fc99ebe24554015c894dbce883bcf2b - languageName: node - linkType: hard - -"regjsparser@npm:^0.1.4": - version: 0.1.5 - resolution: "regjsparser@npm:0.1.5" - dependencies: - jsesc: ~0.5.0 - bin: - regjsparser: bin/parser - checksum: 1feba2f3f2d4f1ef9f5f4e0f20c827cf866d4f65c51502eb64db4d4dd9c656f8c70f6c79537c892bf0fc9592c96f732519f7d8ad4a82f3b622756118ac737970 - languageName: node - linkType: hard - -"repeat-element@npm:^1.1.2": - version: 1.1.4 - resolution: "repeat-element@npm:1.1.4" - checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 - languageName: node - linkType: hard - -"repeat-string@npm:^1.6.1": +"repeat-string@npm:^1.0.0": version: 1.6.1 resolution: "repeat-string@npm:1.6.1" checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 languageName: node linkType: hard -"repeating@npm:^2.0.0": - version: 2.0.1 - resolution: "repeating@npm:2.0.1" - dependencies: - is-finite: ^1.0.0 - checksum: d2db0b69c5cb0c14dd750036e0abcd6b3c3f7b2da3ee179786b755cf737ca15fa0fff417ca72de33d6966056f4695440e680a352401fc02c95ade59899afbdd0 - languageName: node - linkType: hard - -"req-cwd@npm:^2.0.0": - version: 2.0.0 - resolution: "req-cwd@npm:2.0.0" - dependencies: - req-from: ^2.0.0 - checksum: c44f9dea0b0f7d3a72be18a04f7769e0eefbadca363e3a346c1c02b79745126c871e1f6970357b3e731c26740aad8344bf80fb3ce055a2bcf8ca85ad2b44f519 - languageName: node - linkType: hard - -"req-from@npm:^2.0.0": - version: 2.0.0 - resolution: "req-from@npm:2.0.0" - dependencies: - resolve-from: ^3.0.0 - checksum: 4c369881a2296e23e71668ed089c5d93b37652fe900ec9f1e1f5c1da65f6bca4ee271e97ba2b806fdea50219e011995d1df3c80a7209015cc1e1fc622507f140 - languageName: node - linkType: hard - -"request-promise-core@npm:1.1.4": - version: 1.1.4 - resolution: "request-promise-core@npm:1.1.4" - dependencies: - lodash: ^4.17.19 - peerDependencies: - request: ^2.34 - checksum: c798bafd552961e36fbf5023b1d081e81c3995ab390f1bc8ef38a711ba3fe4312eb94dbd61887073d7356c3499b9380947d7f62faa805797c0dc50f039425699 - languageName: node - linkType: hard - -"request-promise-native@npm:^1.0.5": - version: 1.0.9 - resolution: "request-promise-native@npm:1.0.9" - dependencies: - request-promise-core: 1.1.4 - stealthy-require: ^1.1.1 - tough-cookie: ^2.3.3 - peerDependencies: - request: ^2.34 - checksum: 3e2c694eefac88cb20beef8911ad57a275ab3ccbae0c4ca6c679fffb09d5fd502458aab08791f0814ca914b157adab2d4e472597c97a73be702918e41725ed69 - languageName: node - linkType: hard - -"request@npm:^2.79.0, request@npm:^2.85.0, request@npm:^2.88.0": +"request@npm:^2.79.0": version: 2.88.2 resolution: "request@npm:2.88.2" dependencies: @@ -12217,13 +9837,6 @@ __metadata: languageName: node linkType: hard -"require-from-string@npm:^1.1.0": - version: 1.2.1 - resolution: "require-from-string@npm:1.2.1" - checksum: d2e0b0c798fe45d86456a32425635bd9d2a75a20e87f67294fa5cce5ed61fdf41e0c7c57afa981fb836299bfb0c37c915adb4d22478dc8d12edbf80a304e9324 - languageName: node - linkType: hard - "require-from-string@npm:^2.0.0, require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" @@ -12231,13 +9844,6 @@ __metadata: languageName: node linkType: hard -"require-main-filename@npm:^1.0.1": - version: 1.0.1 - resolution: "require-main-filename@npm:1.0.1" - checksum: 1fef30754da961f4e13c450c3eb60c7ae898a529c6ad6fa708a70bd2eed01564ceb299187b2899f5562804d797a059f39a5789884d0ac7b7ae1defc68fba4abf - languageName: node - linkType: hard - "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -12273,13 +9879,6 @@ __metadata: languageName: node linkType: hard -"resolve-url@npm:^0.2.1": - version: 0.2.1 - resolution: "resolve-url@npm:0.2.1" - checksum: 7b7035b9ed6e7bc7d289e90aef1eab5a43834539695dac6416ca6e91f1a94132ae4796bbd173cdacfdc2ade90b5f38a3fb6186bebc1b221cd157777a23b9ad14 - languageName: node - linkType: hard - "resolve@npm:1.1.x": version: 1.1.7 resolution: "resolve@npm:1.1.7" @@ -12287,7 +9886,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.17.0, resolve@npm:~1.17.0": +"resolve@npm:1.17.0": version: 1.17.0 resolution: "resolve@npm:1.17.0" dependencies: @@ -12296,7 +9895,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.8.1": +"resolve@npm:^1.1.6, resolve@npm:^1.10.1, resolve@npm:^1.20.0, resolve@npm:^1.22.0": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -12316,7 +9915,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@1.17.0#~builtin, resolve@patch:resolve@~1.17.0#~builtin": +"resolve@patch:resolve@1.17.0#~builtin": version: 1.17.0 resolution: "resolve@patch:resolve@npm%3A1.17.0#~builtin::version=1.17.0&hash=c3c19d" dependencies: @@ -12325,7 +9924,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.10.1#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.8.1#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.1#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=c3c19d" dependencies: @@ -12338,15 +9937,6 @@ __metadata: languageName: node linkType: hard -"responselike@npm:^1.0.2": - version: 1.0.2 - resolution: "responselike@npm:1.0.2" - dependencies: - lowercase-keys: ^1.0.0 - checksum: 2e9e70f1dcca3da621a80ce71f2f9a9cad12c047145c6ece20df22f0743f051cf7c73505e109814915f23f9e34fb0d358e22827723ee3d56b623533cab8eafcd - languageName: node - linkType: hard - "responselike@npm:^2.0.0": version: 2.0.1 resolution: "responselike@npm:2.0.1" @@ -12366,22 +9956,6 @@ __metadata: languageName: node linkType: hard -"resumer@npm:~0.0.0": - version: 0.0.0 - resolution: "resumer@npm:0.0.0" - dependencies: - through: ~2.3.4 - checksum: 21b1c257aac24840643fae9bc99ca6447a71a0039e7c6dcf64d0ead447ce511eff158d529f1b6258ad12668e66ee3e49ff14932d2b88a3bd578f483e79708104 - languageName: node - linkType: hard - -"ret@npm:~0.1.10": - version: 0.1.15 - resolution: "ret@npm:0.1.15" - checksum: d76a9159eb8c946586567bd934358dfc08a36367b3257f7a3d7255fdd7b56597235af23c6afa0d7f0254159e8051f93c918809962ebd6df24ca2a83dbe4d4151 - languageName: node - linkType: hard - "retry@npm:0.13.1": version: 0.13.1 resolution: "retry@npm:0.13.1" @@ -12414,7 +9988,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^2.2.8, rimraf@npm:^2.6.3": +"rimraf@npm:^2.2.8": version: 2.7.1 resolution: "rimraf@npm:2.7.1" dependencies: @@ -12453,7 +10027,7 @@ __metadata: languageName: node linkType: hard -"rlp@npm:^2.0.0, rlp@npm:^2.2.1, rlp@npm:^2.2.2, rlp@npm:^2.2.3, rlp@npm:^2.2.4": +"rlp@npm:^2.0.0, rlp@npm:^2.2.3, rlp@npm:^2.2.4": version: 2.2.6 resolution: "rlp@npm:2.2.6" dependencies: @@ -12471,15 +10045,6 @@ __metadata: languageName: node linkType: hard -"run-parallel-limit@npm:^1.1.0": - version: 1.1.0 - resolution: "run-parallel-limit@npm:1.1.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: 672c3b87e7f939c684b9965222b361421db0930223ed1e43ebf0e7e48ccc1a022ea4de080bef4d5468434e2577c33b7681e3f03b7593fdc49ad250a55381123c - languageName: node - linkType: hard - "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -12489,10 +10054,19 @@ __metadata: languageName: node linkType: hard -"rustbn.js@npm:~0.2.0": +"rust-verkle-wasm@npm:^0.0.1": + version: 0.0.1 + resolution: "rust-verkle-wasm@npm:0.0.1" + checksum: 24258e935d50b69d25d25d958ba4515b01470458ed7c42466cbc657104e826173827b838501eea1b94c71fd6c01fccd04829f0cc85cbad5d5c5d968c6d6df59e + languageName: node + linkType: hard + +"rustbn-wasm@npm:^0.2.0": version: 0.2.0 - resolution: "rustbn.js@npm:0.2.0" - checksum: 2148e7ba34e70682907ee29df4784639e6eb025481b2c91249403b7ec57181980161868d9aa24822a5075dd1bb5a180dfedc77309e5f0d27b6301f9b563af99a + resolution: "rustbn-wasm@npm:0.2.0" + dependencies: + "@scure/base": ^1.1.1 + checksum: 9cf89ce88a9d161bce8ea2516b3037fe97e1debb2e9b86d6f3cd133e2c120c844644d37c61c27ae00475e49595a397e61559431875a61c5c52a04c40ba658872 languageName: node linkType: hard @@ -12505,6 +10079,18 @@ __metadata: languageName: node linkType: hard +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 + languageName: node + linkType: hard + "safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -12519,15 +10105,6 @@ __metadata: languageName: node linkType: hard -"safe-event-emitter@npm:^1.0.1": - version: 1.0.1 - resolution: "safe-event-emitter@npm:1.0.1" - dependencies: - events: ^3.0.0 - checksum: 2a15094bd28b0966571693f219b5a846949ae24f7ba87c6024f0ed552bef63ebe72970a784b85b77b1f03f1c95e78fabe19306d44538dbc4a3a685bed31c18c4 - languageName: node - linkType: hard - "safe-regex-test@npm:^1.0.0": version: 1.0.0 resolution: "safe-regex-test@npm:1.0.0" @@ -12539,12 +10116,14 @@ __metadata: languageName: node linkType: hard -"safe-regex@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-regex@npm:1.1.0" +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" dependencies: - ret: ~0.1.10 - checksum: 9a8bba57c87a841f7997b3b951e8e403b1128c1a4fd1182f40cc1a20e2d490593d7c2a21030fadfea320c8e859219019e136f678c6689ed5960b391b822f01d5 + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-regex: ^1.1.4 + checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 languageName: node linkType: hard @@ -12579,13 +10158,6 @@ __metadata: languageName: node linkType: hard -"scrypt-js@npm:2.0.4": - version: 2.0.4 - resolution: "scrypt-js@npm:2.0.4" - checksum: 679e8940953ebbef40863bfcc58f1d3058d4b7af0ca9bd8062d8213c30e14db59c6ebfc82a85fbd3b90b6d46b708be4c53b9c4bb200b6f50767dc08a846315a9 - languageName: node - linkType: hard - "scrypt-js@npm:3.0.1, scrypt-js@npm:^3.0.0, scrypt-js@npm:^3.0.1": version: 3.0.1 resolution: "scrypt-js@npm:3.0.1" @@ -12593,15 +10165,6 @@ __metadata: languageName: node linkType: hard -"scryptsy@npm:^1.2.1": - version: 1.2.1 - resolution: "scryptsy@npm:1.2.1" - dependencies: - pbkdf2: ^3.0.3 - checksum: e09cf253b0974171bbcb77fa46405bb07cb8e241e2851fc5f23b38526a33105f0f7748a4d60027642f40bd4518ada30b1dce5005c05d17a25cbcefad371d4259 - languageName: node - linkType: hard - "scryptsy@npm:^2.1.0": version: 2.1.0 resolution: "scryptsy@npm:2.1.0" @@ -12621,13 +10184,6 @@ __metadata: languageName: node linkType: hard -"seedrandom@npm:3.0.1": - version: 3.0.1 - resolution: "seedrandom@npm:3.0.1" - checksum: a8f5bd0e918c4d4b59afd6f5dbd28f5ab8d5f118ee59892c3712f581de51574ac6622aa38fa2d03476b661f8407e98d6ff32af3d7cfdb02c90d046e7f5f91952 - languageName: node - linkType: hard - "semaphore-async-await@npm:^1.5.1": version: 1.5.1 resolution: "semaphore-async-await@npm:1.5.1" @@ -12635,14 +10191,14 @@ __metadata: languageName: node linkType: hard -"semaphore@npm:>=1.0.1, semaphore@npm:^1.0.3, semaphore@npm:^1.1.0": +"semaphore@npm:>=1.0.1": version: 1.1.0 resolution: "semaphore@npm:1.1.0" checksum: d2445d232ad9959048d4748ef54eb01bc7b60436be2b42fb7de20c4cffacf70eafeeecd3772c1baf408cfdce3805fa6618a4389590335671f18cde54ef3cfae4 languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.5.0, semver@npm:^5.5.1, semver@npm:^5.6.0, semver@npm:^5.7.0": +"semver@npm:^5.5.0, semver@npm:^5.5.1, semver@npm:^5.7.0": version: 5.7.1 resolution: "semver@npm:5.7.1" bin: @@ -12671,6 +10227,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.5.2, semver@npm:^7.5.4": + version: 7.6.0 + resolution: "semver@npm:7.6.0" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c + languageName: node + linkType: hard + "semver@npm:~5.4.1": version: 5.4.1 resolution: "semver@npm:5.4.1" @@ -12742,29 +10309,29 @@ __metadata: languageName: node linkType: hard -"set-immediate-shim@npm:^1.0.1": - version: 1.0.1 - resolution: "set-immediate-shim@npm:1.0.1" - checksum: 5085c84039d1e5eee73d2bf48ce765fcec76159021d0cc7b40e23bcdf62cb6d450ffb781e3c62c1118425242c48eae96df712cba0a20a437e86b0d4a15d51a11 - languageName: node - linkType: hard - -"set-value@npm:^2.0.0, set-value@npm:^2.0.1": - version: 2.0.1 - resolution: "set-value@npm:2.0.1" +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" dependencies: - extend-shallow: ^2.0.1 - is-extendable: ^0.1.1 - is-plain-object: ^2.0.3 - split-string: ^3.0.1 - checksum: 09a4bc72c94641aeae950eb60dc2755943b863780fcc32e441eda964b64df5e3f50603d5ebdd33394ede722528bd55ed43aae26e9df469b4d32e2292b427b601 + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 languageName: node linkType: hard -"setimmediate@npm:1.0.4": - version: 1.0.4 - resolution: "setimmediate@npm:1.0.4" - checksum: 1d3726183ade73fa1c83bd562b05ae34e97802229d5b9292cde7ed03846524f04eb0fdd2131cc159103e3a7afb7c4e958b35bf960e3c4846fa50d94a3278be6f +"set-function-name@npm:^2.0.1": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.2 + checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f languageName: node linkType: hard @@ -12876,6 +10443,13 @@ __metadata: languageName: node linkType: hard +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + "simple-concat@npm:^1.0.0": version: 1.0.1 resolution: "simple-concat@npm:1.0.1" @@ -12894,20 +10468,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^1.0.0": - version: 1.0.0 - resolution: "slash@npm:1.0.0" - checksum: 4b6e21b1fba6184a7e2efb1dd173f692d8a845584c1bbf9dc818ff86f5a52fc91b413008223d17cc684604ee8bb9263a420b1182027ad9762e35388434918860 - languageName: node - linkType: hard - -"slash@npm:^2.0.0": - version: 2.0.0 - resolution: "slash@npm:2.0.0" - checksum: 512d4350735375bd11647233cb0e2f93beca6f53441015eea241fe784d8068281c3987fbaa93e7ef1c38df68d9c60013045c92837423c69115297d6169aa85e6 - languageName: node - linkType: hard - "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -12944,42 +10504,6 @@ __metadata: languageName: node linkType: hard -"snapdragon-node@npm:^2.0.1": - version: 2.1.1 - resolution: "snapdragon-node@npm:2.1.1" - dependencies: - define-property: ^1.0.0 - isobject: ^3.0.0 - snapdragon-util: ^3.0.1 - checksum: 9bb57d759f9e2a27935dbab0e4a790137adebace832b393e350a8bf5db461ee9206bb642d4fe47568ee0b44080479c8b4a9ad0ebe3712422d77edf9992a672fd - languageName: node - linkType: hard - -"snapdragon-util@npm:^3.0.1": - version: 3.0.1 - resolution: "snapdragon-util@npm:3.0.1" - dependencies: - kind-of: ^3.2.0 - checksum: 684997dbe37ec995c03fd3f412fba2b711fc34cb4010452b7eb668be72e8811a86a12938b511e8b19baf853b325178c56d8b78d655305e5cfb0bb8b21677e7b7 - languageName: node - linkType: hard - -"snapdragon@npm:^0.8.1": - version: 0.8.2 - resolution: "snapdragon@npm:0.8.2" - dependencies: - base: ^0.11.1 - debug: ^2.2.0 - define-property: ^0.2.5 - extend-shallow: ^2.0.1 - map-cache: ^0.2.2 - source-map: ^0.5.6 - source-map-resolve: ^0.5.0 - use: ^3.1.0 - checksum: a197f242a8f48b11036563065b2487e9b7068f50a20dd81d9161eca6af422174fc158b8beeadbe59ce5ef172aa5718143312b3aebaae551c124b7824387c8312 - languageName: node - linkType: hard - "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" @@ -13040,45 +10564,14 @@ __metadata: languageName: node linkType: hard -"solc@npm:^0.4.20": - version: 0.4.26 - resolution: "solc@npm:0.4.26" - dependencies: - fs-extra: ^0.30.0 - memorystream: ^0.3.1 - require-from-string: ^1.1.0 - semver: ^5.3.0 - yargs: ^4.7.1 - bin: - solcjs: solcjs - checksum: 041da7ff725c19023ef34a17f83b3303971d2e62bcea9d0fd3c7af728d6f40ff7cdf2b806d0208a3336d3c9be18c321955e1712ab39ee57390ba00d512def946 - languageName: node - linkType: hard - -"solc@npm:^0.6.3": - version: 0.6.12 - resolution: "solc@npm:0.6.12" - dependencies: - command-exists: ^1.2.8 - commander: 3.0.2 - fs-extra: ^0.30.0 - js-sha3: 0.8.0 - memorystream: ^0.3.1 - require-from-string: ^2.0.0 - semver: ^5.5.0 - tmp: 0.0.33 - bin: - solcjs: solcjs - checksum: 1e2bf927f3ef4f3b195b7619ff64f715916d94dc59091a8a710e47bdd4b18e0bd92b55ea43a04ce7fabce9ad7a3e4e73ccaf127a50ebbf963a9de9046576e3b6 - languageName: node - linkType: hard - -"solhint@npm:^2.0.0": - version: 2.3.1 - resolution: "solhint@npm:2.3.1" +"solhint@npm:^3.3.7": + version: 3.3.7 + resolution: "solhint@npm:3.3.7" dependencies: + "@solidity-parser/parser": ^0.14.1 ajv: ^6.6.1 antlr4: 4.7.1 + ast-parents: 0.0.1 chalk: ^2.4.2 commander: 2.18.0 cosmiconfig: ^5.0.7 @@ -13095,49 +10588,54 @@ __metadata: optional: true bin: solhint: solhint.js - checksum: d8a8fe8ab903dbebadda043b21ee87425f371c2c88bc01a201926f04dd38b8d5439d7831287db5892d75ca2ecfdba6c2b782d1367cc7ba1fbe115f3b22143a44 + checksum: 140a4660b691ea78aa7de19aca2123991fb4f9bc7be574e1573ae428b356e12919805df56c2892ddbdd031a4a4db477a81425ad85aac6672f3fb73f4887c2abb languageName: node linkType: hard -"solhint@npm:^3.3.7": - version: 3.3.7 - resolution: "solhint@npm:3.3.7" +"solhint@npm:^3.4.0": + version: 3.6.2 + resolution: "solhint@npm:3.6.2" dependencies: - "@solidity-parser/parser": ^0.14.1 - ajv: ^6.6.1 - antlr4: 4.7.1 - ast-parents: 0.0.1 - chalk: ^2.4.2 - commander: 2.18.0 - cosmiconfig: ^5.0.7 - eslint: ^5.6.0 - fast-diff: ^1.1.2 - glob: ^7.1.3 - ignore: ^4.0.6 - js-yaml: ^3.12.0 - lodash: ^4.17.11 - prettier: ^1.14.3 - semver: ^6.3.0 + "@solidity-parser/parser": ^0.16.0 + ajv: ^6.12.6 + antlr4: ^4.11.0 + ast-parents: ^0.0.1 + chalk: ^4.1.2 + commander: ^10.0.0 + cosmiconfig: ^8.0.0 + fast-diff: ^1.2.0 + glob: ^8.0.3 + ignore: ^5.2.4 + js-yaml: ^4.1.0 + lodash: ^4.17.21 + pluralize: ^8.0.0 + prettier: ^2.8.3 + semver: ^7.5.2 + strip-ansi: ^6.0.1 + table: ^6.8.1 + text-table: ^0.2.0 dependenciesMeta: prettier: optional: true bin: solhint: solhint.js - checksum: 140a4660b691ea78aa7de19aca2123991fb4f9bc7be574e1573ae428b356e12919805df56c2892ddbdd031a4a4db477a81425ad85aac6672f3fb73f4887c2abb + checksum: 96c2ab3c1444624facb45b929682c65d83019f392c7331463a45e8ed61f08122e24b6709a721b6086ddfb0d5e3c3d4281f175f74eb308415072917556bdeba22 languageName: node linkType: hard -"solidity-ast@npm:^0.4.15": - version: 0.4.20 - resolution: "solidity-ast@npm:0.4.20" - checksum: 8630f74a8cb08ae0506248a8ada59a6248c41969406e6bb183a10e882fb0f78ded87c51b34d19717ea368be6a9a620d97dd4352eb1b10bc6c6425dc43c46f650 +"solidity-ast@npm:^0.4.51": + version: 0.4.56 + resolution: "solidity-ast@npm:0.4.56" + dependencies: + array.prototype.findlast: ^1.2.2 + checksum: 124cd54dc187860c83f4e8a3cbc41f890fbd0aaad4695356763034bdc782046eac414b161b7f354e423e075dba303d6bef213682df8932fee5d143d52135cd4e languageName: node linkType: hard -"solidity-comments-extractor@npm:^0.0.7": - version: 0.0.7 - resolution: "solidity-comments-extractor@npm:0.0.7" - checksum: a5cedf2310709969bc1783a6c336171478536f2f0ea96ad88437e0ef1e8844c0b37dd75591b0a824ec9c30640ea7e31b5f03128e871e6235bef3426617ce96c4 +"solidity-comments-extractor@npm:^0.0.8": + version: 0.0.8 + resolution: "solidity-comments-extractor@npm:0.0.8" + checksum: ad025fc968e2d744b4270710c2f7f55b43d8046ab3f155fd880a7768d6fd163a93ea98f62be3b1115a29ba815bd8b5736bb5ffd1feff79083eca1bf273108d07 languageName: node linkType: hard @@ -13173,38 +10671,6 @@ __metadata: languageName: node linkType: hard -"source-map-resolve@npm:^0.5.0": - version: 0.5.3 - resolution: "source-map-resolve@npm:0.5.3" - dependencies: - atob: ^2.1.2 - decode-uri-component: ^0.2.0 - resolve-url: ^0.2.1 - source-map-url: ^0.4.0 - urix: ^0.1.0 - checksum: c73fa44ac00783f025f6ad9e038ab1a2e007cd6a6b86f47fe717c3d0765b4a08d264f6966f3bd7cd9dbcd69e4832783d5472e43247775b2a550d6f2155d24bae - languageName: node - linkType: hard - -"source-map-support@npm:0.5.12": - version: 0.5.12 - resolution: "source-map-support@npm:0.5.12" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: abf93e6201f54bd5713d6f6d5aa32b3752d750ce3c68044733295622ea0c346177505a615e87c073a1e0ad9b1d17b87a58f81152a31d6459658e4e9c17132db6 - languageName: node - linkType: hard - -"source-map-support@npm:^0.4.15": - version: 0.4.18 - resolution: "source-map-support@npm:0.4.18" - dependencies: - source-map: ^0.5.6 - checksum: 669aa7e992fec586fac0ba9a8dea8ce81b7328f92806335f018ffac5709afb2920e3870b4e56c68164282607229f04b8bbcf5d0e5c845eb1b5119b092e7585c0 - languageName: node - linkType: hard - "source-map-support@npm:^0.5.13, source-map-support@npm:^0.5.6": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" @@ -13215,20 +10681,6 @@ __metadata: languageName: node linkType: hard -"source-map-url@npm:^0.4.0": - version: 0.4.1 - resolution: "source-map-url@npm:0.4.1" - checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c - languageName: node - linkType: hard - -"source-map@npm:^0.5.6, source-map@npm:^0.5.7": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d - languageName: node - linkType: hard - "source-map@npm:^0.6.0, source-map@npm:^0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -13245,49 +10697,6 @@ __metadata: languageName: node linkType: hard -"spdx-correct@npm:^3.0.0": - version: 3.1.1 - resolution: "spdx-correct@npm:3.1.1" - dependencies: - spdx-expression-parse: ^3.0.0 - spdx-license-ids: ^3.0.0 - checksum: 77ce438344a34f9930feffa61be0eddcda5b55fc592906ef75621d4b52c07400a97084d8701557b13f7d2aae0cb64f808431f469e566ef3fe0a3a131dcb775a6 - languageName: node - linkType: hard - -"spdx-exceptions@npm:^2.1.0": - version: 2.3.0 - resolution: "spdx-exceptions@npm:2.3.0" - checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 - languageName: node - linkType: hard - -"spdx-expression-parse@npm:^3.0.0": - version: 3.0.1 - resolution: "spdx-expression-parse@npm:3.0.1" - dependencies: - spdx-exceptions: ^2.1.0 - spdx-license-ids: ^3.0.0 - checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde - languageName: node - linkType: hard - -"spdx-license-ids@npm:^3.0.0": - version: 3.0.7 - resolution: "spdx-license-ids@npm:3.0.7" - checksum: b52a88aebc19b4c69049349939e1948014c4d10f52a11870431fc1cc6551de411d19e4570f5f1df2d8b7089bec921df9017a3d5199ae2468b2b432171945278e - languageName: node - linkType: hard - -"split-string@npm:^3.0.1, split-string@npm:^3.0.2": - version: 3.1.0 - resolution: "split-string@npm:3.1.0" - dependencies: - extend-shallow: ^3.0.0 - checksum: ae5af5c91bdc3633628821bde92fdf9492fa0e8a63cf6a0376ed6afde93c701422a1610916f59be61972717070119e848d10dfbbd5024b7729d6a71972d2a84c - languageName: node - linkType: hard - "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -13334,16 +10743,6 @@ __metadata: languageName: node linkType: hard -"static-extend@npm:^0.1.1": - version: 0.1.2 - resolution: "static-extend@npm:0.1.2" - dependencies: - define-property: ^0.2.5 - object-copy: ^0.1.0 - checksum: 8657485b831f79e388a437260baf22784540417a9b29e11572c87735df24c22b84eda42107403a64b30861b2faf13df9f7fc5525d51f9d1d2303aba5cbf4e12c - languageName: node - linkType: hard - "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -13351,30 +10750,6 @@ __metadata: languageName: node linkType: hard -"stealthy-require@npm:^1.1.1": - version: 1.1.1 - resolution: "stealthy-require@npm:1.1.1" - checksum: 6805b857a9f3a6a1079fc6652278038b81011f2a5b22cbd559f71a6c02087e6f1df941eb10163e3fdc5391ab5807aa46758d4258547c1f5ede31e6d9bfda8dd3 - languageName: node - linkType: hard - -"stream-to-pull-stream@npm:^1.7.1": - version: 1.7.3 - resolution: "stream-to-pull-stream@npm:1.7.3" - dependencies: - looper: ^3.0.0 - pull-stream: ^3.2.3 - checksum: 2b878e3b3d5f435802866bfec8897361b9de4ce69f77669da1103cfc45f54833e7c183922468f30c046d375a1642f5a4801a808a8da0d3927c5de41d42a59bc0 - languageName: node - linkType: hard - -"streamsearch@npm:^1.1.0": - version: 1.1.0 - resolution: "streamsearch@npm:1.1.0" - checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942 - languageName: node - linkType: hard - "strict-uri-encode@npm:^1.0.0": version: 1.1.0 resolution: "strict-uri-encode@npm:1.1.0" @@ -13389,18 +10764,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.1": - version: 1.0.2 - resolution: "string-width@npm:1.0.2" - dependencies: - code-point-at: ^1.0.0 - is-fullwidth-code-point: ^1.0.0 - strip-ansi: ^3.0.0 - checksum: 5c79439e95bc3bd7233a332c5f5926ab2ee90b23816ed4faa380ce3b2576d7800b0a5bb15ae88ed28737acc7ea06a518c2eef39142dd727adad0e45c776cd37e - languageName: node - linkType: hard - -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -13411,7 +10775,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.2 || 2, string-width@npm:^2.1.0, string-width@npm:^2.1.1": +"string-width@npm:^1.0.2 || 2, string-width@npm:^2.1.0": version: 2.1.1 resolution: "string-width@npm:2.1.1" dependencies: @@ -13432,14 +10796,26 @@ __metadata: languageName: node linkType: hard -"string.prototype.trim@npm:~1.2.1": - version: 1.2.4 - resolution: "string.prototype.trim@npm:1.2.4" +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.18.0-next.2 - checksum: 81b9c5ebe9b24c16be560f02d13f98cb6000e638998e883bbab97fe3518dfbf16464ff76fd66979b5bce6ad689b468dad62afb36b5fbf8461a730c665b51b2de + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.0 + es-object-atoms: ^1.0.0 + checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193 languageName: node linkType: hard @@ -13454,14 +10830,36 @@ __metadata: languageName: node linkType: hard +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd + languageName: node + linkType: hard + "string.prototype.trimstart@npm:^1.0.5": version: 1.0.5 resolution: "string.prototype.trimstart@npm:1.0.5" dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.19.5 - checksum: a4857c5399ad709d159a77371eeaa8f9cc284469a0b5e1bfe405de16f1fd4166a8ea6f4180e55032f348d1b679b1599fd4301fbc7a8b72bdb3e795e43f7b1048 + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.19.5 + checksum: a4857c5399ad709d159a77371eeaa8f9cc284469a0b5e1bfe405de16f1fd4166a8ea6f4180e55032f348d1b679b1599fd4301fbc7a8b72bdb3e795e43f7b1048 + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 languageName: node linkType: hard @@ -13490,12 +10888,12 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": - version: 3.0.1 - resolution: "strip-ansi@npm:3.0.1" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" dependencies: - ansi-regex: ^2.0.0 - checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c languageName: node linkType: hard @@ -13517,21 +10915,12 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"strip-bom@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-bom@npm:2.0.0" +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" dependencies: - is-utf8: ^0.2.0 - checksum: 08efb746bc67b10814cd03d79eb31bac633393a782e3f35efbc1b61b5165d3806d03332a97f362822cf0d4dd14ba2e12707fcff44fe1c870c48a063a0c9e4944 + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d languageName: node linkType: hard @@ -13583,13 +10972,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^2.0.0": - version: 2.0.0 - resolution: "supports-color@npm:2.0.0" - checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0 - languageName: node - linkType: hard - "supports-color@npm:^3.1.0": version: 3.2.3 resolution: "supports-color@npm:3.2.3" @@ -13643,26 +11025,6 @@ __metadata: languageName: node linkType: hard -"sync-request@npm:^6.0.0": - version: 6.1.0 - resolution: "sync-request@npm:6.1.0" - dependencies: - http-response-object: ^3.0.1 - sync-rpc: ^1.2.1 - then-request: ^6.0.0 - checksum: cc8438a6749f62fb501d022fae0e3af3ac4a9983f889f929c8721b328a1c3408b98ca218aad886785a02be2c34bd75eb1a5a2608bd1fcee3c8c099391ff53a11 - languageName: node - linkType: hard - -"sync-rpc@npm:^1.2.1": - version: 1.3.6 - resolution: "sync-rpc@npm:1.3.6" - dependencies: - get-port: ^3.1.0 - checksum: 4340974fb5641c2cadb9df18d6b791ed2327f28cf6d8a00c99ebc2278e37391e3f5e237596da2ff83d14d2147594c6f5b3b98a93b9327644db425d239dea172f - languageName: node - linkType: hard - "table-layout@npm:^1.0.2": version: 1.0.2 resolution: "table-layout@npm:1.0.2" @@ -13700,28 +11062,16 @@ __metadata: languageName: node linkType: hard -"tape@npm:^4.6.3": - version: 4.13.3 - resolution: "tape@npm:4.13.3" - dependencies: - deep-equal: ~1.1.1 - defined: ~1.0.0 - dotignore: ~0.1.2 - for-each: ~0.3.3 - function-bind: ~1.1.1 - glob: ~7.1.6 - has: ~1.0.3 - inherits: ~2.0.4 - is-regex: ~1.0.5 - minimist: ~1.2.5 - object-inspect: ~1.7.0 - resolve: ~1.17.0 - resumer: ~0.0.0 - string.prototype.trim: ~1.2.1 - through: ~2.3.8 - bin: - tape: bin/tape - checksum: a4f6870076519ac6a95dc536ff797f8bab0df71e7e6609771af44ec7674829f760ba0b76021bda8dfbb6660bf4b21931a4090a4cce97ad5a55bc4670701ff757 +"table@npm:^6.8.1": + version: 6.8.2 + resolution: "table@npm:6.8.2" + dependencies: + ajv: ^8.0.1 + lodash.truncate: ^4.4.2 + slice-ansi: ^4.0.0 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + checksum: 61188652f53a980d1759ca460ca8dea5c5322aece3210457e7084882f053c2b6a870041295e08a82cb1d676e31b056406845d94b0abf3c79a4b104777bec413b languageName: node linkType: hard @@ -13754,23 +11104,6 @@ __metadata: languageName: node linkType: hard -"test-value@npm:^2.1.0": - version: 2.1.0 - resolution: "test-value@npm:2.1.0" - dependencies: - array-back: ^1.0.3 - typical: ^2.6.0 - checksum: ce41ef4100c9ac84630e78d1ca06706714587faf255e44296ace1fc7bf5b888c160b8c0229d31467252a3b2b57197965194391f6ee0c54f33e0b8e3af3a33a0c - languageName: node - linkType: hard - -"testrpc@npm:0.0.1": - version: 0.0.1 - resolution: "testrpc@npm:0.0.1" - checksum: e27778552df2d0b938b062fdf41d44557f0eb3de75903cb90b87909f55a82a6345dd13e40d1498e718272b4e5225872dca66da73646c35df1031486bb0ed0fda - languageName: node - linkType: hard - "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -13778,36 +11111,7 @@ __metadata: languageName: node linkType: hard -"then-request@npm:^6.0.0": - version: 6.0.2 - resolution: "then-request@npm:6.0.2" - dependencies: - "@types/concat-stream": ^1.6.0 - "@types/form-data": 0.0.33 - "@types/node": ^8.0.0 - "@types/qs": ^6.2.31 - caseless: ~0.12.0 - concat-stream: ^1.6.0 - form-data: ^2.2.0 - http-basic: ^8.1.1 - http-response-object: ^3.0.1 - promise: ^8.0.0 - qs: ^6.4.0 - checksum: a24a4fc95dd8591966bf3752f024f5cd4d53c2b2c29b23b4e40c3322df6a432d939bc17b589d8e9d760b90e92ab860f6f361a4dfcfe3542019e1615fb51afccc - languageName: node - linkType: hard - -"through2@npm:^2.0.3": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: ~2.3.6 - xtend: ~4.0.1 - checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 - languageName: node - linkType: hard - -"through@npm:^2.3.6, through@npm:~2.3.4, through@npm:~2.3.8": +"through@npm:^2.3.6": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd @@ -13830,48 +11134,6 @@ __metadata: languageName: node linkType: hard -"tmp@npm:0.1.0": - version: 0.1.0 - resolution: "tmp@npm:0.1.0" - dependencies: - rimraf: ^2.6.3 - checksum: 6bab8431de9d245d4264bd8cd6bb216f9d22f179f935dada92a11d1315572c8eb7c3334201e00594b4708608bd536fad3a63bfb037e7804d827d66aa53a1afcd - languageName: node - linkType: hard - -"to-fast-properties@npm:^1.0.3": - version: 1.0.3 - resolution: "to-fast-properties@npm:1.0.3" - checksum: bd0abb58c4722851df63419de3f6d901d5118f0440d3f71293ed776dd363f2657edaaf2dc470e3f6b7b48eb84aa411193b60db8a4a552adac30de9516c5cc580 - languageName: node - linkType: hard - -"to-object-path@npm:^0.3.0": - version: 0.3.0 - resolution: "to-object-path@npm:0.3.0" - dependencies: - kind-of: ^3.0.2 - checksum: 9425effee5b43e61d720940fa2b889623f77473d459c2ce3d4a580a4405df4403eec7be6b857455908070566352f9e2417304641ed158dda6f6a365fe3e66d70 - languageName: node - linkType: hard - -"to-readable-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "to-readable-stream@npm:1.0.0" - checksum: 2bd7778490b6214a2c40276065dd88949f4cf7037ce3964c76838b8cb212893aeb9cceaaf4352a4c486e3336214c350270f3263e1ce7a0c38863a715a4d9aeb5 - languageName: node - linkType: hard - -"to-regex-range@npm:^2.1.0": - version: 2.1.1 - resolution: "to-regex-range@npm:2.1.1" - dependencies: - is-number: ^3.0.0 - repeat-string: ^1.6.1 - checksum: 46093cc14be2da905cc931e442d280b2e544e2bfdb9a24b3cf821be8d342f804785e5736c108d5be026021a05d7b38144980a61917eee3c88de0a5e710e10320 - languageName: node - linkType: hard - "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -13881,18 +11143,6 @@ __metadata: languageName: node linkType: hard -"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": - version: 3.0.2 - resolution: "to-regex@npm:3.0.2" - dependencies: - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - regex-not: ^1.0.2 - safe-regex: ^1.1.0 - checksum: 4ed4a619059b64e204aad84e4e5f3ea82d97410988bcece7cf6cbfdbf193d11bff48cf53842d88b8bb00b1bfc0d048f61f20f0709e6f393fd8fe0122662d9db4 - languageName: node - linkType: hard - "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -13900,7 +11150,7 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^2.3.3, tough-cookie@npm:~2.5.0": +"tough-cookie@npm:~2.5.0": version: 2.5.0 resolution: "tough-cookie@npm:2.5.0" dependencies: @@ -13917,13 +11167,6 @@ __metadata: languageName: node linkType: hard -"trim-right@npm:^1.0.1": - version: 1.0.1 - resolution: "trim-right@npm:1.0.1" - checksum: 9120af534e006a7424a4f9358710e6e707887b6ccf7ea69e50d6ac6464db1fe22268400def01752f09769025d480395159778153fb98d4a2f6f40d4cf5d4f3b6 - languageName: node - linkType: hard - "ts-command-line-args@npm:^2.2.0": version: 2.3.1 resolution: "ts-command-line-args@npm:2.3.1" @@ -13938,22 +11181,6 @@ __metadata: languageName: node linkType: hard -"ts-essentials@npm:^1.0.0": - version: 1.0.4 - resolution: "ts-essentials@npm:1.0.4" - checksum: 2e19bbe51203707ca732dcc6c3f238b2cf22bb9213d26ae0246c02325fb3e5f17c32505ac79c1bd538b7951a798155b07422e263a95cb295070a48233e45a1b5 - languageName: node - linkType: hard - -"ts-essentials@npm:^6.0.3": - version: 6.0.7 - resolution: "ts-essentials@npm:6.0.7" - peerDependencies: - typescript: ">=3.7.0" - checksum: b47a1793df9ea997d50d2cc9155433952b189cfca0c534a6f3f3dce6aa782a37574d2179dee6d55ed918835aa17addda49619ff2bd2eb3e60e331db3ce30a79b - languageName: node - linkType: hard - "ts-essentials@npm:^7.0.1": version: 7.0.3 resolution: "ts-essentials@npm:7.0.3" @@ -13963,25 +11190,6 @@ __metadata: languageName: node linkType: hard -"ts-generator@npm:^0.1.1": - version: 0.1.1 - resolution: "ts-generator@npm:0.1.1" - dependencies: - "@types/mkdirp": ^0.5.2 - "@types/prettier": ^2.1.1 - "@types/resolve": ^0.0.8 - chalk: ^2.4.1 - glob: ^7.1.2 - mkdirp: ^0.5.1 - prettier: ^2.1.2 - resolve: ^1.8.1 - ts-essentials: ^1.0.0 - bin: - ts-generator: dist/cli/run.js - checksum: 3add2e76afd7a4d9d9aee1ff26477ee4e8b4cc740b35787f9ea780c11aefc88e6c7833837eacc12b944c1883680639dc9cc47fe173eff95c62112f3a41132146 - languageName: node - linkType: hard - "ts-mocha@npm:^10.0.0": version: 10.0.0 resolution: "ts-mocha@npm:10.0.0" @@ -14074,13 +11282,27 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": +"tslib@npm:2.4.0": + version: 2.4.0 + resolution: "tslib@npm:2.4.0" + checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 + languageName: node + linkType: hard + +"tslib@npm:^1.11.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd languageName: node linkType: hard +"tslib@npm:^2.3.1, tslib@npm:^2.6.2": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + "tsort@npm:0.0.1": version: 0.0.1 resolution: "tsort@npm:0.0.1" @@ -14108,7 +11330,7 @@ __metadata: languageName: node linkType: hard -"tweetnacl-util@npm:^0.15.0, tweetnacl-util@npm:^0.15.1": +"tweetnacl-util@npm:^0.15.1": version: 0.15.1 resolution: "tweetnacl-util@npm:0.15.1" checksum: ae6aa8a52cdd21a95103a4cc10657d6a2040b36c7a6da7b9d3ab811c6750a2d5db77e8c36969e75fdee11f511aa2b91c552496c6e8e989b6e490e54aca2864fc @@ -14122,7 +11344,7 @@ __metadata: languageName: node linkType: hard -"tweetnacl@npm:^1.0.0, tweetnacl@npm:^1.0.3": +"tweetnacl@npm:^1.0.3": version: 1.0.3 resolution: "tweetnacl@npm:1.0.3" checksum: e4a57cac188f0c53f24c7a33279e223618a2bfb5fea426231991652a13247bea06b081fd745d71291fcae0f4428d29beba1b984b1f1ce6f66b06a6d1ab90645c @@ -14147,7 +11369,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -14199,26 +11421,9 @@ __metadata: languageName: node linkType: hard -"typechain@npm:^3.0.0": - version: 3.0.0 - resolution: "typechain@npm:3.0.0" - dependencies: - command-line-args: ^4.0.7 - debug: ^4.1.1 - fs-extra: ^7.0.0 - js-sha3: ^0.8.0 - lodash: ^4.17.15 - ts-essentials: ^6.0.3 - ts-generator: ^0.1.1 - bin: - typechain: ./dist/cli/cli.js - checksum: a38aff5e89c41e20e2c3a1f7b5f04666dbc94b5592eba70ba7d1e0aeb49089d22ed3d35e55a0b0d1f0bfdcea9818157fa4ee3854ef818f46f6aa899520fe7c25 - languageName: node - linkType: hard - -"typechain@npm:^8.1.0": - version: 8.1.0 - resolution: "typechain@npm:8.1.0" +"typechain@npm:^8.3.2": + version: 8.3.2 + resolution: "typechain@npm:8.3.2" dependencies: "@types/prettier": ^2.1.1 debug: ^4.3.1 @@ -14234,7 +11439,59 @@ __metadata: typescript: ">=4.3.0" bin: typechain: dist/cli/cli.js - checksum: d8e05c4437d5ba54fd5dea28c20884c2aa259e911c6ffc9d1768a229633c661f378439e4b0a1a21f33372e8ed82adc324583381cde16f199af9440792a95da88 + checksum: 146a1896fa93403404be78757790b0f95b5457efebcca16b61622e09c374d555ef4f837c1c4eedf77e03abc50276d96a2f33064ec09bb802f62d8cc2b13fce70 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-typed-array: ^1.1.13 + checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + possible-typed-array-names: ^1.0.0 + checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c languageName: node linkType: hard @@ -14247,13 +11504,6 @@ __metadata: languageName: node linkType: hard -"typedarray@npm:^0.0.6": - version: 0.0.6 - resolution: "typedarray@npm:0.0.6" - checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 - languageName: node - linkType: hard - "typescript@npm:^4.7.4": version: 4.7.4 resolution: "typescript@npm:4.7.4" @@ -14274,36 +11524,6 @@ __metadata: languageName: node linkType: hard -"typewise-core@npm:^1.2, typewise-core@npm:^1.2.0": - version: 1.2.0 - resolution: "typewise-core@npm:1.2.0" - checksum: c21e83544546d1aba2f17377c25ae0eb571c2153b2e3705932515bef103dbe43e05d2286f238ad139341b1000da40583115a44cb5e69a2ef408572b13dab844b - languageName: node - linkType: hard - -"typewise@npm:^1.0.3": - version: 1.0.3 - resolution: "typewise@npm:1.0.3" - dependencies: - typewise-core: ^1.2.0 - checksum: eb3452b1387df8bf8e3b620720d240425a50ce402d7c064c21ac4b5d88c551ee4d1f26cd649b8a17a6d06f7a3675733de841723f8e06bb3edabfeacc4924af4a - languageName: node - linkType: hard - -"typewiselite@npm:~1.0.0": - version: 1.0.0 - resolution: "typewiselite@npm:1.0.0" - checksum: 2e13a652c041680e9e37501129715f97c2ff2b8f52b5e82acd9355c070ca7c126633ff96d2ad03945254c271c0d1cf9f4956090c93ad750717e00d100cbd0c87 - languageName: node - linkType: hard - -"typical@npm:^2.6.0, typical@npm:^2.6.1": - version: 2.6.1 - resolution: "typical@npm:2.6.1" - checksum: 6af04fefe50d90d3471f058b2cdc0f49b7436bdd605cd00acea7965926ff388a5a7d692ef144f45fccee6f8e896c065702ecc44b69057e2ce88c09e897c7d3a4 - languageName: node - linkType: hard - "typical@npm:^4.0.0": version: 4.0.0 resolution: "typical@npm:4.0.0" @@ -14346,19 +11566,12 @@ __metadata: languageName: node linkType: hard -"underscore@npm:1.9.1": - version: 1.9.1 - resolution: "underscore@npm:1.9.1" - checksum: bee6f587661a6a9ca2f77e611896141e0287af51d8ca6034b11d0d4163ddbdd181a9720078ddbe94d265b7694f4880bc7f4c2ad260cfb8985ee2f9adcf13df03 - languageName: node - linkType: hard - -"undici@npm:^5.4.0": - version: 5.20.0 - resolution: "undici@npm:5.20.0" +"undici@npm:^5.14.0": + version: 5.28.4 + resolution: "undici@npm:5.28.4" dependencies: - busboy: ^1.6.0 - checksum: 25412a785b2bd0b12f0bb0ec47ef00aa7a611ca0e570cb7af97cffe6a42e0d78e4b15190363a43771e9002defc3c6647c1b2d52201b3f64e2196819db4d150d3 + "@fastify/busboy": ^2.0.0 + checksum: a8193132d84540e4dc1895ecc8dbaa176e8a49d26084d6fbe48a292e28397cd19ec5d13bc13e604484e76f94f6e334b2bdc740d5f06a6e50c44072818d0c19f9 languageName: node linkType: hard @@ -14369,18 +11582,6 @@ __metadata: languageName: node linkType: hard -"union-value@npm:^1.0.0": - version: 1.0.1 - resolution: "union-value@npm:1.0.1" - dependencies: - arr-union: ^3.1.0 - get-value: ^2.0.6 - is-extendable: ^0.1.1 - set-value: ^2.0.1 - checksum: a3464097d3f27f6aa90cf103ed9387541bccfc006517559381a10e0dffa62f465a9d9a09c9b9c3d26d0f4cbe61d4d010e2fbd710fd4bf1267a768ba8a774b0ba - languageName: node - linkType: hard - "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" @@ -14413,13 +11614,6 @@ __metadata: languageName: node linkType: hard -"unorm@npm:^1.3.3": - version: 1.6.0 - resolution: "unorm@npm:1.6.0" - checksum: 9a86546256a45f855b6cfe719086785d6aada94f63778cecdecece8d814ac26af76cb6da70130da0a08b8803bbf0986e56c7ec4249038198f3de02607fffd811 - languageName: node - linkType: hard - "unpipe@npm:1.0.0, unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" @@ -14434,16 +11628,15 @@ __metadata: "@ensdomains/address-encoder": ^0.2.22 "@ensdomains/ens-contracts": ^0.0.21 "@ethereumjs/tx": ^4.0.1 - "@nomiclabs/hardhat-ethers": ^2.2.1 - "@nomiclabs/hardhat-etherscan": ^3.1.0 - "@nomiclabs/hardhat-solhint": ^2.0.1 - "@nomiclabs/hardhat-waffle": ^2.0.1 + "@nomicfoundation/hardhat-chai-matchers": ^2.0.6 + "@nomicfoundation/hardhat-ethers": ^3.0.0 + "@nomicfoundation/hardhat-verify": ^1.1.0 + "@nomiclabs/hardhat-solhint": ^3.0.1 "@openzeppelin/contracts-upgradeable": ^4.7.3 - "@openzeppelin/hardhat-defender": ^1.8.1 - "@openzeppelin/hardhat-upgrades": ^1.20.0 - "@openzeppelin/upgrades-core": ^1.19.1 - "@typechain/ethers-v5": ^10.1.0 - "@typechain/hardhat": ^6.1.2 + "@openzeppelin/hardhat-upgrades": ^2.0.0 + "@openzeppelin/upgrades-core": ^1.32.5 + "@typechain/ethers-v6": ^0.5.0 + "@typechain/hardhat": ^9.1.0 "@types/bip39": ^3.0.0 "@types/chai": ^4.3.3 "@types/debug": ^4.1.7 @@ -14468,44 +11661,36 @@ __metadata: eslint-plugin-mocha-no-only: ^1.1.1 eslint-plugin-node: ^11.1.0 eslint-plugin-promise: ^6.1.1 - ethereum-waffle: 3.4.4 + ethereumjs-block: ^1.7.1 + ethereumjs-common: ^1.5.2 + ethereumjs-tx: ^1.3.7 ethereumjs-util: ^7.1.0 - ethers: ^5.7.2 - ganache: ^7.4.0 - hardhat: ^2.11.2 + ethers: ^6.1.0 + ganache: ^7.9.1 + hardhat: ~2.20.0 hardhat-abi-exporter: ^2.2.1 - hardhat-contract-sizer: ^2.6.1 - hardhat-gas-reporter: ^1.0.9 - hardhat-tracer: ^2.3.2 + hardhat-contract-sizer: ~2.6.0 + hardhat-gas-reporter: ^2.1.1 + hardhat-tracer: ^2.8.1 hdkey: ^2.0.1 husky: ^8.0.1 lodash.merge: ^4.6.2 merkle-patricia-tree: ^4.0.0 mocha: ^10.0.0 prettier: ^2.3.0 - prettier-plugin-solidity: ^1.0.0-beta.24 + prettier-plugin-solidity: ^1.3.1 solhint: ^3.3.7 solidity-coverage: ^0.8.4 tar: ^6.1.9 ts-mocha: ^10.0.0 ts-node: ^10.9.1 - typechain: ^8.1.0 + typechain: ^8.3.2 typescript: ^4.7.4 web3: ^1.7.4 yargs: ^17.6.0 languageName: unknown linkType: soft -"unset-value@npm:^1.0.0": - version: 1.0.0 - resolution: "unset-value@npm:1.0.0" - dependencies: - has-value: ^0.3.1 - isobject: ^3.0.0 - checksum: 5990ecf660672be2781fc9fb322543c4aa592b68ed9a3312fa4df0e9ba709d42e823af090fc8f95775b4cd2c9a5169f7388f0cec39238b6d0d55a69fc2ab6b29 - languageName: node - linkType: hard - "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -14515,13 +11700,6 @@ __metadata: languageName: node linkType: hard -"urix@npm:^0.1.0": - version: 0.1.0 - resolution: "urix@npm:0.1.0" - checksum: 4c076ecfbf3411e888547fe844e52378ab5ada2d2f27625139011eada79925e77f7fbf0e4016d45e6a9e9adb6b7e64981bd49b22700c7c401c5fc15f423303b3 - languageName: node - linkType: hard - "url-parse-lax@npm:^1.0.0": version: 1.0.0 resolution: "url-parse-lax@npm:1.0.0" @@ -14531,15 +11709,6 @@ __metadata: languageName: node linkType: hard -"url-parse-lax@npm:^3.0.0": - version: 3.0.0 - resolution: "url-parse-lax@npm:3.0.0" - dependencies: - prepend-http: ^2.0.0 - checksum: 1040e357750451173132228036aff1fd04abbd43eac1fb3e4fca7495a078bcb8d33cb765fe71ad7e473d9c94d98fd67adca63bd2716c815a2da066198dd37217 - languageName: node - linkType: hard - "url-set-query@npm:^1.0.0": version: 1.0.0 resolution: "url-set-query@npm:1.0.0" @@ -14554,23 +11723,6 @@ __metadata: languageName: node linkType: hard -"url@npm:^0.11.0": - version: 0.11.0 - resolution: "url@npm:0.11.0" - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - checksum: 50d100d3dd2d98b9fe3ada48cadb0b08aa6be6d3ac64112b867b56b19be4bfcba03c2a9a0d7922bfd7ac17d4834e88537749fe182430dfd9b68e520175900d90 - languageName: node - linkType: hard - -"use@npm:^3.1.0": - version: 3.1.1 - resolution: "use@npm:3.1.1" - checksum: 08a130289f5238fcbf8f59a18951286a6e660d17acccc9d58d9b69dfa0ee19aa038e8f95721b00b432c36d1629a9e32a464bf2e7e0ae6a244c42ddb30bdd8b33 - languageName: node - linkType: hard - "utf-8-validate@npm:5.0.7, utf-8-validate@npm:^5.0.2": version: 5.0.7 resolution: "utf-8-validate@npm:5.0.7" @@ -14581,7 +11733,17 @@ __metadata: languageName: node linkType: hard -"utf8@npm:3.0.0, utf8@npm:^3.0.0": +"utf-8-validate@npm:6.0.3": + version: 6.0.3 + resolution: "utf-8-validate@npm:6.0.3" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 5e21383c81ff7469c1912119ca69d07202d944c73ddd8a54b84dddcc546b939054e5101c78c294e494d206fe93bd43428adc635a0660816b3ec9c8ec89286ac4 + languageName: node + linkType: hard + +"utf8@npm:3.0.0": version: 3.0.0 resolution: "utf8@npm:3.0.0" checksum: cb89a69ad9ab393e3eae9b25305b3ff08bebca9adc839191a34f90777eb2942f86a96369d2839925fea58f8f722f7e27031d697f10f5f39690f8c5047303e62d @@ -14595,20 +11757,7 @@ __metadata: languageName: node linkType: hard -"util.promisify@npm:^1.0.0": - version: 1.1.1 - resolution: "util.promisify@npm:1.1.1" - dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - for-each: ^0.3.3 - has-symbols: ^1.0.1 - object.getownpropertydescriptors: ^2.1.1 - checksum: ea371c30b90576862487ae4efd7182aa5855019549a4019d82629acc2709e8ccb0f38944403eebec622fff8ebb44ac3f46a52d745d5f543d30606132a4905f96 - languageName: node - linkType: hard - -"util@npm:^0.12.0, util@npm:^0.12.5": +"util@npm:^0.12.0": version: 0.12.5 resolution: "util@npm:0.12.5" dependencies: @@ -14628,13 +11777,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:2.0.1": - version: 2.0.1 - resolution: "uuid@npm:2.0.1" - checksum: e129e494e33cededdfc2cefbd63da966344b873bbfd3373a311b0acc2e7ab53d68b2515879444898867d84b863e44939e852484b9f3a54c4fd86d985a7dadb8d - languageName: node - linkType: hard - "uuid@npm:8.3.2, uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" @@ -14669,16 +11811,6 @@ __metadata: languageName: node linkType: hard -"validate-npm-package-license@npm:^3.0.1": - version: 3.0.4 - resolution: "validate-npm-package-license@npm:3.0.4" - dependencies: - spdx-correct: ^3.0.0 - spdx-expression-parse: ^3.0.0 - checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad - languageName: node - linkType: hard - "varint@npm:^5.0.0": version: 5.0.2 resolution: "varint@npm:5.0.2" @@ -14704,15 +11836,24 @@ __metadata: languageName: node linkType: hard -"web3-bzz@npm:1.2.11": - version: 1.2.11 - resolution: "web3-bzz@npm:1.2.11" +"viem@npm:2.7.14": + version: 2.7.14 + resolution: "viem@npm:2.7.14" dependencies: - "@types/node": ^12.12.6 - got: 9.6.0 - swarm-js: ^0.1.40 - underscore: 1.9.1 - checksum: 45136e7282819260357efdcdf6d81cb7b733b212aa1e46f1bbcaff70a33a2e3f6558936e6e1fc3bf75bb4c3220f844fc6b9d5bfaaa68a2f6ed0e8c0b02c97523 + "@adraffy/ens-normalize": 1.10.0 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 1.0.0 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: a6bfb53a579345e92dfaadd47d38112a981284a645df45a6e7f68daff75a23d7af5458c7ee34fd36f9e7279ae3b5fc8165aea63d5323cec58ebe366b5fefe256 languageName: node linkType: hard @@ -14727,48 +11868,13 @@ __metadata: languageName: node linkType: hard -"web3-core-helpers@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core-helpers@npm:1.2.11" - dependencies: - underscore: 1.9.1 - web3-eth-iban: 1.2.11 - web3-utils: 1.2.11 - checksum: dac2ab85b8bec8251647d40f1dc5fcf30b2245de6d216328c51c9d619d12a567906c5bf8b542846552a56bf969edcfcb16fb67e3780461195df85cd506591f68 - languageName: node - linkType: hard - "web3-core-helpers@npm:1.8.1": version: 1.8.1 resolution: "web3-core-helpers@npm:1.8.1" dependencies: web3-eth-iban: 1.8.1 web3-utils: 1.8.1 - checksum: b06f69ad5b6155261f1160c740ffc993cc9fbbe270697cdd5bf708da2df42e8aa4fb5fba37a5c9d4c91c6ddf5f4ecd9272d317809a1acb92621d15ad29f61f7c - languageName: node - linkType: hard - -"web3-core-helpers@npm:1.8.2": - version: 1.8.2 - resolution: "web3-core-helpers@npm:1.8.2" - dependencies: - web3-eth-iban: 1.8.2 - web3-utils: 1.8.2 - checksum: 6575b26587aad005fb17658938fa07bc9769019e3451960130a00ac83500c27c35708eafd1382d9cc0a2ea0e39ca220d83a2ff28430ef67ea009768f3cbce03d - languageName: node - linkType: hard - -"web3-core-method@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core-method@npm:1.2.11" - dependencies: - "@ethersproject/transactions": ^5.0.0-beta.135 - underscore: 1.9.1 - web3-core-helpers: 1.2.11 - web3-core-promievent: 1.2.11 - web3-core-subscriptions: 1.2.11 - web3-utils: 1.2.11 - checksum: 7533c5b8c42df49969b9c95a2c9cb0abcd55a304ef4b276a5cc43673d27ffd9767a0caabe09271979b5afd0f788a51416f7018bc704d734ad78846c68dba15a7 + checksum: b06f69ad5b6155261f1160c740ffc993cc9fbbe270697cdd5bf708da2df42e8aa4fb5fba37a5c9d4c91c6ddf5f4ecd9272d317809a1acb92621d15ad29f61f7c languageName: node linkType: hard @@ -14785,28 +11891,6 @@ __metadata: languageName: node linkType: hard -"web3-core-method@npm:1.8.2": - version: 1.8.2 - resolution: "web3-core-method@npm:1.8.2" - dependencies: - "@ethersproject/transactions": ^5.6.2 - web3-core-helpers: 1.8.2 - web3-core-promievent: 1.8.2 - web3-core-subscriptions: 1.8.2 - web3-utils: 1.8.2 - checksum: 99ef07865a9dc09615bd0fb1dab7a35851e24b5541f3daeda4f668911ad2540395a8bb358e52273740696bb159858d8c8e295f850afc6ab30d6c7a8be20b0223 - languageName: node - linkType: hard - -"web3-core-promievent@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core-promievent@npm:1.2.11" - dependencies: - eventemitter3: 4.0.4 - checksum: bd3661978f252ec0033881b32a5d4dec1bfeb7fb0f018d77c077c77b60c0f965215dcbd54c5fcbef739441dd7efbdbd6c9b20e275e05f5b4d2cee762937d95cc - languageName: node - linkType: hard - "web3-core-promievent@npm:1.8.1": version: 1.8.1 resolution: "web3-core-promievent@npm:1.8.1" @@ -14816,28 +11900,6 @@ __metadata: languageName: node linkType: hard -"web3-core-promievent@npm:1.8.2": - version: 1.8.2 - resolution: "web3-core-promievent@npm:1.8.2" - dependencies: - eventemitter3: 4.0.4 - checksum: 41ee45b313e735e205cf76de5255bbc013eb82c62474b3b4a282a2ca756114898bf4d40b1cb423ef487979d89dd282728d93d9b1afad1040cc449de3aba297f7 - languageName: node - linkType: hard - -"web3-core-requestmanager@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core-requestmanager@npm:1.2.11" - dependencies: - underscore: 1.9.1 - web3-core-helpers: 1.2.11 - web3-providers-http: 1.2.11 - web3-providers-ipc: 1.2.11 - web3-providers-ws: 1.2.11 - checksum: 84898bfec26319d06ccf7ae63821b7fbea8efc8a76015921530cc4eb85db39598c16598f1e51f95ed79146d7defafe7b924b5c6f6927fb2a153d01eb0862182c - languageName: node - linkType: hard - "web3-core-requestmanager@npm:1.8.1": version: 1.8.1 resolution: "web3-core-requestmanager@npm:1.8.1" @@ -14851,30 +11913,6 @@ __metadata: languageName: node linkType: hard -"web3-core-requestmanager@npm:1.8.2": - version: 1.8.2 - resolution: "web3-core-requestmanager@npm:1.8.2" - dependencies: - util: ^0.12.5 - web3-core-helpers: 1.8.2 - web3-providers-http: 1.8.2 - web3-providers-ipc: 1.8.2 - web3-providers-ws: 1.8.2 - checksum: 6a7374aade4dd32232fef929be5f2b2e4e0830cf7071d44343f3735a52ea0b4e64b4959297a3d1237716742406dafa61d16d5123d3c5288b21df00e06ea4555d - languageName: node - linkType: hard - -"web3-core-subscriptions@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core-subscriptions@npm:1.2.11" - dependencies: - eventemitter3: 4.0.4 - underscore: 1.9.1 - web3-core-helpers: 1.2.11 - checksum: 7c8c07ea79fc9cf4ecb15ea37c5db38cc38e4b0545247d9ccc7ff6f4257565c03bcee569695a93abe02b8a98a6a9c227df880911ae324c0c6218a9571a3811f6 - languageName: node - linkType: hard - "web3-core-subscriptions@npm:1.8.1": version: 1.8.1 resolution: "web3-core-subscriptions@npm:1.8.1" @@ -14885,31 +11923,6 @@ __metadata: languageName: node linkType: hard -"web3-core-subscriptions@npm:1.8.2": - version: 1.8.2 - resolution: "web3-core-subscriptions@npm:1.8.2" - dependencies: - eventemitter3: 4.0.4 - web3-core-helpers: 1.8.2 - checksum: e4bc9b4e62f4c5357e9111fe73edc4c880e2c3ad1476fbbd2d63851f05c3e60485aca9f524a5c1bd317953a68f8012f3c45343603b9785b131c6cbda0b46864d - languageName: node - linkType: hard - -"web3-core@npm:1.2.11": - version: 1.2.11 - resolution: "web3-core@npm:1.2.11" - dependencies: - "@types/bn.js": ^4.11.5 - "@types/node": ^12.12.6 - bignumber.js: ^9.0.0 - web3-core-helpers: 1.2.11 - web3-core-method: 1.2.11 - web3-core-requestmanager: 1.2.11 - web3-utils: 1.2.11 - checksum: 1793affddb4fa811f9781dc644b4017d95c6084a21bb866e0dc626f6d48bfc29eacf02237608b587ca49094e9342da878b64173510d99a6e9171f7a697e8cb36 - languageName: node - linkType: hard - "web3-core@npm:1.8.1": version: 1.8.1 resolution: "web3-core@npm:1.8.1" @@ -14925,21 +11938,6 @@ __metadata: languageName: node linkType: hard -"web3-core@npm:1.8.2": - version: 1.8.2 - resolution: "web3-core@npm:1.8.2" - dependencies: - "@types/bn.js": ^5.1.0 - "@types/node": ^12.12.6 - bignumber.js: ^9.0.0 - web3-core-helpers: 1.8.2 - web3-core-method: 1.8.2 - web3-core-requestmanager: 1.8.2 - web3-utils: 1.8.2 - checksum: 362405c7b3646723724ebc134426ff7809cadc66eee1cf411c05d2d46a1c57e211c5d32d7da936d36e94f20e9afe54ad3a921fa7d90b77410fab8ef1a6203f7a - languageName: node - linkType: hard - "web3-eth-abi@npm:1.8.1": version: 1.8.1 resolution: "web3-eth-abi@npm:1.8.1" @@ -14950,16 +11948,6 @@ __metadata: languageName: node linkType: hard -"web3-eth-abi@npm:1.8.2": - version: 1.8.2 - resolution: "web3-eth-abi@npm:1.8.2" - dependencies: - "@ethersproject/abi": ^5.6.3 - web3-utils: 1.8.2 - checksum: d593b42c5a63afaba88b947245594769df6aa1a2b2cba5a43fddb8e77791fc38da3238673d713d2ddfc3fc4aac91f7ec529bbc3ad8ea4e02995919a0c89cbb88 - languageName: node - linkType: hard - "web3-eth-accounts@npm:1.8.1": version: 1.8.1 resolution: "web3-eth-accounts@npm:1.8.1" @@ -14979,24 +11967,6 @@ __metadata: languageName: node linkType: hard -"web3-eth-accounts@npm:1.8.2": - version: 1.8.2 - resolution: "web3-eth-accounts@npm:1.8.2" - dependencies: - "@ethereumjs/common": 2.5.0 - "@ethereumjs/tx": 3.3.2 - eth-lib: 0.2.8 - ethereumjs-util: ^7.1.5 - scrypt-js: ^3.0.1 - uuid: ^9.0.0 - web3-core: 1.8.2 - web3-core-helpers: 1.8.2 - web3-core-method: 1.8.2 - web3-utils: 1.8.2 - checksum: 74e179a235b02553c862fc24ccf68be8999e4d67e931e94ee9bb969f9a850a82a8a0125e2004db587acb44cf80dda4ca04e196c0330f2c0b9a1f8af290fc813c - languageName: node - linkType: hard - "web3-eth-contract@npm:1.8.1": version: 1.8.1 resolution: "web3-eth-contract@npm:1.8.1" @@ -15013,22 +11983,6 @@ __metadata: languageName: node linkType: hard -"web3-eth-contract@npm:1.8.2": - version: 1.8.2 - resolution: "web3-eth-contract@npm:1.8.2" - dependencies: - "@types/bn.js": ^5.1.0 - web3-core: 1.8.2 - web3-core-helpers: 1.8.2 - web3-core-method: 1.8.2 - web3-core-promievent: 1.8.2 - web3-core-subscriptions: 1.8.2 - web3-eth-abi: 1.8.2 - web3-utils: 1.8.2 - checksum: 7fc9111e350be1b1f3337deb258a88eb29e7ebfe7d3f1bae96fb7e925f991f2f18b69983ab16f9780e3447453bf42d891194499d3b875c11711a8f8c6a6751a4 - languageName: node - linkType: hard - "web3-eth-ens@npm:1.8.1": version: 1.8.1 resolution: "web3-eth-ens@npm:1.8.1" @@ -15045,32 +11999,6 @@ __metadata: languageName: node linkType: hard -"web3-eth-ens@npm:1.8.2": - version: 1.8.2 - resolution: "web3-eth-ens@npm:1.8.2" - dependencies: - content-hash: ^2.5.2 - eth-ens-namehash: 2.0.8 - web3-core: 1.8.2 - web3-core-helpers: 1.8.2 - web3-core-promievent: 1.8.2 - web3-eth-abi: 1.8.2 - web3-eth-contract: 1.8.2 - web3-utils: 1.8.2 - checksum: 4f1ec5a7006031ec0bce38204c88a2d43890809965f1b581964bb8c90f16d87dbbbbffd456de2d38dbe845001a6968de6160a9051a1c64b02d5a3acf109d8b0d - languageName: node - linkType: hard - -"web3-eth-iban@npm:1.2.11": - version: 1.2.11 - resolution: "web3-eth-iban@npm:1.2.11" - dependencies: - bn.js: ^4.11.9 - web3-utils: 1.2.11 - checksum: 1c28b3ad2cad2af0a76b051fe2c05ed933476eaa99f2c245862f66d4e3d56e60ad26cf55120513f78648ab1ff2b8a6b751e63448cdb01b53b542334bf148286f - languageName: node - linkType: hard - "web3-eth-iban@npm:1.8.1": version: 1.8.1 resolution: "web3-eth-iban@npm:1.8.1" @@ -15081,30 +12009,6 @@ __metadata: languageName: node linkType: hard -"web3-eth-iban@npm:1.8.2": - version: 1.8.2 - resolution: "web3-eth-iban@npm:1.8.2" - dependencies: - bn.js: ^5.2.1 - web3-utils: 1.8.2 - checksum: 915cb79d90a5bbca4694df1a29583ea52ba4482fee95534a3ec28632a3e196dd01f50bb38ad8cbeb65abd109b76afda9b207675cb6a8184f633902afb4cbfbb5 - languageName: node - linkType: hard - -"web3-eth-personal@npm:1.2.11": - version: 1.2.11 - resolution: "web3-eth-personal@npm:1.2.11" - dependencies: - "@types/node": ^12.12.6 - web3-core: 1.2.11 - web3-core-helpers: 1.2.11 - web3-core-method: 1.2.11 - web3-net: 1.2.11 - web3-utils: 1.2.11 - checksum: a754a16aaed1e97baf963f594b69c83bc4c1cf3f5b181b18720ce292583b4a1b70c7a5c22433679c3e66166773bb43731535d085db3bcfc72af48290553f5122 - languageName: node - linkType: hard - "web3-eth-personal@npm:1.8.1": version: 1.8.1 resolution: "web3-eth-personal@npm:1.8.1" @@ -15119,40 +12023,6 @@ __metadata: languageName: node linkType: hard -"web3-eth-personal@npm:1.8.2": - version: 1.8.2 - resolution: "web3-eth-personal@npm:1.8.2" - dependencies: - "@types/node": ^12.12.6 - web3-core: 1.8.2 - web3-core-helpers: 1.8.2 - web3-core-method: 1.8.2 - web3-net: 1.8.2 - web3-utils: 1.8.2 - checksum: e3104c554f4f2b37acb4ad7e2515921a5e9c96181ee78924e07c8fb38f61afa01100c3a8f5df65139062f43066a030a7da14829b71d9d0619b58e3a220a067f7 - languageName: node - linkType: hard - -"web3-eth@npm:1.2.11": - version: 1.8.2 - resolution: "web3-eth@npm:1.8.2" - dependencies: - web3-core: 1.8.2 - web3-core-helpers: 1.8.2 - web3-core-method: 1.8.2 - web3-core-subscriptions: 1.8.2 - web3-eth-abi: 1.8.2 - web3-eth-accounts: 1.8.2 - web3-eth-contract: 1.8.2 - web3-eth-ens: 1.8.2 - web3-eth-iban: 1.8.2 - web3-eth-personal: 1.8.2 - web3-net: 1.8.2 - web3-utils: 1.8.2 - checksum: cadf3dc062faba4cf9dfefe02fa2b9ffade49b337e7c46be96c1b38d5440112770b8a868449b14a89550dd474698b950e8b1b9f1b2bdb2f15332a6396dd0a4ed - languageName: node - linkType: hard - "web3-eth@npm:1.8.1": version: 1.8.1 resolution: "web3-eth@npm:1.8.1" @@ -15173,17 +12043,6 @@ __metadata: languageName: node linkType: hard -"web3-net@npm:1.2.11": - version: 1.2.11 - resolution: "web3-net@npm:1.2.11" - dependencies: - web3-core: 1.2.11 - web3-core-method: 1.2.11 - web3-utils: 1.2.11 - checksum: 76a99815699674709b869b60bf950d20167b999fe93f7d091b01ce3fd0e3dd9c30ef3519156c04eb01703791c049b19b295e6901dd41d208ea600149961f7ee6 - languageName: node - linkType: hard - "web3-net@npm:1.8.1": version: 1.8.1 resolution: "web3-net@npm:1.8.1" @@ -15195,55 +12054,6 @@ __metadata: languageName: node linkType: hard -"web3-net@npm:1.8.2": - version: 1.8.2 - resolution: "web3-net@npm:1.8.2" - dependencies: - web3-core: 1.8.2 - web3-core-method: 1.8.2 - web3-utils: 1.8.2 - checksum: 1c0bd619806936c6118a2b13ceebc3d7d985e4ed320b9287a248d44ac5cd16d7e339b98fa5eff62840825d0bc716d237943edfc6a695f503cd0195d035c9a522 - languageName: node - linkType: hard - -"web3-provider-engine@npm:14.2.1": - version: 14.2.1 - resolution: "web3-provider-engine@npm:14.2.1" - dependencies: - async: ^2.5.0 - backoff: ^2.5.0 - clone: ^2.0.0 - cross-fetch: ^2.1.0 - eth-block-tracker: ^3.0.0 - eth-json-rpc-infura: ^3.1.0 - eth-sig-util: ^1.4.2 - ethereumjs-block: ^1.2.2 - ethereumjs-tx: ^1.2.0 - ethereumjs-util: ^5.1.5 - ethereumjs-vm: ^2.3.4 - json-rpc-error: ^2.0.0 - json-stable-stringify: ^1.0.1 - promise-to-callback: ^1.0.0 - readable-stream: ^2.2.9 - request: ^2.85.0 - semaphore: ^1.0.3 - ws: ^5.1.1 - xhr: ^2.2.0 - xtend: ^4.0.1 - checksum: 45441e22633184bd5f6ea645e20f99c8002b3b64d3e564cd9d0f65bad7f0755ad2cdf9a88fcac9585e908aacea28cc6e80c0939498ee4f4c6c49107d16e011bf - languageName: node - linkType: hard - -"web3-providers-http@npm:1.2.11": - version: 1.2.11 - resolution: "web3-providers-http@npm:1.2.11" - dependencies: - web3-core-helpers: 1.2.11 - xhr2-cookies: 1.1.0 - checksum: 64760032d68826865de084c31d81be70bebc54cd82138ef724da13b60f7b341d4c0c6716912616b928680756ea6f2cef42be7d16fa9dd143a09ac55701232193 - languageName: node - linkType: hard - "web3-providers-http@npm:1.8.1": version: 1.8.1 resolution: "web3-providers-http@npm:1.8.1" @@ -15256,29 +12066,6 @@ __metadata: languageName: node linkType: hard -"web3-providers-http@npm:1.8.2": - version: 1.8.2 - resolution: "web3-providers-http@npm:1.8.2" - dependencies: - abortcontroller-polyfill: ^1.7.3 - cross-fetch: ^3.1.4 - es6-promise: ^4.2.8 - web3-core-helpers: 1.8.2 - checksum: 5f95ca0be78d7f8e96dec128a78b7a3b49d42143be77fede874f35b0c3ce3f0422e56ec3a21171be0df7adce1c1df06ee2b23f5ba8d673b411a62edf5acd4843 - languageName: node - linkType: hard - -"web3-providers-ipc@npm:1.2.11": - version: 1.2.11 - resolution: "web3-providers-ipc@npm:1.2.11" - dependencies: - oboe: 2.1.4 - underscore: 1.9.1 - web3-core-helpers: 1.2.11 - checksum: 0fab2f824e4c7f080fee26b76c9c8448eb51abfd285a04f3c9efe92c3b9a8742096804ec02f56bc8297e375ea12f0f2205bb6c0ae376c44c005cdfeec65d0b7e - languageName: node - linkType: hard - "web3-providers-ipc@npm:1.8.1": version: 1.8.1 resolution: "web3-providers-ipc@npm:1.8.1" @@ -15289,28 +12076,6 @@ __metadata: languageName: node linkType: hard -"web3-providers-ipc@npm:1.8.2": - version: 1.8.2 - resolution: "web3-providers-ipc@npm:1.8.2" - dependencies: - oboe: 2.1.5 - web3-core-helpers: 1.8.2 - checksum: d143064e96223ca79cb751c5e1f10bb48c3181ec87d7f61127e05eb733c67075c98de4126db793b3cf36102dda39f3e9d63927e592c43373158373c17a8e252b - languageName: node - linkType: hard - -"web3-providers-ws@npm:1.2.11": - version: 1.2.11 - resolution: "web3-providers-ws@npm:1.2.11" - dependencies: - eventemitter3: 4.0.4 - underscore: 1.9.1 - web3-core-helpers: 1.2.11 - websocket: ^1.0.31 - checksum: 4a4c591c2bd9724748e9dba124e59048b91239aa7cd435394f2a1d8e7914132920a17e56bc646f46912844fcfbbc38333b7023ebec298af36106ec4814d2ff5c - languageName: node - linkType: hard - "web3-providers-ws@npm:1.8.1": version: 1.8.1 resolution: "web3-providers-ws@npm:1.8.1" @@ -15322,29 +12087,6 @@ __metadata: languageName: node linkType: hard -"web3-providers-ws@npm:1.8.2": - version: 1.8.2 - resolution: "web3-providers-ws@npm:1.8.2" - dependencies: - eventemitter3: 4.0.4 - web3-core-helpers: 1.8.2 - websocket: ^1.0.32 - checksum: 45fb8e29b3111e0fea4ed6f83e28895d3b6bf151811a65002a04bc39c52b5e70324db4c35f00f842637e225a9d451519e4714f51c7cd518be52784dd0632bf8d - languageName: node - linkType: hard - -"web3-shh@npm:1.2.11": - version: 1.2.11 - resolution: "web3-shh@npm:1.2.11" - dependencies: - web3-core: 1.2.11 - web3-core-method: 1.2.11 - web3-core-subscriptions: 1.2.11 - web3-net: 1.2.11 - checksum: 64c4a1f03bc3975a2baff9fa6d89a0050a06f179f1ec4d6e28f480b761d0efe56a9a79a5a320821e1dd503e82d44e73dd69b883b9e69d96cced3f979e0a3f4ff - languageName: node - linkType: hard - "web3-shh@npm:1.8.1": version: 1.8.1 resolution: "web3-shh@npm:1.8.1" @@ -15357,22 +12099,6 @@ __metadata: languageName: node linkType: hard -"web3-utils@npm:1.2.11": - version: 1.2.11 - resolution: "web3-utils@npm:1.2.11" - dependencies: - bn.js: ^4.11.9 - eth-lib: 0.2.8 - ethereum-bloom-filters: ^1.0.6 - ethjs-unit: 0.1.6 - number-to-bn: 1.7.0 - randombytes: ^2.1.0 - underscore: 1.9.1 - utf8: 3.0.0 - checksum: 1e43235963d5176e447b20b201a66fabccbe7bd4ef8bbb2edfa5ea80a41e8202a8e8f3db128b2a1662855a627a52d100e3207b81a739b937b5b3b4f9114c008f - languageName: node - linkType: hard - "web3-utils@npm:1.8.1": version: 1.8.1 resolution: "web3-utils@npm:1.8.1" @@ -15388,21 +12114,6 @@ __metadata: languageName: node linkType: hard -"web3-utils@npm:1.8.2, web3-utils@npm:^1.0.0-beta.31": - version: 1.8.2 - resolution: "web3-utils@npm:1.8.2" - dependencies: - bn.js: ^5.2.1 - ethereum-bloom-filters: ^1.0.6 - ethereumjs-util: ^7.1.0 - ethjs-unit: 0.1.6 - number-to-bn: 1.7.0 - randombytes: ^2.1.0 - utf8: 3.0.0 - checksum: a6cda086d7bde4939fc55be8f1dc5040b4cacd9205ac2ac07f37d14305214679e030af7814a3e97f6fabf2901e3452cd0dc8ce7c1cdd8bce4d0d4bae72c50ad9 - languageName: node - linkType: hard - "web3-utils@npm:^1.3.6": version: 1.10.2 resolution: "web3-utils@npm:1.10.2" @@ -15419,21 +12130,6 @@ __metadata: languageName: node linkType: hard -"web3@npm:1.2.11": - version: 1.2.11 - resolution: "web3@npm:1.2.11" - dependencies: - web3-bzz: 1.2.11 - web3-core: 1.2.11 - web3-eth: 1.2.11 - web3-eth-personal: 1.2.11 - web3-net: 1.2.11 - web3-shh: 1.2.11 - web3-utils: 1.2.11 - checksum: c4fa6ddaddc2de31c561590eb3703e9446c0a9bd87155f536fd72c3c22337056bbd045baf36fec6152e58ae67e552fffad29e794030cd87634becb99a079e91f - languageName: node - linkType: hard - "web3@npm:^1.7.4": version: 1.8.1 resolution: "web3@npm:1.8.1" @@ -15456,21 +12152,7 @@ __metadata: languageName: node linkType: hard -"websocket@npm:1.0.32": - version: 1.0.32 - resolution: "websocket@npm:1.0.32" - dependencies: - bufferutil: ^4.0.1 - debug: ^2.2.0 - es5-ext: ^0.10.50 - typedarray-to-buffer: ^3.1.5 - utf-8-validate: ^5.0.2 - yaeti: ^0.0.6 - checksum: a29777a1942bf802f955782c7cf948797d19731a911b81adb957873e74b1d5356c621f217a972b075ecf04417a76897ea98dbfc19394007c4cf5e97cd4d494ac - languageName: node - linkType: hard - -"websocket@npm:^1.0.31, websocket@npm:^1.0.32": +"websocket@npm:^1.0.32": version: 1.0.34 resolution: "websocket@npm:1.0.34" dependencies: @@ -15484,13 +12166,6 @@ __metadata: languageName: node linkType: hard -"whatwg-fetch@npm:^2.0.4": - version: 2.0.4 - resolution: "whatwg-fetch@npm:2.0.4" - checksum: de7c65a68d7d62e2f144a6b30293370b3ad82b65ebcd68f2ac8e8bbe7ede90febd98ba9486b78c1cbc950e0e8838fa5c2727f939899ab3fc7b71a04be52d33a5 - languageName: node - linkType: hard - "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" @@ -15514,13 +12189,6 @@ __metadata: languageName: node linkType: hard -"which-module@npm:^1.0.0": - version: 1.0.0 - resolution: "which-module@npm:1.0.0" - checksum: 98434f7deb36350cb543c1f15612188541737e1f12d39b23b1c371dff5cf4aa4746210f2bdec202d5fe9da8682adaf8e3f7c44c520687d30948cfc59d5534edb - languageName: node - linkType: hard - "which-module@npm:^2.0.0": version: 2.0.0 resolution: "which-module@npm:2.0.0" @@ -15528,6 +12196,19 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.2 + checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 + languageName: node + linkType: hard + "which-typed-array@npm:^1.1.2": version: 1.1.8 resolution: "which-typed-array@npm:1.1.8" @@ -15582,12 +12263,12 @@ __metadata: languageName: node linkType: hard -"window-size@npm:^0.2.0": - version: 0.2.0 - resolution: "window-size@npm:0.2.0" - bin: - window-size: cli.js - checksum: a85e2acf156cfa194301294809867bdadd8a48ee5d972d9fa8e3e1b3420a1d0201b13ac8eb0348a0d14bbf2c3316565b6a749749c2384c5d286caf8a064c4f90 +"widest-line@npm:^3.1.0": + version: 3.1.0 + resolution: "widest-line@npm:3.1.0" + dependencies: + string-width: ^4.0.0 + checksum: 03db6c9d0af9329c37d74378ff1d91972b12553c7d72a6f4e8525fe61563fa7adb0b9d6e8d546b7e059688712ea874edd5ded475999abdeedf708de9849310e0 languageName: node linkType: hard @@ -15622,13 +12303,14 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^2.0.0": - version: 2.1.0 - resolution: "wrap-ansi@npm:2.1.0" +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" dependencies: - string-width: ^1.0.1 - strip-ansi: ^3.0.1 - checksum: 2dacd4b3636f7a53ee13d4d0fe7fa2ed9ad81e9967e17231924ea88a286ec4619a78288de8d41881ee483f4449ab2c0287cde8154ba1bd0126c10271101b2ee3 + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b languageName: node linkType: hard @@ -15643,14 +12325,14 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 languageName: node linkType: hard @@ -15685,6 +12367,36 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + +"ws@npm:8.5.0": + version: 8.5.0 + resolution: "ws@npm:8.5.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 76f2f90e40344bf18fd544194e7067812fb1372b2a37865678d8f12afe4b478ff2ebc0c7c0aff82cd5e6b66fc43d889eec0f1865c2365d8f7a66d92da7744a77 + languageName: node + linkType: hard + "ws@npm:^3.0.0": version: 3.3.3 resolution: "ws@npm:3.3.3" @@ -15696,15 +12408,6 @@ __metadata: languageName: node linkType: hard -"ws@npm:^5.1.1": - version: 5.2.2 - resolution: "ws@npm:5.2.2" - dependencies: - async-limiter: ~1.0.0 - checksum: 3da93525921e6098aa9b6a370745ef3de9bb3f00427ecbb4755b671fce4810eb21cc1c80847fb639635ac72f0bb08d49b83a4a74896daf2f79e864d8cead1e13 - languageName: node - linkType: hard - "ws@npm:^7.4.6": version: 7.5.1 resolution: "ws@npm:7.5.1" @@ -15744,16 +12447,7 @@ __metadata: languageName: node linkType: hard -"xhr2-cookies@npm:1.1.0": - version: 1.1.0 - resolution: "xhr2-cookies@npm:1.1.0" - dependencies: - cookiejar: ^2.1.1 - checksum: 6a9fc45f3490cc53e6a308bd7164dab07ecb94f6345e78951ed4a1e8f8c4c7707a1b039a6b4ef7c9d611d9465d6f94d7d4260c43bc34eed8d6f9210a775eb719 - languageName: node - linkType: hard - -"xhr@npm:^2.0.4, xhr@npm:^2.2.0, xhr@npm:^2.3.3": +"xhr@npm:^2.0.4, xhr@npm:^2.3.3": version: 2.6.0 resolution: "xhr@npm:2.6.0" dependencies: @@ -15765,14 +12459,7 @@ __metadata: languageName: node linkType: hard -"xmlhttprequest@npm:1.8.0": - version: 1.8.0 - resolution: "xmlhttprequest@npm:1.8.0" - checksum: c891cf0d7884b4f5cce835aa01f1965727cd352cbd2d7a2e0605bf11ec99ae2198364cca54656ec8b2581a5704dee6c2bf9911922a0ff2a71b613455d32e81b7 - languageName: node - linkType: hard - -"xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.0, xtend@npm:~4.0.1": +"xtend@npm:^4.0.0, xtend@npm:^4.0.1, xtend@npm:^4.0.2, xtend@npm:~4.0.0": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a @@ -15788,13 +12475,6 @@ __metadata: languageName: node linkType: hard -"y18n@npm:^3.2.1": - version: 3.2.2 - resolution: "y18n@npm:3.2.2" - checksum: 6154fd7544f8bbf5b18cdf77692ed88d389be49c87238ecb4e0d6a5276446cd2a5c29cc4bdbdddfc7e4e498b08df9d7e38df4a1453cf75eecfead392246ea74a - languageName: node - linkType: hard - "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" @@ -15816,7 +12496,7 @@ __metadata: languageName: node linkType: hard -"yallist@npm:^3.0.0, yallist@npm:^3.0.2, yallist@npm:^3.0.3": +"yallist@npm:^3.0.0, yallist@npm:^3.0.3": version: 3.1.1 resolution: "yallist@npm:3.1.1" checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d @@ -15847,16 +12527,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^2.4.1": - version: 2.4.1 - resolution: "yargs-parser@npm:2.4.1" - dependencies: - camelcase: ^3.0.0 - lodash.assign: ^4.0.6 - checksum: f57946a93a9e0986fccbc7999a3fc8179d4693e4551ef0ace3d599c38ec004a3783efb9eed9fa5d738b30db1cfa1d3a07f4dd6ae060cfce6fe61c3ae7b7a347b - languageName: node - linkType: hard - "yargs-parser@npm:^20.2.2": version: 20.2.7 resolution: "yargs-parser@npm:20.2.7" @@ -15942,28 +12612,6 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^4.7.1": - version: 4.8.1 - resolution: "yargs@npm:4.8.1" - dependencies: - cliui: ^3.2.0 - decamelize: ^1.1.1 - get-caller-file: ^1.0.1 - lodash.assign: ^4.0.3 - os-locale: ^1.4.0 - read-pkg-up: ^1.0.1 - require-directory: ^2.1.1 - require-main-filename: ^1.0.1 - set-blocking: ^2.0.0 - string-width: ^1.0.1 - which-module: ^1.0.0 - window-size: ^0.2.0 - y18n: ^3.2.1 - yargs-parser: ^2.4.1 - checksum: 5d0a45dceaf8cff1c6a7164b2c944755a09cced3cb1d585bbc79ffed758ef9f9b54ead0879e3dacfc696ccd15fec9e6e29183c24517d7f578b47cd0614a3851d - languageName: node - linkType: hard - "yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1"