diff --git a/.env.org b/.env.org new file mode 100644 index 00000000..f66b5060 --- /dev/null +++ b/.env.org @@ -0,0 +1,6 @@ +PRIVATE_KEY= +ETHERSCAN_API_KEY= +INFURA_API_KEY= +METADATA_ADDRESS= +WRAPPER_ADDRESS= +RESOLVER_ADDRESS= \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..7d643fd7 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,21 @@ +module.exports = { + env: { + mocha: true, + }, + plugins: ["babel"], + rules: { + "import/extensions": [ + "error", + "ignorePackages", + { + js: "never", + ts: "never", + }, + ], + "import/prefer-default-export": "off", + "prefer-destructuring": "off", + "prefer-template": "off", + "no-console": "off", + "func-names": "off", + }, +}; diff --git a/.gitignore b/.gitignore index 543b7a1a..f3091f9b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ +node_modules +artifacts +cache +gasreport-* +.env *.DS_Store node_modules build - -#Hardhat files -cache -artifacts diff --git a/.soliumrc.json b/.soliumrc.json new file mode 100644 index 00000000..d3fe0541 --- /dev/null +++ b/.soliumrc.json @@ -0,0 +1,9 @@ +{ + "extends": "solium:all", + "rules": { + "indentation": ["error", 4], + "quotes": ["error", "double"], + "arg-overflow": "off", + "blank-lines": "off" + } +} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 82204354..3f47b899 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,4 +18,3 @@ script: notifications: email: false - diff --git a/contracts/wrapper/BytesUtil.sol b/contracts/wrapper/BytesUtil.sol new file mode 100644 index 00000000..e5026e76 --- /dev/null +++ b/contracts/wrapper/BytesUtil.sol @@ -0,0 +1,51 @@ +//SPDX-License-Identifier: MIT +pragma solidity >=0.8.4; + +library BytesUtils { + /* + * @dev Returns the keccak-256 hash of a byte range. + * @param self The byte string to hash. + * @param offset The position to start hashing at. + * @param len The number of bytes to hash. + * @return The hash of the byte range. + */ + function keccak(bytes memory self, uint offset, uint len) internal pure returns (bytes32 ret) { + require(offset + len <= self.length); + assembly { + ret := keccak256(add(add(self, 32), offset), len) + } + } + + /** + * @dev Returns the ENS namehash of a DNS-encoded name. + * @param self The DNS-encoded name to hash. + * @param offset The offset at which to start hashing. + * @return The namehash of the name. + */ + function namehash(bytes memory self, uint offset) internal pure returns(bytes32) { + (bytes32 labelhash, uint newOffset) = readLabel(self, offset); + if(labelhash == bytes32(0)) { + require(offset == self.length - 1, "namehash: Junk at end of name"); + return bytes32(0); + } + return keccak256(abi.encodePacked(namehash(self, newOffset), labelhash)); + } + + /** + * @dev Returns the keccak-256 hash of a DNS-encoded label, and the offset to the start of the next label. + * @param self The byte string to read a label from. + * @param idx The index to read a label at. + * @return labelhash The hash of the label at the specified index, or 0 if it is the last label. + * @return newIdx The index of the start of the next label. + */ + function readLabel(bytes memory self, uint256 idx) internal pure returns (bytes32 labelhash, uint newIdx) { + require(idx < self.length, "readLabel: Index out of bounds"); + uint len = uint(uint8(self[idx])); + if(len > 0) { + labelhash = keccak(self, idx + 1, len); + } else { + labelhash = bytes32(0); + } + newIdx = idx + len + 1; + } +} diff --git a/contracts/wrapper/Controllable.sol b/contracts/wrapper/Controllable.sol new file mode 100644 index 00000000..80a67399 --- /dev/null +++ b/contracts/wrapper/Controllable.sol @@ -0,0 +1,20 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract Controllable is Ownable { + mapping(address=>bool) public controllers; + + event ControllerChanged(address indexed controller, bool active); + + function setController(address controller, bool active) onlyOwner() public { + controllers[controller] = active; + emit ControllerChanged(controller, active); + } + + modifier onlyController() { + require(controllers[msg.sender], "Controllable: Caller is not a controller"); + _; + } +} diff --git a/contracts/wrapper/ERC1155Fuse.sol b/contracts/wrapper/ERC1155Fuse.sol new file mode 100644 index 00000000..4d7e30c3 --- /dev/null +++ b/contracts/wrapper/ERC1155Fuse.sol @@ -0,0 +1,332 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.4; + +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; +import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; +import "@openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol"; +import "@openzeppelin/contracts/utils/Address.sol"; + +/* This contract is a variation on ERC1155 with the additions of _setData, getData and _canTransfer and ownerOf. _setData and getData allows the use of the other 96 bits next to the address of the owner for extra data. We use this to store 'fuses' that control permissions that can be burnt. */ + +abstract contract ERC1155Fuse is ERC165, IERC1155, IERC1155MetadataURI { + using Address for address; + mapping(uint256 => uint256) public _tokens; + + // Mapping from owner to operator approvals + mapping(address => mapping(address => bool)) private _operatorApprovals; + + /************************************************************************** + * ERC721 methods + *************************************************************************/ + + function ownerOf(uint256 id) public view returns (address) { + (address owner, ) = getData(id); + return owner; + } + + /** + * @dev See {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(ERC165, IERC165) + returns (bool) + { + return + interfaceId == type(IERC1155).interfaceId || + interfaceId == type(IERC1155MetadataURI).interfaceId || + super.supportsInterface(interfaceId); + } + + /** + * @dev See {IERC1155-balanceOf}. + * + * Requirements: + * + * - `account` cannot be the zero address. + */ + function balanceOf(address account, uint256 id) + public + view + virtual + override + returns (uint256) + { + require( + account != address(0), + "ERC1155: balance query for the zero address" + ); + (address owner, ) = getData(id); + if (owner == account) { + return 1; + } + return 0; + } + + /** + * @dev See {IERC1155-balanceOfBatch}. + * + * Requirements: + * + * - `accounts` and `ids` must have the same length. + */ + function balanceOfBatch(address[] memory accounts, uint256[] memory ids) + public + view + virtual + override + returns (uint256[] memory) + { + require( + accounts.length == ids.length, + "ERC1155: accounts and ids length mismatch" + ); + + uint256[] memory batchBalances = new uint256[](accounts.length); + + for (uint256 i = 0; i < accounts.length; ++i) { + batchBalances[i] = balanceOf(accounts[i], ids[i]); + } + + return batchBalances; + } + + /** + * @dev See {IERC1155-setApprovalForAll}. + */ + function setApprovalForAll(address operator, bool approved) + public + virtual + override + { + require( + msg.sender != operator, + "ERC1155: setting approval status for self" + ); + + _operatorApprovals[msg.sender][operator] = approved; + emit ApprovalForAll(msg.sender, operator, approved); + } + + /** + * @dev See {IERC1155-isApprovedForAll}. + */ + function isApprovedForAll(address account, address operator) + public + view + virtual + override + returns (bool) + { + return _operatorApprovals[account][operator]; + } + + /** + * @dev Returns the Name's owner address and fuses + */ + function getData(uint256 tokenId) + public + view + returns (address owner, uint96 fuses) + { + uint256 t = _tokens[tokenId]; + owner = address(uint160(t)); + fuses = uint96(t >> 160); + } + + /** + * @dev Sets the Name's owner address and fuses + */ + function _setData( + uint256 tokenId, + address owner, + uint96 fuses + ) internal virtual { + _tokens[tokenId] = uint256(uint160(owner)) | (uint256(fuses) << 160); + } + + /** + * @dev See {IERC1155-safeTransferFrom}. + */ + function safeTransferFrom( + address from, + address to, + uint256 id, + uint256 amount, + bytes memory data + ) public virtual override { + require(to != address(0), "ERC1155: transfer to the zero address"); + require( + from == msg.sender || isApprovedForAll(from, msg.sender), + "ERC1155: caller is not owner nor approved" + ); + + (address oldOwner, uint96 fuses) = getData(id); + require( + _canTransfer(fuses), + "NameWrapper: Fuse already burned for transferring owner" + ); + require( + amount == 1 && oldOwner == from, + "ERC1155: insufficient balance for transfer" + ); + _setData(id, to, fuses); + + emit TransferSingle(msg.sender, from, to, id, amount); + + _doSafeTransferAcceptanceCheck(msg.sender, from, to, id, amount, data); + } + + /** + * @dev See {IERC1155-safeBatchTransferFrom}. + */ + function safeBatchTransferFrom( + address from, + address to, + uint256[] memory ids, + uint256[] memory amounts, + bytes memory data + ) public virtual override { + require( + ids.length == amounts.length, + "ERC1155: ids and amounts length mismatch" + ); + require(to != address(0), "ERC1155: transfer to the zero address"); + require( + from == msg.sender || isApprovedForAll(from, msg.sender), + "ERC1155: transfer caller is not owner nor approved" + ); + + for (uint256 i = 0; i < ids.length; ++i) { + uint256 id = ids[i]; + uint256 amount = amounts[i]; + + (address oldOwner, uint96 fuses) = getData(id); + + require( + _canTransfer(fuses), + "NameWrapper: Fuse already burned for transferring owner" + ); + require( + amount == 1 && oldOwner == from, + "ERC1155: insufficient balance for transfer" + ); + _setData(id, to, fuses); + } + + emit TransferBatch(msg.sender, from, to, ids, amounts); + + _doSafeBatchTransferAcceptanceCheck( + msg.sender, + from, + to, + ids, + amounts, + data + ); + } + + /************************************************************************** + * Internal/private methods + *************************************************************************/ + + function _canTransfer(uint96 fuses) internal virtual returns (bool); + + function _mint( + bytes32 node, + address newOwner, + uint96 _fuses + ) internal virtual { + uint256 tokenId = uint256(node); + address owner = ownerOf(tokenId); + require(owner == address(0), "ERC1155: mint of existing token"); + require(newOwner != address(0), "ERC1155: mint to the zero address"); + require( + newOwner != address(this), + "ERC1155: newOwner cannot be the NameWrapper contract" + ); + _setData(tokenId, newOwner, _fuses); + emit TransferSingle(msg.sender, address(0x0), newOwner, tokenId, 1); + _doSafeTransferAcceptanceCheck( + msg.sender, + address(0), + newOwner, + tokenId, + 1, + "" + ); + } + + function _burn(uint256 tokenId) internal virtual { + address owner = ownerOf(tokenId); + // Clear fuses and set owner to 0 + _setData(tokenId, address(0x0), 0); + emit TransferSingle(msg.sender, owner, address(0x0), tokenId, 1); + } + + function _doSafeTransferAcceptanceCheck( + address operator, + address from, + address to, + uint256 id, + uint256 amount, + bytes memory data + ) private { + if (to.isContract()) { + try + IERC1155Receiver(to).onERC1155Received( + operator, + from, + id, + amount, + data + ) + returns (bytes4 response) { + if ( + response != IERC1155Receiver(to).onERC1155Received.selector + ) { + revert("ERC1155: ERC1155Receiver rejected tokens"); + } + } catch Error(string memory reason) { + revert(reason); + } catch { + revert("ERC1155: transfer to non ERC1155Receiver implementer"); + } + } + } + + function _doSafeBatchTransferAcceptanceCheck( + address operator, + address from, + address to, + uint256[] memory ids, + uint256[] memory amounts, + bytes memory data + ) private { + if (to.isContract()) { + try + IERC1155Receiver(to).onERC1155BatchReceived( + operator, + from, + ids, + amounts, + data + ) + returns (bytes4 response) { + if ( + response != + IERC1155Receiver(to).onERC1155BatchReceived.selector + ) { + revert("ERC1155: ERC1155Receiver rejected tokens"); + } + } catch Error(string memory reason) { + revert(reason); + } catch { + revert("ERC1155: transfer to non ERC1155Receiver implementer"); + } + } + } +} diff --git a/contracts/wrapper/IMetadataService.sol b/contracts/wrapper/IMetadataService.sol new file mode 100644 index 00000000..b4587e03 --- /dev/null +++ b/contracts/wrapper/IMetadataService.sol @@ -0,0 +1,5 @@ +pragma solidity >=0.8.4; + +interface IMetadataService { + function uri(uint256) external view returns (string memory); +} diff --git a/contracts/wrapper/INameWrapper.sol b/contracts/wrapper/INameWrapper.sol new file mode 100644 index 00000000..5de867e3 --- /dev/null +++ b/contracts/wrapper/INameWrapper.sol @@ -0,0 +1,138 @@ +pragma solidity ^0.8.4; + +import "../registry/ENS.sol"; +import "../ethregistrar/BaseRegistrar.sol"; +import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; +import "./IMetadataService.sol"; + +uint96 constant CANNOT_UNWRAP = 1; +uint96 constant CANNOT_BURN_FUSES = 2; +uint96 constant CANNOT_TRANSFER = 4; +uint96 constant CANNOT_SET_RESOLVER = 8; +uint96 constant CANNOT_SET_TTL = 16; +uint96 constant CANNOT_CREATE_SUBDOMAIN = 32; +uint96 constant CANNOT_REPLACE_SUBDOMAIN = 64; +uint96 constant CAN_DO_EVERYTHING = 0; + +interface INameWrapper is IERC1155 { + enum NameSafety { + Safe, + RegistrantNotWrapped, + ControllerNotWrapped, + SubdomainReplacementAllowed, + Expired + } + event NameWrapped( + bytes32 indexed node, + bytes name, + address owner, + uint96 fuses + ); + + event NameUnwrapped(bytes32 indexed node, address owner); + + event FusesBurned(bytes32 indexed node, uint96 fuses); + + function ens() external view returns(ENS); + function registrar() external view returns(BaseRegistrar); + function metadataService() external view returns(IMetadataService); + function names(bytes32) external view returns(bytes memory); + + function wrap( + bytes calldata name, + address wrappedOwner, + uint96 _fuses, + address resolver + ) external; + + function wrapETH2LD( + string calldata label, + address wrappedOwner, + uint96 _fuses, + address resolver + ) external; + + function registerAndWrapETH2LD( + string calldata label, + address wrappedOwner, + uint256 duration, + address resolver, + uint96 _fuses + ) external returns (uint256 expires); + + function renew(uint256 labelHash, uint256 duration) + external + returns (uint256 expires); + + function unwrap( + bytes32 node, + bytes32 label, + address owner + ) external; + + function unwrapETH2LD( + bytes32 label, + address newRegistrant, + address newController + ) external; + + function burnFuses(bytes32 node, uint96 _fuses) external; + + function setSubnodeRecord( + bytes32 node, + bytes32 label, + address owner, + address resolver, + uint64 ttl + ) external; + + function setSubnodeRecordAndWrap( + bytes32 node, + string calldata label, + address owner, + address resolver, + uint64 ttl, + uint96 _fuses + ) external; + + function setRecord( + bytes32 node, + address owner, + address resolver, + uint64 ttl + ) external; + + function setSubnodeOwner( + bytes32 node, + bytes32 label, + address owner + ) external returns (bytes32); + + function setSubnodeOwnerAndWrap( + bytes32 node, + string calldata label, + address newOwner, + uint96 _fuses + ) external returns (bytes32); + + function isTokenOwnerOrApproved(bytes32 node, address addr) + external + returns (bool); + + function setResolver(bytes32 node, address resolver) external; + + function setTTL(bytes32 node, uint64 ttl) external; + + function getFuses(bytes32 node) + external + returns ( + uint96, + NameSafety, + bytes32 + ); + + function allFusesBurned(bytes32 node, uint96 fuseMask) + external + view + returns (bool); +} diff --git a/contracts/wrapper/NameWrapper.sol b/contracts/wrapper/NameWrapper.sol new file mode 100644 index 00000000..41d48457 --- /dev/null +++ b/contracts/wrapper/NameWrapper.sol @@ -0,0 +1,741 @@ +//SPDX-License-Identifier: MIT +pragma solidity ^0.8.4; + +import "./ERC1155Fuse.sol"; +import "./Controllable.sol"; +import "./INameWrapper.sol"; +import "./IMetadataService.sol"; +import "../registry/ENS.sol"; +import "../ethregistrar/BaseRegistrar.sol"; +import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "./BytesUtil.sol"; + +contract NameWrapper is + Ownable, + ERC1155Fuse, + INameWrapper, + Controllable, + IERC721Receiver +{ + using BytesUtils for bytes; + ENS public immutable override ens; + BaseRegistrar public immutable override registrar; + IMetadataService public override metadataService; + mapping(bytes32 => bytes) public override names; + + bytes32 private constant ETH_NODE = + 0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae; + bytes32 private constant ROOT_NODE = + 0x0000000000000000000000000000000000000000000000000000000000000000; + + constructor( + ENS _ens, + BaseRegistrar _registrar, + IMetadataService _metadataService + ) { + ens = _ens; + registrar = _registrar; + metadataService = _metadataService; + + /* Burn CANNOT_REPLACE_SUBDOMAIN and CANNOT_UNWRAP fuses for ROOT_NODE and ETH_NODE */ + + _setData( + uint256(ETH_NODE), + address(0x0), + uint96(CANNOT_REPLACE_SUBDOMAIN | CANNOT_UNWRAP) + ); + _setData( + uint256(ROOT_NODE), + address(0x0), + uint96(CANNOT_REPLACE_SUBDOMAIN | CANNOT_UNWRAP) + ); + names[ROOT_NODE] = "\x00"; + names[ETH_NODE] = "\x03eth\x00"; + } + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(ERC1155Fuse, IERC165) + returns (bool) + { + return + interfaceId == type(INameWrapper).interfaceId || + super.supportsInterface(interfaceId); + } + + /* Metadata service */ + + /** + * @notice Set the metadata service. only admin can do this + */ + + function setMetadataService(IMetadataService _newMetadataService) + public + onlyOwner() + { + metadataService = _newMetadataService; + } + + /** + * @notice Get the metadata uri + * @return String uri of the metadata service + */ + + function uri(uint256 tokenId) public view override returns (string memory) { + return metadataService.uri(tokenId); + } + + /** + * @notice Checks if msg.sender is the owner or approved by the owner of a name + * @param node namehash of the name to check + */ + + modifier onlyTokenOwner(bytes32 node) { + require( + isTokenOwnerOrApproved(node, msg.sender), + "NameWrapper: msg.sender is not the owner or approved" + ); + _; + } + + /** + * @notice Checks if owner or approved by owner + * @param node namehash of the name to check + * @param addr which address to check permissions for + * @return whether or not is owner or approved + */ + + function isTokenOwnerOrApproved(bytes32 node, address addr) + public + view + override + returns (bool) + { + address owner = ownerOf(uint256(node)); + return + owner == addr || + isApprovedForAll(owner, addr); + } + + /** + * @notice Gets fuse permissions for a specific name + * @dev Fuses are represented by a uint96 where each permission is represented by 1 bit + * The interface has predefined fuses for all registry permissions, but additional + * fuses can be added for other use cases + * @param node namehash of the name to check + * @return fuses A number that represents the permissions a name has + * @return vulnerability The type of vulnerability + * @return vulnerableNode Which node is vulnerable + */ + function getFuses(bytes32 node) + public + view + override + returns ( + uint96 fuses, + NameSafety vulnerability, + bytes32 vulnerableNode + ) + { + bytes memory name = names[node]; + require(name.length > 0, "NameWrapper: Name not found"); + (, vulnerability, vulnerableNode) = _checkHierarchy(name, 0); + (, fuses) = getData(uint256(node)); + } + + /** + * @notice Wraps a .eth domain, creating a new token and sending the original ERC721 token to this * contract + * @dev Can be called by the owner of the name in the .eth registrar or an authorised caller on the * registrar + * @param label label as a string of the .eth domain to wrap + * @param _fuses initial fuses to set + * @param wrappedOwner Owner of the name in this contract + */ + + function wrapETH2LD( + string calldata label, + address wrappedOwner, + uint96 _fuses, + address resolver + ) public override { + uint256 tokenId = uint256(keccak256(bytes(label))); + address registrant = registrar.ownerOf(tokenId); + + require( + registrant == msg.sender || + isApprovedForAll(registrant, msg.sender) || + registrar.isApprovedForAll(registrant, msg.sender), + "NameWrapper: Sender is not owner or authorised by the owner or authorised on the .eth registrar" + ); + + // transfer the token from the user to this contract + registrar.transferFrom(registrant, address(this), tokenId); + + // transfer the ens record back to the new owner (this contract) + registrar.reclaim(tokenId, address(this)); + + _wrapETH2LD(label, wrappedOwner, _fuses, resolver); + } + + /** + * @dev Registers a new .eth second-level domain and wraps it. + * Only callable by authorised controllers. + * @param label The label to register (Eg, 'foo' for 'foo.eth'). + * @param wrappedOwner The owner of the wrapped name. + * @param duration The duration, in seconds, to register the name for. + * @param resolver The resolver address to set on the ENS registry (optional). + * @return expires The expiry date of the new name, in seconds since the Unix epoch. + */ + function registerAndWrapETH2LD( + string calldata label, + address wrappedOwner, + uint256 duration, + address resolver, + uint96 _fuses + ) external override onlyController returns (uint256 expires) { + uint256 tokenId = uint256(keccak256(bytes(label))); + + expires = registrar.register(tokenId, address(this), duration); + _wrapETH2LD(label, wrappedOwner, _fuses, resolver); + } + + /** + * @dev Renews a .eth second-level domain. + * Only callable by authorised controllers. + * @param tokenId The hash of the label to register (eg, `keccak256('foo')`, for 'foo.eth'). + * @param duration The number of seconds to renew the name for. + * @return expires The expiry date of the name, in seconds since the Unix epoch. + */ + function renew(uint256 tokenId, uint256 duration) + external + override + onlyController + returns (uint256 expires) + { + return registrar.renew(tokenId, duration); + } + + /** + * @notice Wraps a non .eth domain, of any kind. Could be a DNSSEC name vitalik.xyz or a subdomain + * @dev Can be called by the owner in the registry or an authorised caller in the registry + * @param name The name to wrap, in DNS format + * @param _fuses initial fuses to set represented as a number. Check getFuses() for more info + * @param wrappedOwner Owner of the name in this contract + */ + + function wrap( + bytes calldata name, + address wrappedOwner, + uint96 _fuses, + address resolver + ) public override { + (bytes32 labelhash, uint offset) = name.readLabel(0); + bytes32 parentNode = name.namehash(offset); + bytes32 node = _makeNode(parentNode, labelhash); + + require( + parentNode != ETH_NODE, + "NameWrapper: .eth domains need to use wrapETH2LD()" + ); + + address owner = ens.owner(node); + require( + owner == msg.sender || + isApprovedForAll(owner, msg.sender) || + ens.isApprovedForAll(owner, msg.sender), + "NameWrapper: Domain is not owned by the sender" + ); + + if (resolver != address(0)) { + ens.setResolver(node, resolver); + } + + ens.setOwner(node, address(this)); + + _wrap(node, name, wrappedOwner, _fuses); + } + + /** + * @notice Unwraps a .eth domain. e.g. vitalik.eth + * @dev Can be called by the owner in the wrapper or an authorised caller in the wrapper + * @param label label as a string of the .eth domain to wrap e.g. vitalik.xyz would be 'vitalik' + * @param newRegistrant sets the owner in the .eth registrar to this address + * @param newController sets the owner in the registry to this address + */ + + function unwrapETH2LD( + bytes32 label, + address newRegistrant, + address newController + ) public override onlyTokenOwner(_makeNode(ETH_NODE, label)) { + _unwrap(_makeNode(ETH_NODE, label), newController); + registrar.transferFrom(address(this), newRegistrant, uint256(label)); + } + + /** + * @notice Unwraps a non .eth domain, of any kind. Could be a DNSSEC name vitalik.xyz or a subdomain + * @dev Can be called by the owner in the wrapper or an authorised caller in the wrapper + * @param parentNode parent namehash of the name to wrap e.g. vitalik.xyz would be namehash('xyz') + * @param label label as a string of the .eth domain to wrap e.g. vitalik.xyz would be 'vitalik' + * @param newController sets the owner in the registry to this address + */ + + function unwrap( + bytes32 parentNode, + bytes32 label, + address newController + ) public override onlyTokenOwner(_makeNode(parentNode, label)) { + require( + parentNode != ETH_NODE, + "NameWrapper: .eth names must be unwrapped with unwrapETH2LD()" + ); + _unwrap(_makeNode(parentNode, label), newController); + } + + /** + * @notice Burns any fuse passed to this function for a name + * @dev Fuse burns are always additive and will not unburn already burnt fuses + * @param node namehash of the name. e.g. vitalik.xyz would be namehash('vitalik.xyz') + * @param _fuses Fuses you want to burn. + */ + + function burnFuses(bytes32 node, uint96 _fuses) + public + override + onlyTokenOwner(node) + operationAllowed(node, CANNOT_BURN_FUSES) + { + (address owner, uint96 fuses) = getData(uint256(node)); + + uint96 newFuses = fuses | _fuses; + + _setData(uint256(node), owner, newFuses); + + emit FusesBurned(node, newFuses); + } + + /** + * @notice Sets records for the subdomain in the ENS Registry + * @param parentNode namehash of the parent name + * @param label labelhash of the subnode + * @param owner newOwner in the registry + * @param resolver the resolver contract in the registry + * @param ttl ttl in the registry + */ + + function setSubnodeRecord( + bytes32 parentNode, + bytes32 label, + address owner, + address resolver, + uint64 ttl + ) + public + override + onlyTokenOwner(parentNode) + canCallSetSubnodeOwner(parentNode, label) + { + ens.setSubnodeRecord(parentNode, label, owner, resolver, ttl); + } + + /** + * @notice Sets the subnode owner in the registry + * @param parentNode namehash of the parent name + * @param label labelhash of the subnode + * @param owner newOwner in the registry + */ + + function setSubnodeOwner( + bytes32 parentNode, + bytes32 label, + address owner + ) + public + override + onlyTokenOwner(parentNode) + canCallSetSubnodeOwner(parentNode, label) + returns (bytes32) + { + return ens.setSubnodeOwner(parentNode, label, owner); + } + + /** + * @notice Sets the subdomain owner in the registry and then wraps the subdomain + * @param parentNode parent namehash of the subdomain + * @param label label of the subdomain as a string + * @param newOwner newOwner in the registry + * @param _fuses initial fuses for the wrapped subdomain + */ + + function setSubnodeOwnerAndWrap( + bytes32 parentNode, + string calldata label, + address newOwner, + uint96 _fuses + ) public override returns (bytes32 node) { + bytes32 labelhash = keccak256(bytes(label)); + node = _makeNode(parentNode, labelhash); + bytes memory name = _addLabel(label, names[parentNode]); + + setSubnodeOwner(parentNode, labelhash, address(this)); + + _wrap(node, name, newOwner, _fuses); + } + + /** + * @notice Sets the subdomain owner in the registry with records and then wraps the subdomain + * @param parentNode parent namehash of the subdomain + * @param label label of the subdomain as a string + * @param newOwner newOwner in the registry + * @param resolver resolver contract in the registry + * @param ttl ttl in the regsitry + * @param _fuses initial fuses for the wrapped subdomain + */ + + function setSubnodeRecordAndWrap( + bytes32 parentNode, + string calldata label, + address newOwner, + address resolver, + uint64 ttl, + uint96 _fuses + ) public override { + bytes32 labelhash = keccak256(bytes(label)); + bytes32 node = _makeNode(parentNode, labelhash); + bytes memory name = _addLabel(label, names[parentNode]); + + setSubnodeRecord(parentNode, labelhash, address(this), resolver, ttl); + + _wrap(node, name, newOwner, _fuses); + } + + /** + * @notice Sets records for the name in the ENS Registry + * @param node namehash of the name to set a record for + * @param owner newOwner in the registry + * @param resolver the resolver contract + * @param ttl ttl in the registry + */ + + function setRecord( + bytes32 node, + address owner, + address resolver, + uint64 ttl + ) + public + override + onlyTokenOwner(node) + operationAllowed( + node, + CANNOT_TRANSFER | CANNOT_SET_RESOLVER | CANNOT_SET_TTL + ) + { + ens.setRecord(node, owner, resolver, ttl); + } + + /** + * @notice Sets resolver contract in the registry + * @param node namehash of the name + * @param resolver the resolver contract + */ + + function setResolver(bytes32 node, address resolver) + public + override + onlyTokenOwner(node) + operationAllowed(node, CANNOT_SET_RESOLVER) + { + ens.setResolver(node, resolver); + } + + /** + * @notice Sets TTL in the registry + * @param node namehash of the name + * @param ttl TTL in the registry + */ + + function setTTL(bytes32 node, uint64 ttl) + public + override + onlyTokenOwner(node) + operationAllowed(node, CANNOT_SET_TTL) + { + ens.setTTL(node, ttl); + } + + /** + * @dev Allows an operation only if none of the specified fuses are burned. + * @param node The namehash of the name to check fuses on. + * @param fuseMask A bitmask of fuses that must not be burned. + */ + modifier operationAllowed(bytes32 node, uint96 fuseMask) { + (, uint96 fuses) = getData(uint256(node)); + require( + fuses & fuseMask == 0, + "NameWrapper: Operation prohibited by fuses" + ); + _; + } + + /** + * @notice Check whether a name can call setSubnodeOwner/setSubnodeRecord + * @dev Checks both canCreateSubdomain and canReplaceSubdomain and whether not they have been burnt + * and checks whether the owner of the subdomain is 0x0 for creating or already exists for + * replacing a subdomain. If either conditions are true, then it is possible to call + * setSubnodeOwner + * @param node namehash of the name to check + * @param label labelhash of the name to check + */ + + modifier canCallSetSubnodeOwner(bytes32 node, bytes32 label) { + bytes32 subnode = _makeNode(node, label); + address owner = ens.owner(subnode); + (, uint96 fuses) = getData(uint256(node)); + + require( + (owner == address(0) && fuses & CANNOT_CREATE_SUBDOMAIN == 0) || + (owner != address(0) && fuses & CANNOT_REPLACE_SUBDOMAIN == 0), + "NameWrapper: Operation prohibited by fuses" + ); + _; + } + + /** + * @notice Checks all Fuses in the mask are burned for the node + * @param node namehash of the name + * @param fuseMask the fuses you want to check + * @return Boolean of whether or not all the selected fuses are burned + */ + + function allFusesBurned(bytes32 node, uint96 fuseMask) + public + view + override + returns (bool) + { + (, uint96 fuses) = getData(uint256(node)); + return fuses & fuseMask == fuseMask; + } + + function onERC721Received( + address to, + address, + uint256 tokenId, + bytes calldata data + ) public override returns (bytes4) { + //check if it's the eth registrar ERC721 + require( + msg.sender == address(registrar), + "NameWrapper: Wrapper only supports .eth ERC721 token transfers" + ); + + ( + string memory label, + address owner, + uint96 fuses, + address resolver + ) = abi.decode(data, (string, address, uint96, address)); + + bytes32 labelhash = bytes32(tokenId); + + require( + keccak256(bytes(label)) == labelhash, + "NameWrapper: Token id does match keccak(label) of label provided in data field" + ); + + // transfer the ens record back to the new owner (this contract) + registrar.reclaim(uint256(labelhash), address(this)); + + _wrapETH2LD(label, owner, fuses, resolver); + + return IERC721Receiver(to).onERC721Received.selector; + } + + /***** Internal functions */ + + function _canTransfer(uint96 fuses) internal pure override returns (bool) { + return fuses & CANNOT_TRANSFER == 0; + } + + function _makeNode(bytes32 node, bytes32 label) + private + pure + returns (bytes32) + { + return keccak256(abi.encodePacked(node, label)); + } + + function _addLabel(string memory label, bytes memory name) + internal + pure + returns (bytes memory ret) + { + require(bytes(label).length > 0, "NameWrapper: Label too short"); + require(bytes(label).length < 256, "NameWrapper: Label too long"); + return abi.encodePacked(uint8(bytes(label).length), label, name); + } + + function _mint( + bytes32 node, + address wrappedOwner, + uint96 _fuses + ) internal override { + address oldWrappedOwner = ownerOf(uint256(node)); + if (oldWrappedOwner != address(0)) { + // burn and unwrap old token of old owner + _burn(uint256(node)); + emit NameUnwrapped(node, address(0)); + } + super._mint(node, wrappedOwner, _fuses); + } + + function _wrap(bytes32 node, bytes memory name, address wrappedOwner, uint96 fuses) + internal + { + names[node] = name; + + _mint(node, wrappedOwner, fuses); + + emit NameWrapped(node, name, wrappedOwner, fuses); + } + + function _wrapETH2LD( + string memory label, + address wrappedOwner, + uint96 _fuses, + address resolver + ) private returns (bytes32 labelhash) { + labelhash = keccak256(bytes(label)); + bytes32 node = _makeNode(ETH_NODE, labelhash); + bytes memory name = _addLabel(label, "\x03eth\x00"); + + if (resolver != address(0)) { + ens.setResolver(node, resolver); + } + + // mint a new ERC1155 token with fuses + _wrap(node, name, wrappedOwner, _fuses); + } + + function _unwrap(bytes32 node, address newOwner) private { + require( + newOwner != address(0x0), + "NameWrapper: Target owner cannot be 0x0" + ); + require( + newOwner != address(this), + "NameWrapper: Target owner cannot be the NameWrapper contract" + ); + require( + !allFusesBurned(node, CANNOT_UNWRAP), + "NameWrapper: Domain is not unwrappable" + ); + + // burn token and fuse data + _burn(uint256(node)); + ens.setOwner(node, newOwner); + + emit NameUnwrapped(node, newOwner); + } + + function _setData( + uint256 tokenId, + address owner, + uint96 fuses + ) internal override { + require( + fuses == CAN_DO_EVERYTHING || fuses & CANNOT_UNWRAP != 0, + "NameWrapper: Cannot burn fuses: domain can be unwrapped" + ); + super._setData(tokenId, owner, fuses); + } + + /** + * @dev Internal function that checks all a name's ancestors to ensure fuse values will be respected and parent controller/registrant are set to the Wrapper + * @param name The name to check. + * @param offset The offset into the name to start at. + * @return node The calculated namehash for this part of the name. + * @return vulnerability what kind of vulnerability the node has + * @return vulnerableNode which node is at risk + */ + function _checkHierarchy(bytes memory name, uint256 offset) + internal + view + returns ( + bytes32 node, + NameSafety vulnerability, + bytes32 vulnerableNode + ) + { + // Read the first label. If it's the root, return immediately. + (bytes32 labelhash, uint256 newOffset) = name.readLabel(offset); + if (labelhash == bytes32(0)) { + // Root node + return (bytes32(0), NameSafety.Safe, 0); + } + + // Check the parent name + bytes32 parentNode; + (parentNode, vulnerability, vulnerableNode) = _checkHierarchy( + name, + newOffset + ); + + node = _makeNode(parentNode, labelhash); + + // stop function checking any other nodes if a parent is not safe + if (vulnerability != NameSafety.Safe) { + return (node, vulnerability, vulnerableNode); + } + + // Check the parent name's fuses to see if replacing subdomains is forbidden + if (parentNode == ROOT_NODE) { + // Save ourselves some gas; root node can't be replaced + return (node, NameSafety.Safe, 0); + } + + (vulnerability, vulnerableNode) = _checkOwnership( + labelhash, + node, + parentNode + ); + + if (vulnerability != NameSafety.Safe) { + return (node, vulnerability, vulnerableNode); + } + + if (!allFusesBurned(parentNode, CANNOT_REPLACE_SUBDOMAIN)) { + return (node, NameSafety.SubdomainReplacementAllowed, parentNode); + } + + return (node, NameSafety.Safe, 0); + } + + function _checkOwnership( + bytes32 labelhash, + bytes32 node, + bytes32 parentNode + ) internal view returns (NameSafety vulnerability, bytes32 vulnerableNode) { + if (parentNode == ETH_NODE) { + // Special case .eth: Check registrant or name isexpired + + try registrar.ownerOf(uint256(labelhash)) returns ( + address registrarOwner + ) { + if (registrarOwner != address(this)) { + return (NameSafety.RegistrantNotWrapped, node); + } + } catch { + return (NameSafety.Expired, node); + } + } + + if (ens.owner(node) != address(this)) { + return (NameSafety.ControllerNotWrapped, node); + } + return (NameSafety.Safe, 0); + } +} diff --git a/contracts/wrapper/README.md b/contracts/wrapper/README.md new file mode 100644 index 00000000..126abdd0 --- /dev/null +++ b/contracts/wrapper/README.md @@ -0,0 +1,210 @@ +# ENS Name Wrapper + +The ENS Name Wrapper is a smart contract that wraps existing ENS names, providing several new features: + +- Wrapped names are ERC1155 tokens +- Better permission control over wrapped names +- Consistent API for names at any level of the hierarchy + +In addition to implementing ERC1155, wrapped names have an ERC721-compatible `ownerOf` function to return the owner of a wrapped name. + +Making ENS names ERC1155 compatible allows them to be displayed, transferred and traded in any wallet that supports the standard. + +`NameWrapper` implements the optional ERC1155 metadata extension; presently this is via an HTTPS URL to a service ENS operates, but this can be changed in future as better options become available. + +With the exception of the functionality to upgrade the metadata generation for tokens, there is no upgrade mechanism or centralised control over wrapped names. + +## Wrapping a name + +`.eth` 2LDs (second-level domains) such as `example.eth` can be wrapped by calling `wrapETH2LD(label, wrappedOwner, fuses, resolver)`. `label` is the first part of the domain name (eg, `'example'` for `example.eth`), `wrappedOwner` is the desired owner for the wrapped name, and `fuses` is a bitfield representing permissions over the name that should be irrevoacably burned (see 'Fuses' below). A `fuses` value of `0` represents no restrictions on the name. The resolver can also optionally be set here and would need to be a _wrapper aware_ resolver that uses the NameWrapper ownership over the Registry ownership. + +In order to wrap a `.eth` 2LD, the owner of the name must have authorised the wrapper by calling `setApprovalForAll` on the registrar, and the caller of `wrapETH2LD` must be either the owner, or authorised by the owner on either the wrapper or the registrar. + +All other domains (non `.eth` names as well as `.eth` subdomains such as `sub.example.eth` can be wrapped by calling `wrap(parentNode, label, wrappedOwner, fuses)`. `parentNode` is the namehash of the name one level higher than the name to be wrapped, `label` is the first part of the name, `wrappedOwner` is the address that should own the wrapped name, and `fuses` is a bitfield representing permissions over the name that should be irrevocably burned (see 'Fuses' below). A `fuses` value of `0` represents no restrictions on the name. For example, to wrap `sub.example.eth`, you should call `wrap(namehash('example.eth'), 'example', owner, fuses)`. + +In order to wrap a domain that is not a `.eth` 2LD, the owner of the name must have authorised the wrapper by calling `setApprovalForAll` on the registry, and the caller of `wrap` must be either the owner, or authorised by the owner on either the wrapper or the registry. + +## Wrapping a name by sending the `.eth` token + +An alternative way to wrap `.eth` names is to send the name to the NameWrapper contract, this bypasses the need to `setApprovalForAll` on the registrar and is preferable when only wrapping one name. + +To wrap a name by sending to the contract, you must use `safeTransferFrom(address,address,uint256,bytes)` with the extra data (the last parameter) ABI formatted as `[string label, address owner, uint96 fuses, address resolver]`. + +Example: + +```js +// Using ethers.js v5 +abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + ['vitalik', '0x...', '0x000000000000000000000001', '0x...'] +) +``` + +## Unwrapping a name + +Wrapped names can be unwrapped by calling either `unwrapETH2LD(label, newRegistrant, newController)` or `unwrap(parentNode, label, newController)` as appropriate. `label` and `parentNode` have meanings as described under "Wrapping a name", while `newRegistrant` is the address that should own the .eth registrar token, and `newController` is the address that should be set as the owner of the ENS registry record. + +## Working with wrapped names + +The wrapper exposes all the registry functionality via its own methods - `setSubnodeOwner`, `setSubnodeRecord`, `setRecord`, `setResolver` and `setTTL` are all implemented with the same functionality as the registry, and pass through to it after doing authorisation checks. Transfers are handled via ERC1155's transfer methods rather than mirroring the registry's `setOwner` method. + +In addition, `setSubnodeOwnerAndWrap` and `setSubnodeRecordAndWrap` methods are provided, which create or replace subdomains while automatically wrapping the resulting subdomain. + +All functions for working with wrapped names utilise ERC1155's authorisation mechanism, meaning an account that is authorised to act on behalf of another account can manage all its names. + +## Fuses + +`NameWrapper` also implements a permissions mechanism called 'fuses'. Each name has a set of fuses representing permissions over that name. Fuses can be 'burned' either at the time the name is wrapped or at any subsequent time when the owner or authorised operator calls `burnFuses`. Once a fuse is burned, it cannot be 'unburned' - the permission that fuse represents is permanently revoked. + +Before any fuses can be burned on a name, the parent name's "replace subdomain" fuse must first be burned. Without this restriction, any permissions revoked via fuses can be evaded by the parent name replacing the subdomain and then re-wrapping it with a more permissive fuse field. Likewise, when any fuses on a name are burned, the "unwrap" fuse must also be burned, to prevent the name being directly unwrapped and re-wrapped to reset the fuses. These restrictions have the effect of allowing applications to simply check the fuse value they care about on the name they are examining without having to be aware of the entire chain of custody up to the root. + +The ENS root and the .eth 2LD are treated as having the "replace subdomain" and "unwrap" fuses burned. There is one edge-case here insofar as a .eth name's registration can expire; at that point the name can be purchased by a new registrant and effectively becomes unwrapped despite any fuse restrictions. When that name is re-wrapped, fuse fields can be set to a more permissive value than the name previously had. Any application relying on fuse values for .eth subdomains should check the expiration date of the .eth name and warn users if this is likely to expire soon. + +The fuses field is 96 bits, and only 7 fuses are defined by the `NameWrapper` contract itself. Applications may use additional fuse bits to encode their own restrictions on applications. Any application wishing to do so should submit a PR to this README in order to record the use of the value and ensure there is no unintentional overlap. + +Each fuse is represented by a single bit. If that bit is cleared (0) the restriction is not applied, and if it is set (1) the restriction is applied. Any updates to the fuse field for a name are treated as a logical-OR; as a result bits can only be set, never cleared. + +### CANNOT_UNWRAP = 1 + +If this fuse is burned, the name cannot be unwrapped, and calls to `unwrap` and `unwrapETH2LD` will fail. + +### CANNOT_BURN_FUSES = 2 + +If this fuse is burned, no further fuses can be burned. This has the effect of 'locking open' some set of permissions on the name. Calls to `burnFuses` will fail. + +### CANNOT_TRANSFER = 4 + +If this fuse is burned, the name cannot be transferred. Calls to `safeTransferFrom` and `safeBatchTransferFrom` will fail. + +### CANNOT_SET_RESOLVER = 8 + +If this fuse is burned, the resolver cannot be changed. Calls to `setResolver` and `setRecord` will fail. + +### CANNOT_SET_TTL = 16 + +If this fuse is burned, the TTL cannot be changed. Calls to `setTTL` and `setRecord` will fail. + +### CANNOT_CREATE_SUBDOMAIN = 32 + +If this fuse is burned, new subdomains cannot be created. Calls to `setSubnodeOwner`, `setSubnodeRecord`, `setSubnodeOwnerAndWrap` and `setSubnodeRecordAndWrap` will fail if they reference a name that does not already exist. + +### CANNOT_REPLACE_SUBDOMAIN = 64 + +If this fuse is burned, existing subdomains cannot be replaced by the parent name. Calls to `setSubnodeOwner`, `setSubnodeRecord`, `setSubnodeOwnerAndWrap` and `setSubnodeRecordAndWrap` will fail if they reference a name that already exists. + +### Checking Fuses using `allFusesBurned(node, uint96)` + +To check whether or not a fuse is burnt you can use this function that takes a fuse mask of all fuses you want to check. + +```js +const areBurned = await allFusesBurned( + namehash('vitalik.eth'), + CANNOT_TRANSFER | CANNOT_SET_RESOLVER +) +// if CANNOT_UNWRAP AND CANNOT_SET_RESOLVER are *both* burned this will return true +``` + +### Get current fuses and parent safety using `getFuses(node)` + +Get fuses gets the raw fuses for a current node and also checks the parent hierarchy for you. The raw fuses it returns will be a `uint96` and you will have to decode this yourself. If you just need to check a fuse has been burned, you can call `allFusesBurned` as it will use less gas. + +The parent hierarchy check will start from the root and check 4 things: + +1. Is the registrant of the name the wrapper? +2. Is the controller of the name the wrapper? +3. Are the fuses burnt for replacing a subdomain? +4. Is the name expired? + +This is represented by `enum NameSafety {Safe, Registrant, Controller, Fuses, Expired}` + +Lastly it will return to you the first node up the hierarchy that is vulnerable. After it finds a vulnerable node, it will break from checking and so it needs to be rechecked for children down the hierarchy once the vulnerable node has been made safe. + +## Installation and setup + +```bash +npm install +``` + +## Testing + +```bash +npm run test +``` + +Any contract with `2` at the end, is referring to the contract being called by `account2`, rather than `account1`. This is for tests that require authorising another user. + +## Deploying test contracts into Rinkeby + +### Create .env + +``` +cp .env.org .env +``` + +### Set credentials + +``` +PRIVATE_KEY= +ETHERSCAN_API_KEY= +INFURA_API_KEY= +``` + +Please leave the following fields as blank + +``` +SEED_NAME= +METADATA_ADDRESS= +WRAPPER_ADDRESS= +RESOLVER_ADDRESS= +``` + +### Run deploy script + +`yarn deploy:rinkeby` will deploy to rinkeby and verify its source code + +NOTE: If you want to override the default metadata url, set `METADATA_HOST=` to `.env` + +``` +$yarn deploy:rinkeby +yarn run v1.22.10 +$ npx hardhat run --network rinkeby scripts/deploy.js +Deploying contracts to rinkeby with the account:0x97bA55F61345665cF08c4233b9D6E61051A43B18 +Account balance: 1934772596667918724 true +{ + registryAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + registrarAddress: '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85' +} +Setting metadata service to https://ens-metadata-service.appspot.com/name/0x{id} +Metadata address: 0x08f2D8D8240fC70FD777358b0c63e539714DD473 +Wrapper address: 0x88ce50eFeA21996B20838d5E71994191562758f9 +Resolver address: 0x784b7B9BA0Fc04b90187c06C0C7efC51AeA06aFB +wait for 5 sec until bytecodes are uploaded into etherscan +verify 0x08f2D8D8240fC70FD777358b0c63e539714DD473 with arguments https://ens-metadata-service.appspot.com/name/0x{id} +verify 0x88ce50eFeA21996B20838d5E71994191562758f9 with arguments 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e,0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85,0x08f2D8D8240fC70FD777358b0c63e539714DD473 +verify 0x784b7B9BA0Fc04b90187c06C0C7efC51AeA06aFB with arguments 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e,0x88ce50eFeA21996B20838d5E71994191562758f9 +``` + +After running the script it sets addresses to `.env`. If you want to redeploy some of contracts, remove the contract address from `.env` and runs the script again. + +## Seeding test data into Rinkeby + +1. Register a name using the account you used to deploy the contract +2. Set the label (`matoken` for `matoken.eth`) to `SEED_NAME=` on `.env` +3. Run `yarn seed:rinkeby` + +``` +~/.../ens/name-wrapper (seed)$yarn seed:rinkeby +yarn run v1.22.10 +$ npx hardhat run --network rinkeby scripts/seed.js +Account balance: 1925134991223891632 +{ + registryAddress: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e', + registrarAddress: '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85', + wrapperAddress: '0x88ce50eFeA21996B20838d5E71994191562758f9', + resolverAddress: '0x784b7B9BA0Fc04b90187c06C0C7efC51AeA06aFB', + firstAddress: '0x97bA55F61345665cF08c4233b9D6E61051A43B18', + name: 'wrappertest4' +} +Wrapped NFT for wrappertest4.eth is available at https://testnets.opensea.io/assets/0x88ce50eFeA21996B20838d5E71994191562758f9/42538507198368349158588132934279877358592939677496199760991827793914037599925 +Wrapped NFT for sub2.wrappertest4.eth is available at https://testnets.opensea.io/assets/0x88ce50eFeA21996B20838d5E71994191562758f9/22588238952906792220944282072078294622689934598844133294480594786812258911617 +``` \ No newline at end of file diff --git a/contracts/wrapper/StaticMetadataService.sol b/contracts/wrapper/StaticMetadataService.sol new file mode 100644 index 00000000..6a2a3563 --- /dev/null +++ b/contracts/wrapper/StaticMetadataService.sol @@ -0,0 +1,14 @@ +//SPDX-License-Identifier: MIT +pragma solidity >=0.8.4; + +contract StaticMetadataService { + string private _uri; + + constructor(string memory _metaDataUri) { + _uri = _metaDataUri; + } + + function uri(uint256) public view returns (string memory) { + return _uri; + } +} diff --git a/contracts/wrapper/mocks/ERC1155ReceiverMock.sol b/contracts/wrapper/mocks/ERC1155ReceiverMock.sol new file mode 100644 index 00000000..e4586520 --- /dev/null +++ b/contracts/wrapper/mocks/ERC1155ReceiverMock.sol @@ -0,0 +1,64 @@ +// Based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/test/token/ERC1155/ERC1155.behaviour.js +// Copyright (c) 2016-2020 zOS Global Limited + +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; + +contract ERC1155ReceiverMock is IERC1155Receiver, ERC165 { + bytes4 private _recRetval; + bool private _recReverts; + bytes4 private _batRetval; + bool private _batReverts; + + event Received(address operator, address from, uint256 id, uint256 value, bytes data); + event BatchReceived(address operator, address from, uint256[] ids, uint256[] values, bytes data); + + constructor ( + bytes4 recRetval, + bool recReverts, + bytes4 batRetval, + bool batReverts + ) + { + _recRetval = recRetval; + _recReverts = recReverts; + _batRetval = batRetval; + _batReverts = batReverts; + } + + function onERC1155Received( + address operator, + address from, + uint256 id, + uint256 value, + bytes calldata data + ) + external + override + returns(bytes4) + { + require(!_recReverts, "ERC1155ReceiverMock: reverting on receive"); + emit Received(operator, from, id, value, data); + return _recRetval; + } + + function onERC1155BatchReceived( + address operator, + address from, + uint256[] calldata ids, + uint256[] calldata values, + bytes calldata data + ) + external + override + returns(bytes4) + { + require(!_batReverts, "ERC1155ReceiverMock: reverting on batch receive"); + emit BatchReceived(operator, from, ids, values, data); + return _batRetval; + } +} \ No newline at end of file diff --git a/contracts/wrapper/test/NameGriefer.sol b/contracts/wrapper/test/NameGriefer.sol new file mode 100644 index 00000000..485f730d --- /dev/null +++ b/contracts/wrapper/test/NameGriefer.sol @@ -0,0 +1,49 @@ +pragma solidity ^0.8.4; + +import "../BytesUtil.sol"; +import "../INameWrapper.sol"; +import "../../registry/ENS.sol"; +import "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; + +contract NameGriefer is IERC1155Receiver { + using BytesUtils for *; + + ENS public immutable ens; + INameWrapper public immutable wrapper; + + constructor(INameWrapper _wrapper) { + wrapper = _wrapper; + ENS _ens = _wrapper.ens(); + ens = _ens; + _ens.setApprovalForAll(address(_wrapper), true); + } + + function destroy(bytes calldata name) public { + wrapper.wrap(name, address(this), CAN_DO_EVERYTHING, address(0)); + } + + function onERC1155Received(address operator, address from, uint256 id, uint256, bytes calldata) external override returns(bytes4) { + require(operator == address(this), "Operator must be us"); + require(from == address(0), "Token must be new"); + + // Unwrap the name + bytes memory name = wrapper.names(bytes32(id)); + (bytes32 labelhash, uint256 offset) = name.readLabel(0); + bytes32 parentNode = name.namehash(offset); + wrapper.unwrap(parentNode, labelhash, address(this)); + + // Here we can do something with the name before it's permanently burned, like + // set the resolver or create subdomains. + + return NameGriefer.onERC1155Received.selector; + } + + function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata) external override returns(bytes4) { + return NameGriefer.onERC1155BatchReceived.selector; + } + + function supportsInterface(bytes4 interfaceID) external override view returns (bool) { + return interfaceID == 0x01ffc9a7 || // ERC-165 support (i.e. `bytes4(keccak256('supportsInterface(bytes4)'))`). + interfaceID == 0x4e2312e0; // ERC-1155 `ERC1155TokenReceiver` support (i.e. `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)")) ^ bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`). + } +} \ No newline at end of file diff --git a/contracts/wrapper/test/TestBytesUtils.sol b/contracts/wrapper/test/TestBytesUtils.sol new file mode 100644 index 00000000..c07f218e --- /dev/null +++ b/contracts/wrapper/test/TestBytesUtils.sol @@ -0,0 +1,13 @@ +import "../BytesUtil.sol"; + +contract TestBytesUtils { + using BytesUtils for *; + + function readLabel(bytes calldata name, uint offset) public pure returns(bytes32, uint) { + return name.readLabel(offset); + } + + function namehash(bytes calldata name, uint offset) public pure returns(bytes32) { + return name.namehash(offset); + } +} diff --git a/hardhat.config.js b/hardhat.config.js index 72cfc476..6b0af4f8 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -71,6 +71,12 @@ module.exports = { compilers: [ { version: "0.8.4", + settings: { + optimizer: { + enabled: true, + runs: 10000, + } + } } ] }, diff --git a/package.json b/package.json index 2550bb7a..43d8f840 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "elliptic-solidity": "^1.0.0", "ethereum-waffle": "^3.3.0", "ethers": "^5.1.4", - "hardhat": "^2.2.1", + "hardhat": "^2.6.5", "hardhat-abi-exporter": "^2.2.1", "hardhat-deploy": "^0.8.11", "hardhat-deploy-ethers": "^0.3.0-beta.10", @@ -44,8 +44,7 @@ "@ensdomains/buffer": "^0.0.13", "@ensdomains/solsha1": "0.0.3", "@openzeppelin/contracts": "^4.1.0", - "dns-packet": "^5.3.0", - "name-wrapper": "^1.0.0" + "dns-packet": "^5.3.0" }, "directories": { "test": "test" diff --git a/scripts/wrapper/deploy.js b/scripts/wrapper/deploy.js new file mode 100644 index 00000000..7b9feb3c --- /dev/null +++ b/scripts/wrapper/deploy.js @@ -0,0 +1,104 @@ +const fs = require('fs') +const envfile = require('envfile') +const ensAppSourcePath = '../ens-app/cypress.env.json' +const { network, run } = require("hardhat") +const parsedFile = envfile.parse(fs.readFileSync('./.env')) + +async function verify(address, constructorArguments){ + console.log(`verify ${address} with arguments ${constructorArguments.join(',')}`) + await run("verify:verify", { + address, + constructorArguments + }) +} + +async function main() { + let registryAddress, registrarAddress, metadataAddress + ,wrapperAddress,resolverAddress, metadataHost + ,wrapperArguments, resolverArguments, metadataArguments + ({ + METADATA_ADDRESS:metadataAddress, + WRAPPER_ADDRESS:wrapperAddress, + RESOLVER_ADDRESS:resolverAddress, + METADATA_HOST:metadataHost = 'ens-metadata-service.appspot.com' + } = parsedFile) + if(network.name === 'localhost'){ + const addresses = JSON.parse(fs.readFileSync(ensAppSourcePath, 'utf8')) + registryAddress = addresses.ensAddress + registrarAddress = addresses.baseRegistrarAddress + metadataUrl = 'http://localhost:8080/name/0x{id}' + if(!(addresses.ensAddress && addresses.baseRegistrarAddress)){ + throw('please run yarn preTest on ../ens-app') + } + }else{ + // Regisry and registrar addresses are same across all networks + registryAddress = '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e' + registrarAddress = '0x57f1887a8BF19b14fC0dF6Fd9B2acc9Af147eA85' + metadataUrl = `https://${metadataHost}/name/0x{id}` + } + const [deployer] = await ethers.getSigners() + + console.log(`Deploying contracts to ${network.name} with the account:${deployer.address}`) + const balance = (await deployer.getBalance()).toString() + console.log("Account balance:", balance, balance > 0) + if(balance === 0){ + throw(`Not enough eth`) + } + + const NameWrapper = await ethers.getContractFactory("NameWrapper") + console.log({ + registryAddress, registrarAddress + }) + const StaticMetadataService = await ethers.getContractFactory("StaticMetadataService") + console.log(`Setting metadata service to ${metadataUrl}`) + if(metadataAddress){ + console.log(`Metadata address ${metadataAddress} is already set.`) + }else{ + metadataArguments = [metadataUrl] + const metadata = await StaticMetadataService.deploy(...metadataArguments) + await metadata.deployTransaction.wait() + console.log("Metadata address:",metadata.address) + metadataAddress = metadata.address + } + if(wrapperAddress){ + console.log(`Wrapper address ${wrapperAddress} is already set.`) + }else{ + wrapperArguments = [registryAddress, registrarAddress, metadataAddress] + const wrapper = await NameWrapper.deploy(registryAddress, registrarAddress, metadataAddress) + await wrapper.deployTransaction.wait() + console.log("Wrapper address:", wrapper.address) + wrapperAddress = wrapper.address + } + if(resolverAddress){ + console.log(`Resolver address ${resolverAddress} is already set.`) + }else{ + const PublicResolver = await ethers.getContractFactory("PublicResolver") + resolverArguments = [registryAddress, wrapperAddress] + const resolver = await PublicResolver.deploy(...resolverArguments) + await resolver.deployTransaction.wait() + console.log("Resolver address:", resolver.address) + resolverAddress = resolver.address + } + + if(network.name !== 'localhost'){ + console.log('wait for 5 sec until bytecodes are uploaded into etherscan') + await new Promise(resolve => setTimeout(resolve, 5000)); + if(metadataArguments) verify(metadataAddress, metadataArguments) + if(wrapperArguments) verify(wrapperAddress, wrapperArguments) + if(resolverArguments) verify(resolverAddress, resolverArguments) + } + + parsedFile.REGISTRY_ADDRESS = registryAddress + parsedFile.REGISTRAR_ADDRESS = registrarAddress + parsedFile.METADATA_ADDRESS = metadataAddress + parsedFile.WRAPPER_ADDRESS = wrapperAddress + parsedFile.RESOLVER_ADDRESS = resolverAddress + fs.writeFileSync('./.env', envfile.stringify(parsedFile)) +} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error) + process.exit(1) + }) diff --git a/scripts/wrapper/seed.js b/scripts/wrapper/seed.js new file mode 100644 index 00000000..8a5f31d4 --- /dev/null +++ b/scripts/wrapper/seed.js @@ -0,0 +1,67 @@ +const fs = require('fs') +const n = require('eth-ens-namehash') +const envfile = require('envfile') +const sourcePath = './.env' +const packet = require('dns-packet') +const { utils, BigNumber: BN } = ethers +const { use, expect } = require('chai') +const { solidity } = require('ethereum-waffle') +const parsedFile = envfile.parse(fs.readFileSync('./.env')) + +use(solidity) + +const namehash = n.hash +const labelhash = (label) => utils.keccak256(utils.toUtf8Bytes(label)) + +function getOpenSeaUrl(contract, namehashedname){ + const tokenId = ethers.BigNumber.from(namehashedname).toString() + return `https://testnets.opensea.io/assets/${contract}/${tokenId}` +} + +async function main(a) { + const [deployer] = await ethers.getSigners() + const CAN_DO_EVERYTHING = 0 + const CANNOT_UNWRAP = 1 + const CANNOT_SET_RESOLVER = 8 + const firstAddress = deployer.address + const { + REGISTRY_ADDRESS:registryAddress, + REGISTRAR_ADDRESS:registrarAddress, + WRAPPER_ADDRESS:wrapperAddress, + RESOLVER_ADDRESS:resolverAddress, + SEED_NAME: name = 'wrappertest' + } = parsedFile + if(!(registryAddress && registrarAddress && wrapperAddress && resolverAddress)){ + throw('Set addresses on .env') + } + console.log("Account balance:", (await deployer.getBalance()).toString()) + console.log({ + registryAddress,registrarAddress, wrapperAddress, resolverAddress,firstAddress, name + }) + const EnsRegistry = await (await ethers.getContractFactory("ENSRegistry")).attach(registryAddress) + const BaseRegistrar = await (await ethers.getContractFactory("BaseRegistrarImplementation")).attach(registrarAddress) + const NameWrapper = await (await ethers.getContractFactory("NameWrapper")).attach(wrapperAddress) + const Resolver = await (await ethers.getContractFactory("PublicResolver")).attach(resolverAddress) + const domain = `${name}.eth` + const namehashedname = namehash(domain) + + await (await BaseRegistrar.setApprovalForAll(NameWrapper.address, true)).wait() + await (await EnsRegistry.setApprovalForAll(NameWrapper.address, true)).wait() + await (await NameWrapper.wrapETH2LD(name, firstAddress, CAN_DO_EVERYTHING)).wait() + console.log(`Wrapped NFT for ${domain} is available at ${getOpenSeaUrl(NameWrapper.address, namehashedname)}`) + await (await NameWrapper.setSubnodeOwnerAndWrap(namehash(`${name}.eth`), 'sub1', firstAddress, CAN_DO_EVERYTHING)).wait() + await (await NameWrapper.setSubnodeOwnerAndWrap(namehash(`${name}.eth`), 'sub2', firstAddress, CAN_DO_EVERYTHING)).wait() + await (await NameWrapper.setResolver(namehash(`sub2.${name}.eth`), resolverAddress)).wait() + await (await Resolver.setText(namehash(`sub2.${name}.eth`), 'domains.ens.nft.image', 'https://i.imgur.com/JcZESMp.png')).wait() + console.log(`Wrapped NFT for sub2.${name}.eth is available at ${getOpenSeaUrl(NameWrapper.address, namehash(`sub2.${name}.eth`))}`) + await (await NameWrapper.burnFuses(namehash(`sub2.${name}.eth`),CANNOT_UNWRAP)).wait() + await (await NameWrapper.burnFuses(namehash(`sub2.${name}.eth`),CANNOT_SET_RESOLVER)).wait() + await (await NameWrapper.unwrap(namehash(`${name}.eth`), labelhash('sub1'), firstAddress)).wait() + } + + main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error) + process.exit(1) + }) diff --git a/test/dnssec-oracle/TestDNSSEC.js b/test/dnssec-oracle/TestDNSSEC.js index 7526c7f1..867d99f2 100644 --- a/test/dnssec-oracle/TestDNSSEC.js +++ b/test/dnssec-oracle/TestDNSSEC.js @@ -101,7 +101,7 @@ async function verifyFailedSubmission(instance, data, sig, proof) { // Assert ganache revert exception assert.equal( error.message, - 'Transaction reverted without a reason' + 'Transaction reverted without a reason string' ); } diff --git a/test/dnssec-oracle/TestSolidityTests.js b/test/dnssec-oracle/TestSolidityTests.js index 5a1ab32a..32ac8938 100644 --- a/test/dnssec-oracle/TestSolidityTests.js +++ b/test/dnssec-oracle/TestSolidityTests.js @@ -1,4 +1,4 @@ -const TestBytesUtils = artifacts.require("./test/dnssec-oracle/TestBytesUtils"); +const TestBytesUtils = artifacts.require("test/dnssec-oracle/TestBytesUtils.sol:TestBytesUtils"); const TestRRUtils = artifacts.require("./test/dnssec-oracle/TestRRUtils"); [TestBytesUtils, TestRRUtils].forEach(function(testsuite) { diff --git a/test/ethregistrar/TestEthRegistrarController.js b/test/ethregistrar/TestEthRegistrarController.js index 4c585a23..5b2f13da 100644 --- a/test/ethregistrar/TestEthRegistrarController.js +++ b/test/ethregistrar/TestEthRegistrarController.js @@ -86,7 +86,7 @@ contract('ETHRegistrarController', function (accounts) { await evm.advanceTime((await controller.minCommitmentAge()).toNumber()); var balanceBefore = await web3.eth.getBalance(controller.address); - var tx = await controller.register("newname", registrantAccount, 28 * DAYS, secret, {value: 28 * DAYS + 1, gasPrice: 0}); + var tx = await controller.register("newname", registrantAccount, 28 * DAYS, secret, {value: 28 * DAYS + 1}); assert.equal(tx.logs.length, 1); assert.equal(tx.logs[0].event, "NameRegistered"); assert.equal(tx.logs[0].args.name, "newname"); @@ -105,7 +105,7 @@ contract('ETHRegistrarController', function (accounts) { await evm.advanceTime((await controller.minCommitmentAge()).toNumber()); var balanceBefore = await web3.eth.getBalance(controller.address); - var tx = await controller.registerWithConfig("newconfigname", registrantAccount, 28 * DAYS, secret, resolver.address, registrantAccount, {value: 28 * DAYS + 1, gasPrice: 0}); + var tx = await controller.registerWithConfig("newconfigname", registrantAccount, 28 * DAYS, secret, resolver.address, registrantAccount, {value: 28 * DAYS + 1}); assert.equal(tx.logs.length, 1); assert.equal(tx.logs[0].event, "NameRegistered"); assert.equal(tx.logs[0].args.name, "newconfigname"); @@ -129,7 +129,7 @@ contract('ETHRegistrarController', function (accounts) { await evm.advanceTime((await controller.minCommitmentAge()).toNumber()); var balanceBefore = await web3.eth.getBalance(controller.address); - var tx = await controller.registerWithConfig("newconfigname2", registrantAccount, 28 * DAYS, secret, resolver.address, NULL_ADDRESS, {value: 28 * DAYS + 1, gasPrice: 0}); + var tx = await controller.registerWithConfig("newconfigname2", registrantAccount, 28 * DAYS, secret, resolver.address, NULL_ADDRESS, {value: 28 * DAYS + 1}); assert.equal(tx.logs.length, 1); assert.equal(tx.logs[0].event, "NameRegistered"); assert.equal(tx.logs[0].args.name, "newconfigname2"); @@ -146,7 +146,7 @@ contract('ETHRegistrarController', function (accounts) { await evm.advanceTime((await controller.minCommitmentAge()).toNumber()); var balanceBefore = await web3.eth.getBalance(controller.address); - await exceptions.expectFailure(controller.register("newname2", registrantAccount, 28 * DAYS, secret, {value: 28 * DAYS, gasPrice: 0})); + await exceptions.expectFailure(controller.register("newname2", registrantAccount, 28 * DAYS, secret, {value: 28 * DAYS})); }); it('should reject duplicate registrations', async () => { @@ -154,7 +154,7 @@ contract('ETHRegistrarController', function (accounts) { await evm.advanceTime((await controller.minCommitmentAge()).toNumber()); var balanceBefore = await web3.eth.getBalance(controller.address); - await exceptions.expectFailure(controller.register("newname", registrantAccount, 28 * DAYS, secret, {value: 28 * DAYS, gasPrice: 0})); + await exceptions.expectFailure(controller.register("newname", registrantAccount, 28 * DAYS, secret, {value: 28 * DAYS})); }); it('should reject for expired commitments', async () => { @@ -162,7 +162,7 @@ contract('ETHRegistrarController', function (accounts) { await evm.advanceTime((await controller.maxCommitmentAge()).toNumber() + 1); var balanceBefore = await web3.eth.getBalance(controller.address); - await exceptions.expectFailure(controller.register("newname2", registrantAccount, 28 * DAYS, secret, {value: 28 * DAYS, gasPrice: 0})); + await exceptions.expectFailure(controller.register("newname2", registrantAccount, 28 * DAYS, secret, {value: 28 * DAYS})); }); it('should allow anyone to renew a name', async () => { @@ -179,7 +179,7 @@ contract('ETHRegistrarController', function (accounts) { }); it('should allow the registrar owner to withdraw funds', async () => { - await controller.withdraw({gasPrice: 0, from: ownerAccount}); + await controller.withdraw({from: ownerAccount}); assert.equal(await web3.eth.getBalance(controller.address), 0); }); }); diff --git a/test/wrapper/BytesUtils.js b/test/wrapper/BytesUtils.js new file mode 100644 index 00000000..3365acd0 --- /dev/null +++ b/test/wrapper/BytesUtils.js @@ -0,0 +1,69 @@ +const packet = require('dns-packet') +const { expect } = require('chai') +const { ethers } = require('hardhat') +const { utils, BigNumber: BN } = ethers +const namehash = require('eth-ens-namehash').hash + +const NULL_HASH = + '0x0000000000000000000000000000000000000000000000000000000000000000' + +function encodeName(name) { + return '0x' + packet.name.encode(name).toString('hex') +} + +const labelhash = (label) => utils.keccak256(utils.toUtf8Bytes(label)) + +describe('BytesUtils', () => { + let BytesUtils + + before(async () => { + const BytesUtilsFactory = await ethers.getContractFactory("contracts/wrapper/test/TestBytesUtils.sol:TestBytesUtils") + BytesUtils = await BytesUtilsFactory.deploy() + }) + + describe('readLabel()', () => { + it('Reads the first label from a name', async () => { + let [hash, offset] = await BytesUtils.readLabel(encodeName('test.tld'), 0) + expect(hash).to.equal(labelhash('test')) + expect(offset.toNumber()).to.equal(5) + }) + + it('Reads subsequent labels from a name', async () => { + let [hash, offset] = await BytesUtils.readLabel(encodeName('test.tld'), 5) + expect(hash).to.equal(labelhash('tld')) + expect(offset.toNumber()).to.equal(9) + }) + + it('Reads the terminator from a name', async () => { + let [hash, offset] = await BytesUtils.readLabel(encodeName('test.tld'), 9) + expect(hash).to.equal(NULL_HASH) + expect(offset.toNumber()).to.equal(10) + }) + + it('Reverts when given an empty string', async () => { + await expect(BytesUtils.readLabel('0x', 0)).to.be.revertedWith('readLabel: Index out of bounds') + }) + + it('Reverts when given an index after the end of the string', async () => { + await expect(BytesUtils.readLabel(encodeName('test.tld'), 10)).to.be.revertedWith('readLabel: Index out of bounds') + }) + }) + + describe('namehash()', () => { + it('Hashes the empty name to 0', async () => { + expect(await BytesUtils.namehash(encodeName('.'), 0)).to.equal(namehash('')) + }) + + it('Hashes .eth correctly', async () => { + expect(await BytesUtils.namehash(encodeName('eth'), 0)).to.equal(namehash('eth')) + }) + + it('Hashes a 2LD correctly', async () => { + expect(await BytesUtils.namehash(encodeName('test.tld'), 0)).to.equal(namehash('test.tld')) + }) + + it('Hashes partial names correctly', async () => { + expect(await BytesUtils.namehash(encodeName('test.tld'), 5)).to.equal(namehash('tld')) + }) + }) +}) \ No newline at end of file diff --git a/test/wrapper/ERC1155.behaviour.js b/test/wrapper/ERC1155.behaviour.js new file mode 100644 index 00000000..35f12e47 --- /dev/null +++ b/test/wrapper/ERC1155.behaviour.js @@ -0,0 +1,732 @@ +// Based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/test/token/ERC1155/ERC1155.behaviour.js +// Copyright (c) 2016-2020 zOS Global Limited +// Portions Copyright (c) 2021 Nick Johnson + +const namehash = require('eth-ens-namehash').hash; +const { BN, constants, expectEvent } = require('@openzeppelin/test-helpers'); +const { ZERO_ADDRESS } = constants; +const { ethers } = require('hardhat') + +const { expect } = require('chai'); + +const { shouldSupportInterfaces } = require('./SupportsInterface.behaviour'); + +function shouldBehaveLikeERC1155(signers, [firstTokenId, secondTokenId, unknownTokenId], mint) { + let token, minter, firstTokenHolder, secondTokenHolder, multiTokenHolder, recipient, proxy; + let firstTokenHolderAddress, secondTokenHolderAddress, multiTokenHolderAddress, proxyAddress; + const firstAmount = 1; + const secondAmount = 1; + let ERC1155ReceiverMock; + + const RECEIVER_SINGLE_MAGIC_VALUE = '0xf23a6e61'; + const RECEIVER_BATCH_MAGIC_VALUE = '0xbc197c81'; + + before(async () => { + ERC1155ReceiverMock = await ethers.getContractFactory('ERC1155ReceiverMock'); + [token, [minter, firstTokenHolder, secondTokenHolder, multiTokenHolder, recipient, proxy]] = signers(); + [firstTokenHolderAddress, secondTokenHolderAddress, multiTokenHolderAddress, recipientAddress, proxyAddress] = await Promise.all([firstTokenHolder, secondTokenHolder, multiTokenHolder, recipient, proxy].map((s) => s.getAddress())); + }); + + describe('like an ERC1155', function () { + describe('balanceOf', function () { + it('reverts when queried about the zero address', async function () { + await expect( + token.balanceOf(ZERO_ADDRESS, firstTokenId)).to.be.revertedWith( + 'ERC1155: balance query for the zero address', + ); + }); + + context('when accounts don\'t own tokens', function () { + it('returns zero for given addresses', async function () { + expect(await token.balanceOf( + firstTokenHolderAddress, + firstTokenId, + )).to.be.bignumber.equal('0'); + + expect(await token.balanceOf( + secondTokenHolderAddress, + secondTokenId, + )).to.be.bignumber.equal('0'); + + expect(await token.balanceOf( + firstTokenHolderAddress, + unknownTokenId, + )).to.be.bignumber.equal('0'); + }); + }); + + context('when accounts own some tokens', function () { + beforeEach(async function () { + await mint(firstTokenHolderAddress, secondTokenHolderAddress); + }); + + it('returns the amount of tokens owned by the given addresses', async function () { + expect(await token.balanceOf( + firstTokenHolderAddress, + firstTokenId, + )).to.be.bignumber.equal(firstAmount); + + expect(await token.balanceOf( + secondTokenHolderAddress, + secondTokenId, + )).to.be.bignumber.equal(secondAmount); + + expect(await token.balanceOf( + firstTokenHolderAddress, + unknownTokenId, + )).to.be.bignumber.equal('0'); + }); + }); + }); + + describe('balanceOfBatch', function () { + it('reverts when input arrays don\'t match up', async function () { + await expect( + token.balanceOfBatch( + [firstTokenHolderAddress, secondTokenHolderAddress, firstTokenHolderAddress, secondTokenHolderAddress], + [firstTokenId, secondTokenId, unknownTokenId], + )).to.be.revertedWith( + 'ERC1155: accounts and ids length mismatch', + ); + + await expect( + token.balanceOfBatch( + [firstTokenHolderAddress, secondTokenHolderAddress], + [firstTokenId, secondTokenId, unknownTokenId], + )).to.be.revertedWith( + 'ERC1155: accounts and ids length mismatch', + ); + }); + + it('reverts when one of the addresses is the zero address', async function () { + await expect( + token.balanceOfBatch( + [firstTokenHolderAddress, secondTokenHolderAddress, ZERO_ADDRESS], + [firstTokenId, secondTokenId, unknownTokenId], + )).to.be.revertedWith( + 'ERC1155: balance query for the zero address', + ); + }); + + context('when accounts don\'t own tokens', function () { + it('returns zeros for each account', async function () { + const result = await token.balanceOfBatch( + [firstTokenHolderAddress, secondTokenHolderAddress, firstTokenHolderAddress], + [firstTokenId, secondTokenId, unknownTokenId], + ); + expect(result).to.be.an('array'); + expect(result[0]).to.be.a.bignumber.equal('0'); + expect(result[1]).to.be.a.bignumber.equal('0'); + expect(result[2]).to.be.a.bignumber.equal('0'); + }); + }); + + context('when accounts own some tokens', function () { + beforeEach(async function () { + await mint(firstTokenHolderAddress, secondTokenHolderAddress); + }); + + it('returns amounts owned by each account in order passed', async function () { + const result = await token.balanceOfBatch( + [secondTokenHolderAddress, firstTokenHolderAddress, firstTokenHolderAddress], + [secondTokenId, firstTokenId, unknownTokenId], + ); + expect(result).to.be.an('array'); + expect(result[0]).to.be.a.bignumber.equal(secondAmount); + expect(result[1]).to.be.a.bignumber.equal(firstAmount); + expect(result[2]).to.be.a.bignumber.equal('0'); + }); + + it('returns multiple times the balance of the same address when asked', async function () { + const result = await token.balanceOfBatch( + [firstTokenHolderAddress, secondTokenHolderAddress, firstTokenHolderAddress], + [firstTokenId, secondTokenId, firstTokenId], + ); + expect(result).to.be.an('array'); + expect(result[0]).to.be.a.bignumber.equal(result[2]); + expect(result[0]).to.be.a.bignumber.equal(firstAmount); + expect(result[1]).to.be.a.bignumber.equal(secondAmount); + expect(result[2]).to.be.a.bignumber.equal(firstAmount); + }); + }); + }); + + describe('setApprovalForAll', function () { + let tx; + beforeEach(async function () { + tx = await token.connect(multiTokenHolder).setApprovalForAll(proxyAddress, true); + }); + + it('sets approval status which can be queried via isApprovedForAll', async function () { + expect(await token.isApprovedForAll(multiTokenHolderAddress, proxyAddress)).to.be.equal(true); + }); + + it('emits an ApprovalForAll log', function () { + expect(tx).to.emit(token, 'ApprovalForAll').withArgs(multiTokenHolderAddress, proxyAddress, true ); + }); + + it('can unset approval for an operator', async function () { + await token.connect(multiTokenHolder).setApprovalForAll(proxyAddress, false); + expect(await token.isApprovedForAll(multiTokenHolderAddress, proxyAddress)).to.be.equal(false); + }); + + it('reverts if attempting to approve self as an operator', async function () { + await expect( + token.connect(multiTokenHolder).setApprovalForAll(multiTokenHolderAddress, true) + ).to.be.revertedWith( + 'ERC1155: setting approval status for self', + ); + }); + }); + + describe('safeTransferFrom', function () { + beforeEach(async function () { + await mint(multiTokenHolderAddress, multiTokenHolderAddress); + }); + + it('reverts when transferring more than balance', async function () { + await expect( + token.connect(multiTokenHolder).safeTransferFrom( + multiTokenHolderAddress, + recipientAddress, + firstTokenId, + firstAmount + 1, + '0x', + )).to.be.revertedWith( + 'ERC1155: insufficient balance for transfer', + ); + }); + + it('reverts when transferring to zero address', async function () { + await expect( + token.connect(multiTokenHolder).safeTransferFrom( + multiTokenHolderAddress, + ZERO_ADDRESS, + firstTokenId, + firstAmount, + '0x', + )).to.be.revertedWith( + 'ERC1155: transfer to the zero address', + ); + }); + + function transferWasSuccessful (vars) { + let operator, from, id, value; + + before(() => { + ({ operator, from, id, value } = vars()); + }); + + it('debits transferred balance from sender', async function () { + const newBalance = await token.balanceOf(from, id); + expect(newBalance).to.be.a.bignumber.equal('0'); + }); + + it('credits transferred balance to receiver', async function () { + const newBalance = await token.balanceOf(this.toWhom, id); + expect(newBalance).to.be.a.bignumber.equal(value); + }); + + it('emits a TransferSingle log', async function () { + await expect(this.transfer).to.emit(token, 'TransferSingle').withArgs( + operator, + from, + this.toWhom, + id, + value, + ); + }); + } + + context('when called by the multiTokenHolder', async function () { + beforeEach(async function () { + this.toWhom = recipientAddress; + (this.transfer = + await token.connect(multiTokenHolder).safeTransferFrom(multiTokenHolderAddress, recipientAddress, firstTokenId, firstAmount, '0x')); + }); + + transferWasSuccessful.call(this, () => ({ + operator: multiTokenHolderAddress, + from: multiTokenHolderAddress, + id: firstTokenId, + value: firstAmount, + })); + + it('preserves existing balances which are not transferred by multiTokenHolder', async function () { + const balance1 = await token.balanceOf(multiTokenHolderAddress, secondTokenId); + expect(balance1).to.be.a.bignumber.equal(secondAmount); + + const balance2 = await token.balanceOf(recipientAddress, secondTokenId); + expect(balance2).to.be.a.bignumber.equal('0'); + }); + }); + + context('when called by an operator on behalf of the multiTokenHolder', function () { + context('when operator is not approved by multiTokenHolder', function () { + beforeEach(async function () { + await token.connect(multiTokenHolder).setApprovalForAll(proxyAddress, false); + }); + + it('reverts', async function () { + await expect( + token.connect(proxy).safeTransferFrom(multiTokenHolderAddress, recipientAddress, firstTokenId, firstAmount, '0x') + ).to.be.revertedWith( + 'ERC1155: caller is not owner nor approved', + ); + }); + }); + + context('when operator is approved by multiTokenHolder', function () { + beforeEach(async function () { + this.toWhom = recipientAddress; + await token.connect(multiTokenHolder).setApprovalForAll(proxyAddress, true); + (this.transfer = + await token.connect(proxy).safeTransferFrom(multiTokenHolderAddress, recipientAddress, firstTokenId, firstAmount, '0x')); + }); + + transferWasSuccessful.call(this, () => ({ + operator: proxyAddress, + from: multiTokenHolderAddress, + id: firstTokenId, + value: firstAmount, + })); + + it('preserves operator\'s balances not involved in the transfer', async function () { + const balance1 = await token.balanceOf(proxyAddress, firstTokenId); + expect(balance1).to.be.a.bignumber.equal('0'); + + const balance2 = await token.balanceOf(proxyAddress, secondTokenId); + expect(balance2).to.be.a.bignumber.equal('0'); + }); + }); + }); + + context('when sending to a valid receiver', function () { + beforeEach(async function () { + this.receiver = await ERC1155ReceiverMock.deploy( + RECEIVER_SINGLE_MAGIC_VALUE, false, + RECEIVER_BATCH_MAGIC_VALUE, false, + ); + }); + + context('without data', function () { + beforeEach(async function () { + this.toWhom = this.receiver.address; + this.transfer = await token.connect(multiTokenHolder).safeTransferFrom( + multiTokenHolderAddress, + this.receiver.address, + firstTokenId, + firstAmount, + '0x' + ); + }); + + transferWasSuccessful.call(this, () => ({ + operator: multiTokenHolderAddress, + from: multiTokenHolderAddress, + id: firstTokenId, + value: firstAmount, + })); + + it('calls onERC1155Received', async function () { + await expect(this.transfer).to.emit(this.receiver, 'Received').withArgs( + multiTokenHolderAddress, + multiTokenHolderAddress, + firstTokenId, + firstAmount, + '0x' + ); + }); + }); + + context('with data', function () { + const data = '0xf00dd00d'; + beforeEach(async function () { + this.toWhom = this.receiver.address; + this.transfer = await token.connect(multiTokenHolder).safeTransferFrom( + multiTokenHolderAddress, + this.receiver.address, + firstTokenId, + firstAmount, + data + ); + }); + + transferWasSuccessful.call(this, () => ({ + operator: multiTokenHolderAddress, + from: multiTokenHolderAddress, + id: firstTokenId, + value: firstAmount, + })); + + it('calls onERC1155Received', async function () { + await expect(this.transfer).to.emit(this.receiver, 'Received').withArgs( + multiTokenHolderAddress, + multiTokenHolderAddress, + firstTokenId, + firstAmount, + data + ); + }); + }); + }); + + context('to a receiver contract returning unexpected value', function () { + beforeEach(async function () { + this.receiver = await ERC1155ReceiverMock.deploy( + '0x00c0ffee', false, + RECEIVER_BATCH_MAGIC_VALUE, false, + ); + }); + + it('reverts', async function () { + await expect( + token.connect(multiTokenHolder).safeTransferFrom(multiTokenHolderAddress, this.receiver.address, firstTokenId, firstAmount, '0x') + ).to.be.revertedWith( + 'ERC1155: ERC1155Receiver rejected tokens', + ); + }); + }); + + context('to a receiver contract that reverts', function () { + beforeEach(async function () { + this.receiver = await ERC1155ReceiverMock.deploy( + RECEIVER_SINGLE_MAGIC_VALUE, true, + RECEIVER_BATCH_MAGIC_VALUE, false, + ); + }); + + it('reverts', async function () { + await expect( + token.connect(multiTokenHolder).safeTransferFrom(multiTokenHolderAddress, this.receiver.address, firstTokenId, firstAmount, '0x') + ).to.be.revertedWith( + 'ERC1155ReceiverMock: reverting on receive', + ); + }); + }); + + context('to a contract that does not implement the required function', function () { + it('reverts', async function () { + const invalidReceiver = token; + await expect( + token.connect(multiTokenHolder).safeTransferFrom(multiTokenHolderAddress, invalidReceiver.address, firstTokenId, firstAmount, '0x') + ).to.be.reverted; + }); + }); + }); + + describe('safeBatchTransferFrom', function () { + beforeEach(async function () { + await mint(multiTokenHolderAddress, multiTokenHolderAddress); + }); + + it('reverts when transferring amount more than any of balances', async function () { + await expect( + token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, recipientAddress, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount + 1], + '0x', + )).to.be.revertedWith( + 'ERC1155: insufficient balance for transfer', + ); + }); + + it('reverts when ids array length doesn\'t match amounts array length', async function () { + await expect( + token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, recipientAddress, + [firstTokenId], + [firstAmount, secondAmount], + '0x', + )).to.be.revertedWith( + 'ERC1155: ids and amounts length mismatch', + ); + + await expect( + token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, recipientAddress, + [firstTokenId, secondTokenId], + [firstAmount], + '0x', + )).to.be.revertedWith( + 'ERC1155: ids and amounts length mismatch', + ); + }); + + it('reverts when transferring to zero address', async function () { + await expect( + token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, ZERO_ADDRESS, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x', + )).to.be.revertedWith( + 'ERC1155: transfer to the zero address', + ); + }); + + function batchTransferWasSuccessful (vars) { + before(() => { + ({ operator, from, ids, values } = vars()); + }); + + it('debits transferred balances from sender', async function () { + const newBalances = await token.balanceOfBatch(new Array(ids.length).fill(from), ids); + for (const newBalance of newBalances) { + expect(newBalance).to.be.a.bignumber.equal('0'); + } + }); + + it('credits transferred balances to receiver', async function () { + const newBalances = await token.balanceOfBatch(new Array(ids.length).fill(this.toWhom), ids); + for (let i = 0; i < newBalances.length; i++) { + expect(newBalances[i]).to.be.a.bignumber.equal(values[i]); + } + }); + + it('emits a TransferBatch log', function () { + expect(this.transfer).to.emit(token, 'TransferBatch').withArgs( + operator, + from, + this.toWhom, + ids, + values, + ); + }); + } + + context('when called by the multiTokenHolder', async function () { + beforeEach(async function () { + this.toWhom = recipientAddress; + (this.transfer = + await token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, recipientAddress, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x', + )); + }); + + batchTransferWasSuccessful.call(this, () => ({ + operator: multiTokenHolderAddress, + from: multiTokenHolderAddress, + ids: [firstTokenId, secondTokenId], + values: [firstAmount, secondAmount], + })); + }); + + context('when called by an operator on behalf of the multiTokenHolder', function () { + context('when operator is not approved by multiTokenHolder', function () { + beforeEach(async function () { + await token.connect(multiTokenHolder).setApprovalForAll(proxyAddress, false); + }); + + it('reverts', async function () { + await expect( + token.connect(proxy).safeBatchTransferFrom( + multiTokenHolderAddress, recipientAddress, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x', + )).to.be.revertedWith( + 'ERC1155: transfer caller is not owner nor approved', + ); + }); + }); + + context('when operator is approved by multiTokenHolder', function () { + beforeEach(async function () { + this.toWhom = recipientAddress; + await token.connect(multiTokenHolder).setApprovalForAll(proxyAddress, true); + (this.transfer = + await token.connect(proxy).safeBatchTransferFrom( + multiTokenHolderAddress, recipientAddress, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x', + )); + }); + + batchTransferWasSuccessful.call(this, () => ({ + operator: proxyAddress, + from: multiTokenHolderAddress, + ids: [firstTokenId, secondTokenId], + values: [firstAmount, secondAmount], + })); + + it('preserves operator\'s balances not involved in the transfer', async function () { + const balance1 = await token.balanceOf(proxyAddress, firstTokenId); + expect(balance1).to.be.a.bignumber.equal('0'); + const balance2 = await token.balanceOf(proxyAddress, secondTokenId); + expect(balance2).to.be.a.bignumber.equal('0'); + }); + }); + }); + + context('when sending to a valid receiver', function () { + beforeEach(async function () { + this.receiver = await ERC1155ReceiverMock.deploy( + RECEIVER_SINGLE_MAGIC_VALUE, false, + RECEIVER_BATCH_MAGIC_VALUE, false, + ); + }); + + context('without data', function () { + beforeEach(async function () { + this.toWhom = this.receiver.address; + this.transfer = await token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, this.receiver.address, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x', + ); + }); + + batchTransferWasSuccessful.call(this, () => ({ + operator: multiTokenHolderAddress, + from: multiTokenHolderAddress, + ids: [firstTokenId, secondTokenId], + values: [firstAmount, secondAmount], + })); + + it('calls onERC1155BatchReceived', async function () { + await expect(this.transfer).to.emit(this.receiver, 'BatchReceived').withArgs( + multiTokenHolderAddress, + multiTokenHolderAddress, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x', + ); + }); + }); + + context('with data', function () { + const data = '0xf00dd00d'; + beforeEach(async function () { + this.toWhom = this.receiver.address; + this.transfer = await token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, this.receiver.address, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + data, + ); + }); + + batchTransferWasSuccessful.call(this, () => ({ + operator: multiTokenHolderAddress, + from: multiTokenHolderAddress, + ids: [firstTokenId, secondTokenId], + values: [firstAmount, secondAmount], + })); + + it('calls onERC1155Received', async function () { + await expect(this.transfer).to.emit(this.receiver, 'BatchReceived').withArgs( + multiTokenHolderAddress, + multiTokenHolderAddress, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + data, + ); + }); + }); + }); + + context('to a receiver contract returning unexpected value', function () { + beforeEach(async function () { + this.receiver = await ERC1155ReceiverMock.deploy( + RECEIVER_SINGLE_MAGIC_VALUE, false, + RECEIVER_SINGLE_MAGIC_VALUE, false, + ); + }); + + it('reverts', async function () { + await expect( + token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, this.receiver.address, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x'), + ).to.be.revertedWith( + 'ERC1155: ERC1155Receiver rejected tokens', + ); + }); + }); + + context('to a receiver contract that reverts', function () { + beforeEach(async function () { + this.receiver = await ERC1155ReceiverMock.deploy( + RECEIVER_SINGLE_MAGIC_VALUE, false, + RECEIVER_BATCH_MAGIC_VALUE, true, + ); + }); + + it('reverts', async function () { + await expect( + token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, this.receiver.address, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x') + ).to.be.revertedWith( + 'ERC1155ReceiverMock: reverting on batch receive', + ); + }); + }); + + context('to a receiver contract that reverts only on single transfers', function () { + beforeEach(async function () { + this.receiver = await ERC1155ReceiverMock.deploy( + RECEIVER_SINGLE_MAGIC_VALUE, true, + RECEIVER_BATCH_MAGIC_VALUE, false, + ); + + this.toWhom = this.receiver.address; + this.transfer = await token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, this.receiver.address, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x', + ); + }); + + batchTransferWasSuccessful.call(this, () => ({ + operator: multiTokenHolderAddress, + from: multiTokenHolderAddress, + ids: [firstTokenId, secondTokenId], + values: [firstAmount, secondAmount], + })); + + it('calls onERC1155BatchReceived', async function () { + await expect(this.transfer).to.emit(this.receiver, 'BatchReceived').withArgs( + multiTokenHolderAddress, + multiTokenHolderAddress, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x', + ); + }); + }); + + context('to a contract that does not implement the required function', function () { + it('reverts', async function () { + const invalidReceiver = token; + await expect( + token.connect(multiTokenHolder).safeBatchTransferFrom( + multiTokenHolderAddress, invalidReceiver.address, + [firstTokenId, secondTokenId], + [firstAmount, secondAmount], + '0x', + ) + ).to.be.reverted; + }); + }); + }); + + shouldSupportInterfaces(() => token, ['ERC165', 'ERC1155']); + }); +} + +module.exports = { + shouldBehaveLikeERC1155 +}; diff --git a/test/wrapper/NameWrapper.js b/test/wrapper/NameWrapper.js new file mode 100644 index 00000000..654cc061 --- /dev/null +++ b/test/wrapper/NameWrapper.js @@ -0,0 +1,2910 @@ +const packet = require('dns-packet') +const fs = require('fs') +const { ethers } = require('hardhat') +const { utils, BigNumber: BN } = ethers +const { use, expect } = require('chai') +const { solidity } = require('ethereum-waffle') +const n = require('eth-ens-namehash') +const namehash = n.hash +const { shouldBehaveLikeERC1155 } = require('./ERC1155.behaviour') +const { shouldSupportInterfaces } = require('./SupportsInterface.behaviour') +const { ZERO_ADDRESS } = require('@openzeppelin/test-helpers/src/constants') + +const abiCoder = new ethers.utils.AbiCoder() + +use(solidity) + +const labelhash = (label) => utils.keccak256(utils.toUtf8Bytes(label)) +const ROOT_NODE = + '0x0000000000000000000000000000000000000000000000000000000000000000' + +const EMPTY_BYTES32 = + '0x0000000000000000000000000000000000000000000000000000000000000000' +const EMPTY_ADDRESS = '0x0000000000000000000000000000000000000000' + +async function deploy(name, _args) { + const args = _args || [] + + const contractArtifacts = await ethers.getContractFactory(name) + const contract = await contractArtifacts.deploy(...args) + contract.name = name + return contract +} + +function increaseTime(delay) { + return ethers.provider.send('evm_increaseTime', [delay]) +} + +function mine() { + return ethers.provider.send('evm_mine') +} + +function encodeName(name) { + return '0x' + packet.name.encode(name).toString('hex') +} + +const CANNOT_UNWRAP = 1 +const CANNOT_BURN_FUSES = 2 +const CANNOT_TRANSFER = 4 +const CANNOT_SET_RESOLVER = 8 +const CANNOT_SET_TTL = 16 +const CANNOT_CREATE_SUBDOMAIN = 32 +const CANNOT_REPLACE_SUBDOMAIN = 64 +const CAN_DO_EVERYTHING = 0 +const MINIMUM_PARENT_FUSES = CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN + +//Enum for vulnerabilities +const ParentVulnerability = { + Safe: 0, + Registrant: 1, + Controller: 2, + Fuses: 3, + Expired: 4, +} + +describe('Name Wrapper', () => { + let ENSRegistry + let ENSRegistry2 + let BaseRegistrar + let BaseRegistrar2 + let NameWrapper + let NameWrapper2 + let MetaDataservice + let signers + let accounts + let account + let account2 + let result + + /* Utility funcs */ + + async function registerSetupAndWrapName(label, account, fuses) { + const tokenId = labelhash(label) + + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD(label, account, fuses, EMPTY_ADDRESS) + } + + before(async () => { + signers = await ethers.getSigners() + account = await signers[0].getAddress() + account2 = await signers[1].getAddress() + + EnsRegistry = await deploy('ENSRegistry') + EnsRegistry2 = EnsRegistry.connect(signers[1]) + + BaseRegistrar = await deploy('BaseRegistrarImplementation', [ + EnsRegistry.address, + namehash('eth'), + ]) + + BaseRegistrar2 = BaseRegistrar.connect(signers[1]) + + await BaseRegistrar.addController(account) + await BaseRegistrar.addController(account2) + + MetaDataservice = await deploy('StaticMetadataService', [ + 'https://ens.domains', + ]) + + NameWrapper = await deploy('NameWrapper', [ + EnsRegistry.address, + BaseRegistrar.address, + MetaDataservice.address, + ]) + NameWrapper2 = NameWrapper.connect(signers[1]) + + // setup .eth + await EnsRegistry.setSubnodeOwner( + ROOT_NODE, + utils.keccak256(utils.toUtf8Bytes('eth')), + BaseRegistrar.address + ) + + // setup .xyz + await EnsRegistry.setSubnodeOwner( + ROOT_NODE, + utils.keccak256(utils.toUtf8Bytes('xyz')), + account + ) + + //make sure base registrar is owner of eth TLD + expect(await EnsRegistry.owner(namehash('eth'))).to.equal( + BaseRegistrar.address + ) + }) + + beforeEach(async () => { + result = await ethers.provider.send('evm_snapshot') + }) + afterEach(async () => { + await ethers.provider.send('evm_revert', [result]) + }) + + shouldBehaveLikeERC1155( + () => [NameWrapper, signers], + [ + namehash('test1.eth'), + namehash('test2.eth'), + namehash('doesnotexist.eth'), + ], + async (firstAddress, secondAddress) => { + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await BaseRegistrar.register(labelhash('test1'), account, 84600) + await NameWrapper.wrapETH2LD( + 'test1', + firstAddress, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + await BaseRegistrar.register(labelhash('test2'), account, 86400) + await NameWrapper.wrapETH2LD( + 'test2', + secondAddress, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + } + ) + + shouldSupportInterfaces(() => NameWrapper, ['INameWrapper']) + + describe('wrap()', () => { + it('Wraps a name if you are the owner', async () => { + const fuses = MINIMUM_PARENT_FUSES + expect(await NameWrapper.ownerOf(namehash('xyz'))).to.equal(EMPTY_ADDRESS) + + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap(encodeName('xyz'), account, fuses, EMPTY_ADDRESS) + expect(await NameWrapper.ownerOf(namehash('xyz'))).to.equal(account) + }) + + it('Allows specifying resolver', async () => { + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap(encodeName('xyz'), account, 0, account2) + expect(await EnsRegistry.resolver(namehash('xyz'))).to.equal(account2) + }) + + it('emits event for Wrap', async () => { + const fuses = MINIMUM_PARENT_FUSES + + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + + const tx = NameWrapper.wrap( + encodeName('xyz'), + account, + fuses, + EMPTY_ADDRESS + ) + await expect(tx) + .to.emit(NameWrapper, 'NameWrapped') + .withArgs(namehash('xyz'), encodeName('xyz'), account, fuses) + }) + + it('emits event for TransferSingle', async () => { + const fuses = MINIMUM_PARENT_FUSES + + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + + const tx = NameWrapper.wrap( + encodeName('xyz'), + account, + fuses, + EMPTY_ADDRESS + ) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account, EMPTY_ADDRESS, account, namehash('xyz'), 1) + }) + + it('Cannot wrap a name if the owner has not authorised the wrapper with the ENS registry.', async () => { + await expect( + NameWrapper.wrap(encodeName('xyz'), account, 0, EMPTY_ADDRESS) + ).to.be.reverted + }) + + it('Will not allow wrapping with a target address of 0x0 or the wrapper contract address.', async () => { + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await expect( + NameWrapper.wrap(encodeName('xyz'), EMPTY_ADDRESS, 0, EMPTY_ADDRESS) + ).to.be.revertedWith('ERC1155: mint to the zero address') + }) + + it('Will not allow wrapping with a target address of the wrapper contract address.', async () => { + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await expect( + NameWrapper.wrap( + encodeName('xyz'), + NameWrapper.address, + 0, + EMPTY_ADDRESS + ) + ).to.be.revertedWith( + 'ERC1155: newOwner cannot be the NameWrapper contract' + ) + }) + + it('Allows an account approved by the owner on the ENS registry to wrap a name.', async () => { + const labelHash = labelhash('abc') + + // setup .abc with account2 as owner + await EnsRegistry.setSubnodeOwner(ROOT_NODE, labelHash, account2) + // allow account to deal with all account2's names + await EnsRegistry2.setApprovalForAll(account, true) + await EnsRegistry2.setApprovalForAll(NameWrapper.address, true) + + //confirm abc is owner by account2 not account 1 + expect(await EnsRegistry.owner(namehash('abc'))).to.equal(account2) + // wrap using account + await NameWrapper.wrap(encodeName('abc'), account2, 0, EMPTY_ADDRESS) + const ownerOfWrappedXYZ = await NameWrapper.ownerOf(namehash('abc')) + expect(ownerOfWrappedXYZ).to.equal(account2) + }) + + it('Does not allow anyone else to wrap a name even if the owner has authorised the wrapper with the ENS registry.', async () => { + const labelHash = labelhash('abc') + + // setup .abc with account2 as owner + await EnsRegistry.setSubnodeOwner(ROOT_NODE, labelHash, account2) + await EnsRegistry2.setApprovalForAll(NameWrapper.address, true) + + //confirm abc is owner by account2 not account 1 + expect(await EnsRegistry.owner(namehash('abc'))).to.equal(account2) + // wrap using account + await expect( + NameWrapper.wrap(encodeName('abc'), account2, 0, EMPTY_ADDRESS) + ).to.be.revertedWith( + 'NameWrapper: Domain is not owned by the sender' + ) + }) + + it('Does not allow wrapping .eth 2LDs.', async () => { + const label = 'wrapped' + const labelHash = labelhash(label) + await BaseRegistrar.register(labelHash, account, 84600) + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await expect( + NameWrapper.wrap(encodeName('wrapped.eth'), account2, 0, EMPTY_ADDRESS) + ).to.be.revertedWith( + 'NameWrapper: .eth domains need to use wrapETH2LD()' + ) + }) + + it('Fuses are disabled if CANNOT_REPLACE_SUBDOMAIN has not been burned on the parent domain', async () => { + // register sub.xyz before we wrap xyz + await EnsRegistry.setSubnodeOwner( + namehash('xyz'), + labelhash('sub'), + account + ) + + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap( + encodeName('xyz'), + account, + CANNOT_UNWRAP, + EMPTY_ADDRESS + ) + + //attempt to burn fuse + await NameWrapper.wrap( + encodeName('sub.xyz'), + account, + CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN, + EMPTY_ADDRESS + ) + const [fuses, vulnerability, nodeVulnerable] = await NameWrapper.getFuses( + namehash('sub.xyz') + ) + expect(fuses).to.equal(CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN) + expect(vulnerability).to.equal(ParentVulnerability.Fuses) + expect(nodeVulnerable).to.equal(namehash('xyz')) + }) + + it('Only allows fuses to be burned if CANNOT_UNWRAP is burned.', async () => { + // register sub.xyz before we wrap xyz + await EnsRegistry.setSubnodeOwner( + namehash('xyz'), + labelhash('sub'), + account + ) + + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + + //attempt to burn fuse + await expect( + NameWrapper.wrap( + encodeName('xyz'), + account, + CANNOT_REPLACE_SUBDOMAIN, + EMPTY_ADDRESS + ) + ).to.be.revertedWith( + 'NameWrapper: Cannot burn fuses: domain can be unwrapped' + ) + }) + + it('Can re-wrap a name that was reassigned by a wrapped parent', async () => { + expect(await NameWrapper.ownerOf(namehash('xyz'))).to.equal(EMPTY_ADDRESS) + + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap( + encodeName('xyz'), + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + expect(await NameWrapper.ownerOf(namehash('xyz'))).to.equal(account) + + await NameWrapper.setSubnodeOwnerAndWrap( + namehash('xyz'), + 'sub', + account, + CAN_DO_EVERYTHING + ) + await NameWrapper.setSubnodeOwner( + namehash('xyz'), + labelhash('sub'), + account2 + ) + + //confirm the registry has been switched, but the token holder has not + expect(await EnsRegistry.owner(namehash('sub.xyz'))).to.equal(account2) + expect(await NameWrapper.ownerOf(namehash('sub.xyz'))).to.equal(account) + + //allow the NameWrapper to make txs on behalf of account2 + await EnsRegistry2.setApprovalForAll(NameWrapper.address, true) + const tx = await NameWrapper2.wrap( + encodeName('sub.xyz'), + account2, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + // Check the 4 events + // Unwrap of the original owner + // TransferSingle burn of the original token + // Wrap to the new owner with fuses + // TransferSingle to mint the new token + + const nameHash = namehash('sub.xyz') + + await expect(tx) + .to.emit(NameWrapper, 'NameUnwrapped') + .withArgs(nameHash, EMPTY_ADDRESS) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account2, account, EMPTY_ADDRESS, nameHash, 1) + await expect(tx) + .to.emit(NameWrapper, 'NameWrapped') + .withArgs(nameHash, encodeName('sub.xyz'), account2, CAN_DO_EVERYTHING) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account2, EMPTY_ADDRESS, account2, nameHash, 1) + + expect(await NameWrapper2.ownerOf(nameHash)).to.equal(account2) + expect(await EnsRegistry.owner(nameHash)).to.equal(NameWrapper.address) + }) + + it('Can re-wrap a name that was reassigned by an unwrapped parent', async () => { + expect(await NameWrapper.ownerOf(namehash('xyz'))).to.equal(EMPTY_ADDRESS) + + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await EnsRegistry.setSubnodeOwner( + namehash('xyz'), + labelhash('sub'), + account + ) + await NameWrapper.wrap( + encodeName('sub.xyz'), + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + await EnsRegistry.setSubnodeOwner( + namehash('xyz'), + labelhash('sub'), + account2 + ) + + expect(await EnsRegistry.owner(namehash('sub.xyz'))).to.equal(account2) + expect(await NameWrapper.ownerOf(namehash('sub.xyz'))).to.equal(account) + + await EnsRegistry2.setApprovalForAll(NameWrapper.address, true) + const tx = await NameWrapper2.wrap( + encodeName('sub.xyz'), + account2, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + const nameHash = namehash('sub.xyz') + + await expect(tx) + .to.emit(NameWrapper, 'NameUnwrapped') + .withArgs(nameHash, EMPTY_ADDRESS) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account2, account, EMPTY_ADDRESS, nameHash, 1) + await expect(tx) + .to.emit(NameWrapper, 'NameWrapped') + .withArgs(nameHash, encodeName('sub.xyz'), account2, CAN_DO_EVERYTHING) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account2, EMPTY_ADDRESS, account2, nameHash, 1) + + expect(await NameWrapper2.ownerOf(nameHash)).to.equal(account2) + expect(await EnsRegistry.owner(nameHash)).to.equal(NameWrapper.address) + }) + + it('Will not wrap a name with junk at the end', async () => { + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await expect( + NameWrapper.wrap( + encodeName('xyz') + '123456', + account, + CAN_DO_EVERYTHING, + ZERO_ADDRESS + ) + ).to.be.revertedWith('namehash: Junk at end of name') + }) + + it('Does not allow wrapping a name you do not own', async () => { + // Register the name to account1 + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap( + encodeName('xyz'), + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + // Deploy the destroy-your-name contract + const NameGriefer = await deploy('NameGriefer', [NameWrapper.address]) + + // Try and burn the name + expect(NameGriefer.destroy(encodeName('xyz'))).to.be.reverted + + // Make sure it didn't succeed + expect(await NameWrapper.ownerOf(namehash('xyz'))).to.equal(account) + }) + }) + + describe('unwrap()', () => { + it('Allows owner to unwrap name', async () => { + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap( + encodeName('xyz'), + account, + MINIMUM_PARENT_FUSES, + EMPTY_ADDRESS + ) + await NameWrapper.setSubnodeOwner( + namehash('xyz'), + labelhash('unwrapped'), + account + ) + await NameWrapper.wrap( + encodeName('unwrapped.xyz'), + account, + 0, + EMPTY_ADDRESS + ) + const ownerOfWrappedXYZ = await NameWrapper.ownerOf( + namehash('unwrapped.xyz') + ) + expect(ownerOfWrappedXYZ).to.equal(account) + await NameWrapper.unwrap(namehash('xyz'), labelhash('unwrapped'), account) + + //Transfers ownership in the ENS registry to the target address. + expect(await EnsRegistry.owner(namehash('unwrapped.xyz'))).to.equal( + account + ) + }) + + it('emits Unwrap event', async () => { + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap(encodeName('xyz'), account, 0, EMPTY_ADDRESS) + const tx = await NameWrapper.unwrap(ROOT_NODE, labelhash('xyz'), account) + + await expect(tx) + .to.emit(NameWrapper, 'NameUnwrapped') + .withArgs(namehash('xyz'), account) + }) + + it('emits TransferSingle event', async () => { + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap(encodeName('xyz'), account, 0, EMPTY_ADDRESS) + const tx = await NameWrapper.unwrap(ROOT_NODE, labelhash('xyz'), account) + + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account, account, EMPTY_ADDRESS, namehash('xyz'), 1) + }) + + it('Allows an account authorised by the owner on the NFT Wrapper to unwrap a name', async () => { + const labelHash = labelhash('abc') + + // setup .abc with account2 as owner + await EnsRegistry.setSubnodeOwner(ROOT_NODE, labelHash, account) + + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + + // wrap using account + await NameWrapper.wrap(encodeName('abc'), account, 0, EMPTY_ADDRESS) + await NameWrapper.setApprovalForAll(account2, true) + const ownerOfWrapperAbc = await NameWrapper.ownerOf(namehash('abc')) + expect(ownerOfWrapperAbc).to.equal(account) + + //unwrap using account + await NameWrapper2.unwrap(ROOT_NODE, labelhash('abc'), account2) + expect(await EnsRegistry.owner(namehash('abc'))).to.equal(account2) + expect(await NameWrapper.ownerOf(namehash('abc'))).to.equal(EMPTY_ADDRESS) + }) + + it('Does not allow an account authorised by the owner on the ENS registry to unwrap a name', async () => { + const labelHash = labelhash('abc') + + // setup .abc with account2 as owner + await EnsRegistry.setSubnodeOwner(ROOT_NODE, labelHash, account2) + // allow account to deal with all account2's names + await EnsRegistry2.setApprovalForAll(account, true) + await EnsRegistry2.setApprovalForAll(NameWrapper.address, true) + + //confirm abc is owner by account2 not account 1 + expect(await EnsRegistry.owner(namehash('abc'))).to.equal(account2) + // wrap using account + await NameWrapper.wrap(encodeName('abc'), account2, 0, EMPTY_ADDRESS) + const ownerOfWrapperAbc = await NameWrapper.ownerOf(namehash('abc')) + expect(ownerOfWrapperAbc).to.equal(account2) + + //unwrap using account + await expect(NameWrapper.unwrap(ROOT_NODE, labelHash, account2)).to.be + .reverted + }) + + it('Does not allow anyone else to unwrap a name', async () => { + const labelHash = labelhash('abc') + + await EnsRegistry.setSubnodeOwner(ROOT_NODE, labelHash, account) + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap(encodeName('abc'), account, 0, EMPTY_ADDRESS) + const ownerOfWrapperAbc = await NameWrapper.ownerOf(namehash('abc')) + expect(ownerOfWrapperAbc).to.equal(account) + //unwrap using account + await expect(NameWrapper2.unwrap(ROOT_NODE, labelHash, account2)).to.be + .reverted + }) + + it('Will not unwrap .eth 2LDs.', async () => { + const label = 'unwrapped' + const labelHash = labelhash(label) + + await BaseRegistrar.register(labelHash, account, 84600) + + //allow the restricted name wrappper to transfer the name to itself and reclaim it + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD(label, account, 0, EMPTY_ADDRESS) + const ownerOfWrappedETH = await NameWrapper.ownerOf( + namehash('unwrapped.eth') + ) + expect(ownerOfWrappedETH).to.equal(account) + await expect( + NameWrapper.unwrap(namehash('eth'), labelhash('unwrapped'), account) + ).to.be.revertedWith( + 'NameWrapper: .eth names must be unwrapped with unwrapETH2LD()' + ) + }) + + it('Will not allow a target address of 0x0 or the wrapper contract address.', async () => { + const labelHash = labelhash('abc') + + await EnsRegistry.setSubnodeOwner(ROOT_NODE, labelHash, account) + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap(encodeName('abc'), account, 0, EMPTY_ADDRESS) + await expect( + NameWrapper.unwrap(ROOT_NODE, labelHash, EMPTY_ADDRESS) + ).to.be.revertedWith('NameWrapper: Target owner cannot be 0x0') + + await expect( + NameWrapper.unwrap(ROOT_NODE, labelHash, NameWrapper.address) + ).to.be.revertedWith( + 'NameWrapper: Target owner cannot be the NameWrapper contract' + ) + }) + + it('Will not allow to unwrap a name with the CANNOT_UNWRAP fuse burned', async () => { + const labelHash = labelhash('abc') + + await EnsRegistry.setSubnodeOwner(ROOT_NODE, labelHash, account) + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap( + encodeName('abc'), + account, + CANNOT_UNWRAP, + EMPTY_ADDRESS + ) + await expect( + NameWrapper.unwrap(ROOT_NODE, labelHash, account) + ).to.be.revertedWith('NameWrapper: Domain is not unwrappable') + }) + }) + + describe('wrapETH2LD()', () => { + const label = 'wrapped2' + const labelHash = labelhash(label) + const nameHash = namehash(label + '.eth') + it('wraps a name if sender is owner', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + + //allow the restricted name wrappper to transfer the name to itself and reclaim it + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + expect(await NameWrapper.ownerOf(nameHash)).to.equal(EMPTY_ADDRESS) + + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + //make sure reclaim claimed ownership for the wrapper in registry + + expect(await EnsRegistry.owner(nameHash)).to.equal(NameWrapper.address) + + //make sure owner in the wrapper is the user + + expect(await NameWrapper.ownerOf(nameHash)).to.equal(account) + + // make sure registrar ERC721 is owned by Wrapper + + expect(await BaseRegistrar.ownerOf(labelHash)).to.equal( + NameWrapper.address + ) + }) + + it('Cannot wrap a name if the owner has not authorised the wrapper with the .eth registrar.', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await expect( + NameWrapper.wrapETH2LD(label, account, CAN_DO_EVERYTHING, EMPTY_ADDRESS) + ).to.be.reverted + }) + + it('Allows specifying resolver', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrapETH2LD(label, account, CAN_DO_EVERYTHING, account2) + expect(await EnsRegistry.resolver(nameHash)).to.equal(account2) + }) + + it('Can re-wrap a name that was wrapped has already expired', async () => { + const DAY = 60 * 60 * 24 + const GRACE_PERIOD = 90 + await BaseRegistrar.register(labelHash, account, DAY) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + await increaseTime(DAY * GRACE_PERIOD + DAY + 1) + await mine() + + expect(await BaseRegistrar.available(labelHash)).to.equal(true) + + await BaseRegistrar2.register(labelHash, account2, DAY) + expect(await BaseRegistrar.ownerOf(labelHash)).to.equal(account2) + await BaseRegistrar2.setApprovalForAll(NameWrapper.address, true) + const tx = await NameWrapper2.wrapETH2LD( + label, + account2, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + // Check the 4 events + // UnwrapETH2LD of the original owner + // TransferSingle burn of the original token + // WrapETH2LD to the new owner with fuses + // TransferSingle to mint the new token + + await expect(tx) + .to.emit(NameWrapper, 'NameUnwrapped') + .withArgs(namehash('wrapped2.eth'), EMPTY_ADDRESS) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account2, account, EMPTY_ADDRESS, nameHash, 1) + await expect(tx) + .to.emit(NameWrapper, 'NameWrapped') + .withArgs( + namehash('wrapped2.eth'), + encodeName('wrapped2.eth'), + account2, + CAN_DO_EVERYTHING + ) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account2, EMPTY_ADDRESS, account2, nameHash, 1) + + expect(await NameWrapper2.ownerOf(nameHash)).to.equal(account2) + expect(await BaseRegistrar.ownerOf(labelHash)).to.equal( + NameWrapper.address + ) + }) + + it('Can re-wrap a name that was wrapped has already expired even if CANNOT_TRANSFER was burned', async () => { + const DAY = 60 * 60 * 24 + const GRACE_PERIOD = 90 + await BaseRegistrar.register(labelHash, account, DAY) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrapETH2LD( + label, + account, + CANNOT_UNWRAP | CANNOT_TRANSFER, + EMPTY_ADDRESS + ) + await increaseTime(DAY * GRACE_PERIOD + DAY + 1) + await mine() + + expect(await BaseRegistrar.available(labelHash)).to.equal(true) + + await BaseRegistrar2.register(labelHash, account2, DAY) + expect(await BaseRegistrar.ownerOf(labelHash)).to.equal(account2) + await BaseRegistrar2.setApprovalForAll(NameWrapper.address, true) + const tx = await NameWrapper2.wrapETH2LD( + label, + account2, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + await expect(tx) + .to.emit(NameWrapper, 'NameUnwrapped') + .withArgs(namehash('wrapped2.eth'), EMPTY_ADDRESS) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account2, account, EMPTY_ADDRESS, nameHash, 1) + await expect(tx) + .to.emit(NameWrapper, 'NameWrapped') + .withArgs( + namehash('wrapped2.eth'), + encodeName('wrapped2.eth'), + account2, + CAN_DO_EVERYTHING + ) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account2, EMPTY_ADDRESS, account2, nameHash, 1) + + expect(await NameWrapper2.ownerOf(nameHash)).to.equal(account2) + expect(await BaseRegistrar.ownerOf(labelHash)).to.equal( + NameWrapper.address + ) + }) + + it('correctly reports fuses for a name that has expired and been rewrapped more permissively', async () => { + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + // Register the name + const DAY = 60 * 60 * 24 + const GRACE_PERIOD = 90 + await BaseRegistrar.register(labelHash, account, DAY) + + // Wrap it + await NameWrapper.wrapETH2LD( + label, + account, + CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN, + EMPTY_ADDRESS + ) + let [fuses, vulnerability, nodeVulnerable] = await NameWrapper.getFuses( + namehash('wrapped2.eth') + ) + expect(fuses).to.equal(CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + + // Create a subdomain that can't be unwrapped + await NameWrapper.setSubnodeOwnerAndWrap( + namehash('wrapped2.eth'), + 'sub', + account, + CANNOT_UNWRAP + ) + ;[fuses, vulnerability, nodeVulnerable] = await NameWrapper.getFuses( + namehash('sub.wrapped2.eth') + ) + expect(fuses).to.equal(CANNOT_UNWRAP) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + expect(nodeVulnerable).to.equal(EMPTY_BYTES32) + + // Fast forward until the 2LD expires + await increaseTime(DAY * GRACE_PERIOD + DAY + 1) + await mine() + + // Register from another address + await BaseRegistrar2.register(labelHash, account2, DAY) + await BaseRegistrar2.setApprovalForAll(NameWrapper.address, true) + const tx = await NameWrapper2.wrapETH2LD( + label, + account2, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + ;[fuses, vulnerability] = await NameWrapper.getFuses( + namehash('wrapped2.eth') + ) + expect(fuses).to.equal(CAN_DO_EVERYTHING) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + expect(nodeVulnerable).to.equal(EMPTY_BYTES32) + ;[fuses, vulnerability, nodeVulnerable] = await NameWrapper.getFuses( + namehash('sub.wrapped2.eth') + ) + expect(fuses).to.equal(CANNOT_UNWRAP) + expect(vulnerability).to.equal(ParentVulnerability.Fuses) + expect(nodeVulnerable).to.equal(namehash('wrapped2.eth')) + }) + + it('emits Wrap event', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + const tx = await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + await expect(tx) + .to.emit(NameWrapper, 'NameWrapped') + .withArgs( + namehash('wrapped2.eth'), + encodeName('wrapped2.eth'), + account, + CAN_DO_EVERYTHING + ) + }) + + it('emits TransferSingle event', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + const tx = await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account, EMPTY_ADDRESS, account, nameHash, 1) + }) + + it('Transfers the wrapped token to the target address.', async () => { + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.register(labelHash, account, 84600) + await NameWrapper.wrapETH2LD( + label, + account2, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + expect(await NameWrapper.ownerOf(nameHash)).to.equal(account2) + }) + + it('Does not allow wrapping with a target address of 0x0', async () => { + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.register(labelHash, account, 84600) + await expect( + NameWrapper.wrapETH2LD( + label, + EMPTY_ADDRESS, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + ).to.be.revertedWith('ERC1155: mint to the zero address') + }) + + it('Does not allow wrapping with a target address of the wrapper contract address.', async () => { + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.register(labelHash, account, 84600) + + await expect( + NameWrapper.wrapETH2LD( + label, + NameWrapper.address, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + ).to.be.revertedWith( + 'ERC1155: newOwner cannot be the NameWrapper contract' + ) + }) + + it('Allows an account approved by the owner on the .eth registrar to wrap a name.', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.setApprovalForAll(account2, true) + + await NameWrapper2.wrapETH2LD(label, account, 0, EMPTY_ADDRESS) + + expect(await NameWrapper.ownerOf(nameHash)).to.equal(account) + }) + + it('Does not allow anyone else to wrap a name even if the owner has authorised the wrapper with the ENS registry.', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await expect( + NameWrapper2.wrapETH2LD(label, account, 0, EMPTY_ADDRESS) + ).to.be.revertedWith( + 'NameWrapper: Sender is not owner or authorised by the owner or authorised on the .eth registrar' + ) + }) + + it('Can wrap a name even if the controller address is different to the registrant address.', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await EnsRegistry.setOwner(nameHash, account2) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD(label, account, 0, EMPTY_ADDRESS) + + expect(await NameWrapper.ownerOf(nameHash)).to.equal(account) + }) + + it('Does not allow the controller of a name to wrap it if they are not also the registrant.', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await EnsRegistry.setOwner(nameHash, account2) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await expect(NameWrapper2.wrapETH2LD(label, account2, 0, EMPTY_ADDRESS)) + .to.be.reverted + }) + + it('Does not allows fuse to be burned if CANNOT_UNWRAP has not been burned.', async () => { + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.register(labelHash, account, 84600) + await expect( + NameWrapper.wrapETH2LD( + label, + account, + CANNOT_SET_RESOLVER, + EMPTY_ADDRESS + ) + ).to.be.revertedWith( + 'NameWrapper: Cannot burn fuses: domain can be unwrapped' + ) + }) + + it('Allows fuse to be burned if CANNOT_UNWRAP has been burned.', async () => { + const initialFuses = CANNOT_UNWRAP | CANNOT_SET_RESOLVER + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.register(labelHash, account, 84600) + await NameWrapper.wrapETH2LD(label, account, initialFuses, EMPTY_ADDRESS) + const [fuses, vulnerability] = await NameWrapper.getFuses(nameHash) + expect(fuses).to.equal(initialFuses) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + }) + + it('Will not wrap an empty name', async () => { + await BaseRegistrar.register(labelhash(''), account, 84600) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await expect( + NameWrapper.wrapETH2LD('', account, CAN_DO_EVERYTHING, ZERO_ADDRESS) + ).to.be.revertedWith('NameWrapper: Label too short') + }) + }) + + describe('unwrapETH2LD()', () => { + const label = 'unwrapped' + const labelHash = labelhash(label) + const nameHash = namehash(label + '.eth') + it('Allows the owner to unwrap a name.', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + + //allow the restricted name wrappper to transfer the name to itself and reclaim it + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + expect(await NameWrapper.ownerOf(namehash('unwrapped.eth'))).to.equal( + account + ) + await NameWrapper.unwrapETH2LD(labelHash, account, account) + // transfers the controller on the .eth registrar to the target address. + expect(await EnsRegistry.owner(namehash('unwrapped.eth'))).to.equal( + account + ) + //Transfers the registrant on the .eth registrar to the target address + expect(await BaseRegistrar.ownerOf(labelHash)).to.equal(account) + }) + + it('emits Unwrap event', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + const tx = await NameWrapper.unwrapETH2LD(labelHash, account, account) + await expect(tx) + .to.emit(NameWrapper, 'NameUnwrapped') + .withArgs(namehash('unwrapped.eth'), account) + }) + + it('emits TransferSingle event', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + const tx = await NameWrapper.unwrapETH2LD(labelHash, account, account) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account, account, EMPTY_ADDRESS, nameHash, 1) + }) + it('Does not allows an account authorised by the owner on the ENS registrar to unwrap a name', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.setApprovalForAll(account2, true) + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + await expect( + NameWrapper2.unwrapETH2LD(labelHash, account2, account2) + ).to.be.revertedWith( + 'NameWrapper: msg.sender is not the owner or approved' + ) + }) + + it('Does not allow anyone else to unwrap a name even if the owner has authorised the wrapper with the ENS registry.', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await EnsRegistry.setApprovalForAll(account2, true) + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + await expect( + NameWrapper2.unwrapETH2LD(labelHash, account2, account2) + ).to.be.revertedWith( + 'NameWrapper: msg.sender is not the owner or approved' + ) + }) + + it('Does not allow a name to be unwrapped if CANNOT_UNWRAP fuse has been burned', async () => { + await BaseRegistrar.register(labelHash, account, 84600) + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrapETH2LD(label, account, CANNOT_UNWRAP, EMPTY_ADDRESS) + await expect( + NameWrapper.unwrapETH2LD(labelHash, account, account) + ).to.be.revertedWith('NameWrapper: Domain is not unwrappable') + }) + }) + + describe('ownerOf()', () => { + it('Returns the owner', async () => { + const label = 'subdomain' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + const CAN_DO_EVERYTHING = 0 + + await BaseRegistrar.register(tokenId, account, 84600) + + const ownerInBaseRegistrar = await BaseRegistrar.ownerOf(tokenId) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + const owner = await NameWrapper.ownerOf(wrappedTokenId) + + expect(owner).to.equal(account) + }) + }) + + describe('burnFuses()', () => { + const label = 'fuses' + const tokenId = labelhash('fuses') + const wrappedTokenId = namehash('fuses.eth') + it('Burns fuses but shows them as disabled if the parent domain does not have CANNOT_REPLACE_SUBDOMAIN burned.', async () => { + await EnsRegistry.setSubnodeOwner(ROOT_NODE, labelhash('abc'), account) + + await EnsRegistry.setSubnodeOwner( + namehash('abc'), + labelhash('sub'), + account + ) + + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.wrap( + encodeName('abc'), + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + await NameWrapper.wrap(encodeName('sub.abc'), account, 0, EMPTY_ADDRESS) + + await NameWrapper.burnFuses( + namehash('sub.abc'), + CANNOT_UNWRAP | CANNOT_TRANSFER + ) + const [fuses, vulnerability, nodeVulnerable] = await NameWrapper.getFuses( + namehash('sub.abc') + ) + expect(fuses).to.equal(CANNOT_UNWRAP | CANNOT_TRANSFER) + expect(vulnerability).to.equal(ParentVulnerability.Fuses) + expect(nodeVulnerable).to.equal(namehash('abc')) + }) + it('Will not allow burning fuses unless CANNOT_UNWRAP is also burned.', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + await expect( + NameWrapper.burnFuses(wrappedTokenId, CANNOT_TRANSFER) + ).to.be.revertedWith( + 'NameWrapper: Cannot burn fuses: domain can be unwrapped' + ) + }) + + it('Can be called by the owner', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD(label, account, CANNOT_UNWRAP, EMPTY_ADDRESS) + + let [fuses, vulnerability] = await NameWrapper.getFuses(wrappedTokenId) + expect(fuses).to.equal(CANNOT_UNWRAP) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_TRANSFER) + ;[fuses, vulnerability] = await NameWrapper.getFuses(wrappedTokenId) + expect(fuses).to.equal(CANNOT_UNWRAP | CANNOT_TRANSFER) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + }) + + it('Emits BurnFusesEvent', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD(label, account, CANNOT_UNWRAP, EMPTY_ADDRESS) + + const tx = await NameWrapper.burnFuses(wrappedTokenId, CANNOT_TRANSFER) + + await expect(tx) + .to.emit(NameWrapper, 'FusesBurned') + .withArgs(wrappedTokenId, CANNOT_UNWRAP | CANNOT_TRANSFER) + + const [fuses, vulnerability] = await NameWrapper.getFuses(wrappedTokenId) + expect(fuses).to.equal(CANNOT_UNWRAP | CANNOT_TRANSFER) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + }) + + it('Can be called by an account authorised by the owner', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + await NameWrapper.setApprovalForAll(account2, true) + + await NameWrapper2.burnFuses(wrappedTokenId, CANNOT_UNWRAP) + + const [fuses, vulnerability] = await NameWrapper.getFuses(wrappedTokenId) + expect(fuses).to.equal(CANNOT_UNWRAP) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + }) + it('Cannot be called by an unauthorised account', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD( + label, + account, + CAN_DO_EVERYTHING, + EMPTY_ADDRESS + ) + + await expect( + NameWrapper2.burnFuses( + wrappedTokenId, + CAN_DO_EVERYTHING | CANNOT_UNWRAP + ) + ).to.be.reverted + }) + + it('Allows burning unknown fuses', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD(label, account, CANNOT_UNWRAP, EMPTY_ADDRESS) + + // Each fuse is represented by the next bit, 64 is the next undefined fuse + + await NameWrapper.burnFuses(wrappedTokenId, 128) + + const [fuses, vulnerability] = await NameWrapper.getFuses(wrappedTokenId) + expect(fuses).to.equal(CANNOT_UNWRAP | 128) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + }) + + it('Logically ORs passed in fuses with already-burned fuses.', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD( + label, + account, + CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN, + EMPTY_ADDRESS + ) + + await NameWrapper.burnFuses(wrappedTokenId, 128) + + const [fuses, vulnerability] = await NameWrapper.getFuses(wrappedTokenId) + expect(fuses).to.equal(CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN | 128) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + }) + + it('can set fuses and then burn ability to burn fuses', async () => { + const label = 'burnabilitytoburn' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + const CAN_DO_EVERYTHING = 0 + + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD(label, account, CANNOT_UNWRAP, EMPTY_ADDRESS) + + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_BURN_FUSES) + + const ownerInWrapper = await NameWrapper.ownerOf(wrappedTokenId) + + expect(ownerInWrapper).to.equal(account) + + // check flag in the wrapper + + expect( + await NameWrapper.allFusesBurned(wrappedTokenId, CANNOT_BURN_FUSES) + ).to.equal(true) + + //try to set the resolver and ttl + await expect( + NameWrapper.burnFuses(wrappedTokenId, CANNOT_REPLACE_SUBDOMAIN) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + }) + + it('can set fuses and burn transfer', async () => { + const [signer2] = await ethers.getSigners() + const account2 = await signer2.getAddress() + const label = 'fuses3' + const tokenId = labelhash('fuses3') + const wrappedTokenId = namehash('fuses3.eth') + + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD(label, account, CANNOT_UNWRAP, EMPTY_ADDRESS) + + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_TRANSFER) + + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + + // check flag in the wrapper + + expect( + await NameWrapper.allFusesBurned(wrappedTokenId, CANNOT_TRANSFER) + ).to.equal(true) + + //try to set the resolver and ttl + await expect( + NameWrapper.safeTransferFrom(account, account2, wrappedTokenId, 1, '0x') + ).to.be.revertedWith( + 'NameWrapper: Fuse already burned for transferring owner' + ) + }) + + it('can set fuses and burn canSetResolver and canSetTTL', async () => { + const label = 'fuses1' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + const CAN_DO_EVERYTHING = 0 + + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD(label, account, CANNOT_UNWRAP, EMPTY_ADDRESS) + + await NameWrapper.burnFuses( + wrappedTokenId, + CANNOT_SET_RESOLVER | CANNOT_SET_TTL + ) + + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + + // check flag in the wrapper + expect( + await NameWrapper.allFusesBurned( + wrappedTokenId, + CANNOT_SET_RESOLVER | CANNOT_SET_TTL + ) + ).to.equal(true) + + //try to set the resolver and ttl + await expect( + NameWrapper.setResolver(wrappedTokenId, account) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + + await expect(NameWrapper.setTTL(wrappedTokenId, 1000)).to.be.revertedWith( + 'NameWrapper: Operation prohibited by fuses' + ) + }) + + it('can set fuses and burn canCreateSubdomains', async () => { + const label = 'fuses2' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + + await NameWrapper.wrapETH2LD(label, account, CANNOT_UNWRAP, EMPTY_ADDRESS) + + expect( + await NameWrapper.allFusesBurned( + wrappedTokenId, + CANNOT_CREATE_SUBDOMAIN + ) + ).to.equal(false) + + // can create before burn + + //revert not approved and isn't sender because subdomain isnt owned by contract? + await NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'creatable', + account, + CAN_DO_EVERYTHING + ) + + expect( + await EnsRegistry.owner(namehash('creatable.fuses2.eth')) + ).to.equal(NameWrapper.address) + + expect( + await NameWrapper.ownerOf(namehash('creatable.fuses2.eth')) + ).to.equal(account) + + await NameWrapper.burnFuses( + wrappedTokenId, + CAN_DO_EVERYTHING | CANNOT_CREATE_SUBDOMAIN + ) + + const ownerInWrapper = await NameWrapper.ownerOf(wrappedTokenId) + + expect(ownerInWrapper).to.equal(account) + + expect( + await NameWrapper.allFusesBurned( + wrappedTokenId, + CANNOT_CREATE_SUBDOMAIN + ) + ).to.equal(true) + + //try to create a subdomain + + await expect( + NameWrapper.setSubnodeOwner( + namehash('fuses2.eth'), + labelhash('uncreateable'), + account + ) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + + //expect replacing subdomain to succeed + }) + }) + + describe('setSubnodeOwnerAndWrap()', async () => { + const label = 'ownerandwrap' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + + before(async () => { + await registerSetupAndWrapName( + label, + account, + CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN + ) + }) + + it('Can be called by the owner of a name and sets this contract as owner on the ENS registry.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + account, + CAN_DO_EVERYTHING + ) + + expect(await EnsRegistry.owner(namehash(`sub.${label}.eth`))).to.equal( + NameWrapper.address + ) + + expect(await NameWrapper.ownerOf(namehash(`sub.${label}.eth`))).to.equal( + account + ) + }) + it('Can be called by an account authorised by the owner.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setApprovalForAll(account2, true) + await NameWrapper2.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + account, + 0 + ) + + expect(await EnsRegistry.owner(namehash(`sub.${label}.eth`))).to.equal( + NameWrapper.address + ) + + expect(await NameWrapper.ownerOf(namehash(`sub.${label}.eth`))).to.equal( + account + ) + }) + it('Transfers the wrapped token to the target address.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + account2, + CAN_DO_EVERYTHING + ) + + expect(await EnsRegistry.owner(namehash(`sub.${label}.eth`))).to.equal( + NameWrapper.address + ) + + expect(await NameWrapper.ownerOf(namehash(`sub.${label}.eth`))).to.equal( + account2 + ) + }) + it('Will not allow wrapping with a target address of 0x0.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await expect( + NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + EMPTY_ADDRESS, + CAN_DO_EVERYTHING + ) + ).to.be.revertedWith('ERC1155: mint to the zero address') + }) + it('Will not allow wrapping with a target address of the wrapper contract address', async () => { + await expect( + NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + NameWrapper.address, + CAN_DO_EVERYTHING + ) + ).to.be.revertedWith( + 'ERC1155: newOwner cannot be the NameWrapper contract' + ) + }) + it('Does not allow anyone else to wrap a name even if the owner has authorised the wrapper with the ENS registry.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await EnsRegistry.setApprovalForAll(account2, true) + await expect( + NameWrapper2.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + account, + CAN_DO_EVERYTHING + ) + ).to.be.revertedWith( + 'NameWrapper: msg.sender is not the owner or approved' + ) + }) + it('Fuses are not enabled if the parent name does not have CANNOT_REPLACE_SUBDOMAIN burned', async () => { + const label = 'subdomain2' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + await registerSetupAndWrapName(label, account, CAN_DO_EVERYTHING) + await NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + account, + CANNOT_UNWRAP + ) + const [fuses, vulnerability, vulnerableNode] = await NameWrapper.getFuses( + namehash(`sub.${label}.eth`) + ) + expect(fuses).to.equal(CANNOT_UNWRAP) + expect(vulnerability).to.equal(ParentVulnerability.Fuses) + expect(vulnerableNode).to.equal(wrappedTokenId) + }) + it('Does not allow fuses to be burned if CANNOT_UNWRAP is not burned.', async () => { + const label = 'subdomain2' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + await registerSetupAndWrapName( + label, + account, + CAN_DO_EVERYTHING | CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN + ) + await expect( + NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + account, + CANNOT_REPLACE_SUBDOMAIN + ) + ).to.be.revertedWith( + 'NameWrapper: Cannot burn fuses: domain can be unwrapped' + ) + }) + + it('Allows fuses to be burned if CANNOT_UNWRAP is burned and parent CANNOT_REPLACE_SUBDOMAIN is burned', async () => { + const label = 'subdomain2' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + await registerSetupAndWrapName( + label, + account, + CAN_DO_EVERYTHING | CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN + ) + await NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + account, + CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN + ) + + expect( + await NameWrapper.allFusesBurned( + namehash(`sub.${label}.eth`), + CANNOT_REPLACE_SUBDOMAIN + ) + ).to.equal(true) + }) + it('Emits Wrap event', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + const tx = await NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + account2, + 0 + ) + await expect(tx) + .to.emit(NameWrapper, 'NameWrapped') + .withArgs( + namehash(`sub.${label}.eth`), + encodeName(`sub.${label}.eth`), + account2, + 0 + ) + }) + + it('Emits TransferSingle event', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + const tx = await NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + 'sub', + account2, + 0 + ) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs( + account, + EMPTY_ADDRESS, + account2, + namehash(`sub.${label}.eth`), + 1 + ) + }) + + it('Will not create a subdomain with an empty label', async () => { + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await expect( + NameWrapper.setSubnodeOwnerAndWrap( + wrappedTokenId, + '', + account, + CAN_DO_EVERYTHING + ) + ).to.be.revertedWith('NameWrapper: Label too short') + }) + }) + + describe('setSubnodeRecordAndWrap()', async () => { + const label = 'subdomain2' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + let resolver + + before(async () => { + resolver = account // dummy address for resolver + await registerSetupAndWrapName( + label, + account, + CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN + ) + }) + + it('Can be called by the owner of a name', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + account, + resolver, + 0, + 0 + ) + + expect(await EnsRegistry.owner(namehash(`sub.${label}.eth`))).to.equal( + NameWrapper.address + ) + + expect(await NameWrapper.ownerOf(namehash(`sub.${label}.eth`))).to.equal( + account + ) + }) + + it('Can be called by an account authorised by the owner.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setApprovalForAll(account2, true) + await NameWrapper2.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + account, + resolver, + 0, + 0 + ) + + expect(await EnsRegistry.owner(namehash(`sub.${label}.eth`))).to.equal( + NameWrapper.address + ) + + expect(await NameWrapper.ownerOf(namehash(`sub.${label}.eth`))).to.equal( + account + ) + }) + + it('Transfers the wrapped token to the target address.', async () => { + await NameWrapper.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + account2, + resolver, + 0, + 0 + ) + + expect(await NameWrapper.ownerOf(namehash(`sub.${label}.eth`))).to.equal( + account2 + ) + }) + + it('Will not allow wrapping with a target address of 0x0', async () => { + await expect( + NameWrapper.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + EMPTY_ADDRESS, + resolver, + 0, + 0 + ) + ).to.be.revertedWith('ERC1155: mint to the zero address') + }) + + it('Will not allow wrapping with a target address of the wrapper contract address.', async () => { + await expect( + NameWrapper.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + NameWrapper.address, + resolver, + 0, + 0 + ) + ).to.be.revertedWith( + 'ERC1155: newOwner cannot be the NameWrapper contract' + ) + }) + + it('Does not allow anyone else to wrap a name even if the owner has authorised the wrapper with the ENS registry.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await EnsRegistry.setApprovalForAll(account2, true) + await expect( + NameWrapper2.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + account, + resolver, + 0, + 0 + ) + ).to.be.revertedWith( + 'NameWrapper: msg.sender is not the owner or approved' + ) + }) + + it('Fuses are not enabled if the parent name does not have CANNOT_REPLACE_SUBDOMAIN burned.', async () => { + const label = 'subdomain3' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + await registerSetupAndWrapName(label, account, CAN_DO_EVERYTHING) + await NameWrapper.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + account, + resolver, + 0, + CANNOT_UNWRAP + ) + const [fuses, vulnerable, vulnerableNode] = await NameWrapper.getFuses( + namehash(`sub.${label}.eth`) + ) + expect(fuses).to.equal(CANNOT_UNWRAP) + expect(vulnerable).to.equal(ParentVulnerability.Fuses) + expect(vulnerableNode).to.equal(wrappedTokenId) + }) + + it('Does not allow fuses to be burned if CANNOT_UNWRAP is not burned', async () => { + const label = 'subdomain3' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + await registerSetupAndWrapName( + label, + account, + CAN_DO_EVERYTHING | CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN + ) + await expect( + NameWrapper.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + account, + resolver, + 0, + CANNOT_REPLACE_SUBDOMAIN + ) + ).to.be.revertedWith( + 'NameWrapper: Cannot burn fuses: domain can be unwrapped' + ) + }) + + it('Emits Wrap event', async () => { + const tx = await NameWrapper.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + account2, + resolver, + 0, + 0 + ) + await expect(tx) + .to.emit(NameWrapper, 'NameWrapped') + .withArgs( + namehash(`sub.${label}.eth`), + encodeName(`sub.${label}.eth`), + account2, + 0 + ) + }) + + it('Emits TransferSingle event', async () => { + const tx = await NameWrapper.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + account2, + resolver, + 0, + 0 + ) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs( + account, + EMPTY_ADDRESS, + account2, + namehash(`sub.${label}.eth`), + 1 + ) + }) + + it('Sets the appropriate values on the ENS registry', async () => { + await NameWrapper.setSubnodeRecordAndWrap( + wrappedTokenId, + 'sub', + account2, + resolver, + 100, + 0 + ) + + const node = namehash(`sub.${label}.eth`) + + expect(await EnsRegistry.owner(node)).to.equal(NameWrapper.address) + expect(await EnsRegistry.resolver(node)).to.equal(resolver) + expect(await EnsRegistry.ttl(node)).to.equal(100) + }) + + it('Will not create a subdomain with an empty label', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await expect( + NameWrapper.setSubnodeRecordAndWrap( + wrappedTokenId, + '', + account, + resolver, + 0, + 0 + ) + ).to.be.revertedWith('NameWrapper: Label too short') + }) + }) + + describe('setRecord', () => { + const label = 'setrecord' + const labelHash = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + + before(async () => { + await registerSetupAndWrapName(label, account, CANNOT_UNWRAP) + }) + + it('Can be called by the owner', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setRecord(wrappedTokenId, account2, account, 50) + }) + + it('Performs the appropriate function on the ENS registry.', async () => { + await NameWrapper.setRecord(wrappedTokenId, account2, account, 50) + + expect(await EnsRegistry.owner(wrappedTokenId)).to.equal(account2) + expect(await EnsRegistry.resolver(wrappedTokenId)).to.equal(account) + expect(await EnsRegistry.ttl(wrappedTokenId)).to.equal(50) + }) + + it('Can be called by an account authorised by the owner.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setApprovalForAll(account2, true) + await NameWrapper2.setRecord(wrappedTokenId, account2, account, 50) + }) + + it('Cannot be called by anyone else.', async () => { + await expect( + NameWrapper2.setRecord(wrappedTokenId, account2, account, 50) + ).to.be.revertedWith( + 'NameWrapper: msg.sender is not the owner or approved' + ) + }) + + it('Cannot be called if CANNOT_TRANSFER is burned.', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_TRANSFER) + await expect( + NameWrapper.setRecord(wrappedTokenId, account2, account, 50) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + }) + + it('Cannot be called if CANNOT_SET_RESOLVER is burned.', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_SET_RESOLVER) + + await expect( + NameWrapper.setRecord(wrappedTokenId, account2, account, 50) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + }) + + it('Cannot be called if CANNOT_SET_TTL is burned.', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_SET_TTL) + + await expect( + NameWrapper.setRecord(wrappedTokenId, account2, account, 50) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + }) + }) + + describe('setSubnodeRecord', () => { + const label = 'setsubnoderecord' + const labelHash = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + const subLabel = 'sub' + const subLabelHash = labelhash(subLabel) + const subWrappedTokenId = namehash(`${subLabel}.${label}.eth`) + + before(async () => { + await registerSetupAndWrapName(label, account, CANNOT_UNWRAP) + }) + + it('Can be called by the owner', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setSubnodeRecord( + wrappedTokenId, + subLabelHash, + account2, + account, + 50 + ) + }) + + it('Performs the appropriate function on the ENS registry.', async () => { + //Make sure the registry is clear + expect(await EnsRegistry.owner(subWrappedTokenId)).to.equal(EMPTY_ADDRESS) + expect(await EnsRegistry.resolver(subWrappedTokenId)).to.equal( + EMPTY_ADDRESS + ) + expect(await EnsRegistry.ttl(subWrappedTokenId)).to.equal(EMPTY_ADDRESS) + await NameWrapper.setSubnodeRecord( + wrappedTokenId, + subLabelHash, + account2, + account, + 50 + ) + + expect(await EnsRegistry.owner(subWrappedTokenId)).to.equal(account2) + expect(await EnsRegistry.resolver(subWrappedTokenId)).to.equal(account) + expect(await EnsRegistry.ttl(subWrappedTokenId)).to.equal(50) + }) + + it('Can be called by an account authorised by the owner.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setApprovalForAll(account2, true) + await NameWrapper2.setSubnodeRecord( + wrappedTokenId, + subLabelHash, + account2, + account, + 50 + ) + }) + + it('Cannot be called by anyone else.', async () => { + await expect( + NameWrapper2.setSubnodeRecord( + wrappedTokenId, + subLabelHash, + account2, + account, + 50 + ) + ).to.be.revertedWith( + 'NameWrapper: msg.sender is not the owner or approved' + ) + }) + + it('Cannot be called if CREATE_SUBDOMAIN is burned and is a new subdomain', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_CREATE_SUBDOMAIN) + + //Check the subdomain has not been created yet + expect(await EnsRegistry.owner(subWrappedTokenId)).to.equal(EMPTY_ADDRESS) + await expect( + NameWrapper.setSubnodeRecord( + wrappedTokenId, + subLabelHash, + account2, + account, + 50 + ) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + }) + + it('Cannot be called if REPLACE_SUBDOMAIN is burned and is an existing subdomain', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_REPLACE_SUBDOMAIN) + + //Check the subdomain has not been created yet + await NameWrapper.setSubnodeRecord( + wrappedTokenId, + subLabelHash, + account2, + account, + 50 + ) + expect(await EnsRegistry.owner(subWrappedTokenId)).to.equal(account2) + await expect( + NameWrapper.setSubnodeRecord( + wrappedTokenId, + subLabelHash, + account, + account, + 50 + ) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + }) + }) + + describe('setSubnodeOwner', () => { + const label = 'setsubnodeowner' + const labelHash = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + const subLabel = 'sub' + const subLabelHash = labelhash(subLabel) + const subWrappedTokenId = namehash(`${subLabel}.${label}.eth`) + + before(async () => { + await registerSetupAndWrapName(label, account, CANNOT_UNWRAP) + }) + + it('Can be called by the owner', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setSubnodeOwner(wrappedTokenId, subLabelHash, account2) + }) + + it('Performs the appropriate function on the ENS registry.', async () => { + expect(await EnsRegistry.owner(subWrappedTokenId)).to.equal(EMPTY_ADDRESS) + await NameWrapper.setSubnodeOwner(wrappedTokenId, subLabelHash, account2) + expect(await EnsRegistry.owner(subWrappedTokenId)).to.equal(account2) + }) + + it('Can be called by an account authorised by the owner.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setApprovalForAll(account2, true) + await NameWrapper2.setSubnodeOwner(wrappedTokenId, subLabelHash, account2) + }) + + it('Cannot be called by anyone else.', async () => { + await expect( + NameWrapper2.setSubnodeOwner(wrappedTokenId, subLabelHash, account2) + ).to.be.revertedWith( + 'NameWrapper: msg.sender is not the owner or approved' + ) + }) + + it('Cannot be called if CREATE_SUBDOMAIN is burned and is a new subdomain', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_CREATE_SUBDOMAIN) + + //Check the subdomain has not been created yet + expect(await EnsRegistry.owner(subWrappedTokenId)).to.equal(EMPTY_ADDRESS) + await expect( + NameWrapper.setSubnodeOwner(wrappedTokenId, subLabelHash, account2) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + }) + + it('Cannot be called if REPLACE_SUBDOMAIN is burned and is an existing subdomain', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_REPLACE_SUBDOMAIN) + + //Check the subdomain has not been created yet + await NameWrapper.setSubnodeOwner(wrappedTokenId, subLabelHash, account2) + expect(await EnsRegistry.owner(subWrappedTokenId)).to.equal(account2) + await expect( + NameWrapper.setSubnodeOwner(wrappedTokenId, subLabelHash, account) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + }) + }) + + describe('setResolver', () => { + const label = 'setresolver' + const labelHash = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + + before(async () => { + await registerSetupAndWrapName(label, account, CANNOT_UNWRAP) + }) + + it('Can be called by the owner', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setResolver(wrappedTokenId, account2) + }) + + it('Performs the appropriate function on the ENS registry.', async () => { + expect(await EnsRegistry.resolver(wrappedTokenId)).to.equal(EMPTY_ADDRESS) + await NameWrapper.setResolver(wrappedTokenId, account2) + expect(await EnsRegistry.resolver(wrappedTokenId)).to.equal(account2) + }) + + it('Can be called by an account authorised by the owner.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setApprovalForAll(account2, true) + await NameWrapper2.setResolver(wrappedTokenId, account2) + }) + + it('Cannot be called by anyone else.', async () => { + await expect( + NameWrapper2.setResolver(wrappedTokenId, account2) + ).to.be.revertedWith( + 'NameWrapper: msg.sender is not the owner or approved' + ) + }) + + it('Cannot be called if CANNOT_SET_RESOLVER is burned', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_SET_RESOLVER) + + await expect( + NameWrapper.setResolver(wrappedTokenId, account2) + ).to.be.revertedWith('NameWrapper: Operation prohibited by fuses') + }) + }) + + describe('setTTL', () => { + const label = 'setttl' + const labelHash = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + + before(async () => { + await registerSetupAndWrapName(label, account, CANNOT_UNWRAP) + }) + + it('Can be called by the owner', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setTTL(wrappedTokenId, 100) + }) + + it('Performs the appropriate function on the ENS registry.', async () => { + expect(await EnsRegistry.ttl(wrappedTokenId)).to.equal(EMPTY_ADDRESS) + await NameWrapper.setTTL(wrappedTokenId, 100) + expect(await EnsRegistry.ttl(wrappedTokenId)).to.equal(100) + }) + + it('Can be called by an account authorised by the owner.', async () => { + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + await NameWrapper.setApprovalForAll(account2, true) + await NameWrapper2.setTTL(wrappedTokenId, 100) + }) + + it('Cannot be called by anyone else.', async () => { + await expect( + NameWrapper2.setTTL(wrappedTokenId, 3600) + ).to.be.revertedWith( + 'NameWrapper: msg.sender is not the owner or approved' + ) + }) + + it('Cannot be called if CANNOT_SET_TTL is burned', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_SET_TTL) + + await expect(NameWrapper.setTTL(wrappedTokenId, 100)).to.be.revertedWith( + 'NameWrapper: Operation prohibited by fuses' + ) + }) + }) + + describe('onERC721Received', () => { + const label = 'send2contract' + const name = label + '.eth' + const tokenId = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + it('Wraps a name transferred to it and sets the owner to the provided address', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar['safeTransferFrom(address,address,uint256,bytes)']( + account, + NameWrapper.address, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [label, account2, '0x0', EMPTY_ADDRESS] + ) + ) + + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account2) + expect(await BaseRegistrar.ownerOf(tokenId)).to.equal(NameWrapper.address) + }) + + it('Reverts if called by anything other than the ENS registrar address', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await expect( + NameWrapper.onERC721Received( + account, + account, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [label, account, '0x000000000000000000000001', EMPTY_ADDRESS] + ) + ) + ).to.be.revertedWith( + 'NameWrapper: Wrapper only supports .eth ERC721 token transfers' + ) + }) + + it('Accepts fuse values from the data field', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar['safeTransferFrom(address,address,uint256,bytes)']( + account, + NameWrapper.address, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [label, account, '0x000000000000000000000001', EMPTY_ADDRESS] + ) + ) + const [fuses] = await NameWrapper.getFuses(wrappedTokenId) + expect(fuses).to.equal(1) + expect( + await NameWrapper.allFusesBurned(wrappedTokenId, CANNOT_UNWRAP) + ).to.equal(true) + }) + + it('Allows specifiying resolver address', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar['safeTransferFrom(address,address,uint256,bytes)']( + account, + NameWrapper.address, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [label, account, '0x000000000000000000000001', account2] + ) + ) + + expect(await EnsRegistry.resolver(wrappedTokenId)).to.equal(account2) + }) + + it('Reverts if transferred without data', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await expect( + BaseRegistrar['safeTransferFrom(address,address,uint256,bytes)']( + account, + NameWrapper.address, + tokenId, + '0x' + ) + ).to.be.revertedWith('') + }) + it('Rejects transfers where the data field label does not match the tokenId', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await expect( + BaseRegistrar['safeTransferFrom(address,address,uint256,bytes)']( + account, + NameWrapper.address, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [ + 'incorrectlabel', + account, + '0x000000000000000000000000', + EMPTY_ADDRESS, + ] + ) + ) + ).to.be.revertedWith( + 'NameWrapper: Token id does match keccak(label) of label provided in data field' + ) + }) + + it('Reverts if CANNOT_UNWRAP is not burned and attempts to burn other fuses', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + await EnsRegistry.setOwner(wrappedTokenId, account2) + + await expect( + BaseRegistrar['safeTransferFrom(address,address,uint256,bytes)']( + account, + NameWrapper.address, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [label, account, '0x000000000000000000000002', EMPTY_ADDRESS] + ) + ) + ).to.be.revertedWith( + 'NameWrapper: Cannot burn fuses: domain can be unwrapped' + ) + }) + + it('Allows burning other fuses if CAN_UNWRAP has been burnt', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + await EnsRegistry.setOwner(wrappedTokenId, account2) + + await BaseRegistrar['safeTransferFrom(address,address,uint256,bytes)']( + account, + NameWrapper.address, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [label, account, '0x000000000000000000000005', EMPTY_ADDRESS] // CANNOT_UNWRAP | CANNOT_TRANSFER + ) + ) + + expect(await EnsRegistry.owner(wrappedTokenId)).to.equal( + NameWrapper.address + ) + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + expect((await NameWrapper.getFuses(wrappedTokenId))[0]).to.equal(5) + + expect( + await NameWrapper.allFusesBurned(wrappedTokenId, CANNOT_UNWRAP) + ).to.equal(true) + }) + + it('Sets the controller in the ENS registry to the wrapper contract', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + + await BaseRegistrar['safeTransferFrom(address,address,uint256,bytes)']( + account, + NameWrapper.address, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [label, account, '0x000000000000000000000000', EMPTY_ADDRESS] + ) + ) + + expect(await EnsRegistry.owner(wrappedTokenId)).to.equal( + NameWrapper.address + ) + }) + it('Can wrap a name even if the controller address is different to the registrant address', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + await EnsRegistry.setOwner(wrappedTokenId, account2) + + await BaseRegistrar['safeTransferFrom(address,address,uint256,bytes)']( + account, + NameWrapper.address, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [ + 'send2contract', + account, + '0x000000000000000000000000', + EMPTY_ADDRESS, + ] // CANNOT_UNWRAP | CANNOT_TRANSFER + ) + ) + + expect(await EnsRegistry.owner(wrappedTokenId)).to.equal( + NameWrapper.address + ) + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + }) + + it('emits NameWrapped Event', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + const tx = await BaseRegistrar[ + 'safeTransferFrom(address,address,uint256,bytes)' + ]( + account, + NameWrapper.address, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [label, account, '0x000000000000000000000005', EMPTY_ADDRESS] // CANNOT_UNWRAP | CANNOT_TRANSFER + ) + ) + + await expect(tx) + .to.emit(NameWrapper, 'NameWrapped') + .withArgs( + wrappedTokenId, + encodeName(name), + account, + CANNOT_UNWRAP | CANNOT_TRANSFER + ) + }) + + it('emits TransferSingle Event', async () => { + await BaseRegistrar.register(tokenId, account, 84600) + const tx = await BaseRegistrar[ + 'safeTransferFrom(address,address,uint256,bytes)' + ]( + account, + NameWrapper.address, + tokenId, + abiCoder.encode( + ['string', 'address', 'uint96', 'address'], + [label, account, '0x000000000000000000000005', EMPTY_ADDRESS] // CANNOT_UNWRAP | CANNOT_TRANSFER + ) + ) + + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs( + BaseRegistrar.address, + EMPTY_ADDRESS, + account, + wrappedTokenId, + 1 + ) + }) + + it('will not wrap a name with an empty label', async () => { + await BaseRegistrar.register(labelhash(''), account, 84600) + + await expect( + BaseRegistrar['safeTransferFrom(address,address,uint256,bytes)']( + account, + NameWrapper.address, + labelhash(''), + abiCoder.encode( + ['string', 'address', 'uint96'], + ['', account2, '0x0'] + ) + ) + ).to.be.revertedWith('NameWrapper: Label too short') + }) + }) + + describe('Transfer', () => { + const label = 'transfer' + const labelHash = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + + before(async () => { + await registerSetupAndWrapName(label, account, CANNOT_UNWRAP) + }) + + it('safeTransfer cannot be called if CANNOT_TRANSFER is burned', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_TRANSFER) + + await expect( + NameWrapper.safeTransferFrom(account, account2, wrappedTokenId, 1, '0x') + ).to.be.revertedWith( + 'NameWrapper: Fuse already burned for transferring owner' + ) + }) + + it('safeBatchTransfer cannot be called if CANNOT_TRANSFER is burned', async () => { + await NameWrapper.burnFuses(wrappedTokenId, CANNOT_TRANSFER) + + await expect( + NameWrapper.safeBatchTransferFrom( + account, + account2, + [wrappedTokenId], + [1], + '0x' + ) + ).to.be.revertedWith( + 'NameWrapper: Fuse already burned for transferring owner' + ) + }) + }) + + describe('getFuses', () => { + const label = 'getfuses' + const labelHash = labelhash(label) + const nameHash = namehash(label + '.eth') + const subLabel = 'sub' + const subLabelHash = labelhash(subLabel) + const subNameHash = namehash(`${subLabel}.${label}.eth`) + const subSubLabel = 'subsub' + const subSubLabelhash = labelhash(subSubLabel) + const subSubNameHash = namehash(`${subSubLabel}.${subLabel}.${label}.eth`) + it('returns the correct fuses and vulnerability', async () => { + const initialFuses = CANNOT_UNWRAP | CANNOT_SET_RESOLVER + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.register(labelHash, account, 84600) + await NameWrapper.wrapETH2LD(label, account, initialFuses, EMPTY_ADDRESS) + const [fuses, vulnerability] = await NameWrapper.getFuses(nameHash) + expect(fuses).to.equal(initialFuses) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + }) + + it('identifies vulnerability is in fuses and node associated with it', async () => { + const initialFuses = CAN_DO_EVERYTHING + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.register(labelHash, account, 84600) + await NameWrapper.wrapETH2LD(label, account, initialFuses, EMPTY_ADDRESS) + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.setSubnodeOwnerAndWrap( + nameHash, + subLabel, + account, + initialFuses + ) + + let [fuses, vulnerability, vulnerableNode] = await NameWrapper.getFuses( + subNameHash + ) + + expect(fuses).to.equal(initialFuses) + expect(vulnerability).to.equal(ParentVulnerability.Fuses) + expect(vulnerableNode).to.equal(nameHash) + + //check parent fuses + ;[fuses, vulnerability] = await NameWrapper.getFuses(nameHash) + + expect(fuses).to.equal(initialFuses) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + }) + + it('identifies vulnerability is the domain is expired and the vulnerable node', async () => { + const initialFuses = CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.register(labelHash, account, 84600) + await NameWrapper.wrapETH2LD(label, account, initialFuses, EMPTY_ADDRESS) + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.setSubnodeOwnerAndWrap( + nameHash, + subLabel, + account, + initialFuses + ) + + await increaseTime(84600 + 1) + await mine() + + let [fuses, vulnerability, vulnerableNode] = await NameWrapper.getFuses( + subNameHash + ) + + expect(fuses).to.equal(initialFuses) + expect(vulnerability).to.equal(ParentVulnerability.Expired) + expect(vulnerableNode).to.equal(nameHash) + }) + + it('identifies vulnerability is registrant is not the wrapper and vulnerable node', async () => { + const GRACE_PERIOD = 90 + const DAY = 24 * 60 * 60 + + const initialFuses = CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.register(labelHash, account, DAY) + await NameWrapper.wrapETH2LD(label, account, initialFuses, EMPTY_ADDRESS) + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.setSubnodeOwnerAndWrap( + nameHash, + subLabel, + account, + initialFuses + ) + + await increaseTime(DAY * GRACE_PERIOD + DAY + 1) + await mine() + + await BaseRegistrar.register(labelHash, account, 84600) + + let [fuses, vulnerability, vulnerableNode] = await NameWrapper.getFuses( + subNameHash + ) + + expect(fuses).to.equal(initialFuses) + expect(vulnerability).to.equal(ParentVulnerability.Registrant) + expect(vulnerableNode).to.equal(nameHash) + }) + + it('identifies vulnerability is registrant is not the wrapper and vulnerable node', async () => { + const GRACE_PERIOD = 90 + const DAY = 24 * 60 * 60 + + const initialFuses = CANNOT_UNWRAP | CANNOT_REPLACE_SUBDOMAIN + await BaseRegistrar.setApprovalForAll(NameWrapper.address, true) + await BaseRegistrar.register(labelHash, account, DAY) + await NameWrapper.wrapETH2LD(label, account, initialFuses, EMPTY_ADDRESS) + await EnsRegistry.setApprovalForAll(NameWrapper.address, true) + await NameWrapper.setSubnodeOwnerAndWrap( + nameHash, + subLabel, + account, + initialFuses + ) + + await NameWrapper.setSubnodeOwnerAndWrap( + subNameHash, + subSubLabel, + account, + initialFuses + ) + + await increaseTime(DAY * GRACE_PERIOD + DAY + 1) + await mine() + + // re-register the name + await BaseRegistrar.register(labelHash, account, 84600) + // setup the subnode outside the wrapper + await EnsRegistry.setSubnodeOwner(nameHash, subLabelHash, account) + // rewrap the name above, without wrapping the subnode + await NameWrapper.wrapETH2LD(label, account, initialFuses, EMPTY_ADDRESS) + + let [fuses, vulnerability, vulnerableNode] = await NameWrapper.getFuses( + subNameHash + ) + + expect(fuses).to.equal(initialFuses) + expect(vulnerability).to.equal(ParentVulnerability.Controller) + expect(vulnerableNode).to.equal(subNameHash) + }) + }) + + describe('registerAndWrapETH2LD', () => { + const label = 'register' + const labelHash = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + + before(async () => { + await BaseRegistrar.addController(NameWrapper.address) + await NameWrapper.setController(account, true) + }) + + it('should register and wrap names', async () => { + await NameWrapper.registerAndWrapETH2LD( + label, + account, + 86400, + EMPTY_ADDRESS, + CAN_DO_EVERYTHING + ) + + expect(await BaseRegistrar.ownerOf(labelHash)).to.equal( + NameWrapper.address + ) + expect(await EnsRegistry.owner(wrappedTokenId)).to.equal( + NameWrapper.address + ) + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account) + }) + + it('allows specifying a resolver address', async () => { + await NameWrapper.registerAndWrapETH2LD( + label, + account, + 86400, + account2, + CAN_DO_EVERYTHING + ) + + expect(await EnsRegistry.resolver(wrappedTokenId)).to.equal(account2) + }) + + it('does not allow non controllers to register names', async () => { + await NameWrapper.setController(account, false) + await expect( + NameWrapper.registerAndWrapETH2LD( + label, + account, + 86400, + EMPTY_ADDRESS, + CAN_DO_EVERYTHING + ) + ).to.be.revertedWith('') + }) + + it('emits Wrap event', async () => { + const tx = await NameWrapper.registerAndWrapETH2LD( + label, + account, + 86400, + EMPTY_ADDRESS, + CAN_DO_EVERYTHING + ) + await expect(tx) + .to.emit(NameWrapper, 'NameWrapped') + .withArgs( + wrappedTokenId, + encodeName('register.eth'), + account, + CAN_DO_EVERYTHING + ) + }) + + it('emits TransferSingle event', async () => { + const tx = await NameWrapper.registerAndWrapETH2LD( + label, + account, + 86400, + EMPTY_ADDRESS, + CAN_DO_EVERYTHING + ) + await expect(tx) + .to.emit(NameWrapper, 'TransferSingle') + .withArgs(account, EMPTY_ADDRESS, account, wrappedTokenId, 1) + }) + + it('Transfers the wrapped token to the target address.', async () => { + await NameWrapper.registerAndWrapETH2LD( + label, + account2, + 86400, + EMPTY_ADDRESS, + CAN_DO_EVERYTHING + ) + expect(await NameWrapper.ownerOf(wrappedTokenId)).to.equal(account2) + }) + + it('Does not allow wrapping with a target address of 0x0', async () => { + await expect( + NameWrapper.registerAndWrapETH2LD( + label, + EMPTY_ADDRESS, + 86400, + EMPTY_ADDRESS, + CAN_DO_EVERYTHING + ) + ).to.be.revertedWith('ERC1155: mint to the zero address') + }) + + it('Does not allow wrapping with a target address of the wrapper contract address.', async () => { + await expect( + NameWrapper.registerAndWrapETH2LD( + label, + NameWrapper.address, + 86400, + EMPTY_ADDRESS, + CAN_DO_EVERYTHING + ) + ).to.be.revertedWith( + 'ERC1155: newOwner cannot be the NameWrapper contract' + ) + }) + + it('Does not allows fuse to be burned if CANNOT_UNWRAP has not been burned.', async () => { + await expect( + NameWrapper.registerAndWrapETH2LD( + label, + account, + 86400, + EMPTY_ADDRESS, + CANNOT_SET_RESOLVER + ) + ).to.be.revertedWith( + 'NameWrapper: Cannot burn fuses: domain can be unwrapped' + ) + }) + + it('Allows fuse to be burned if CANNOT_UNWRAP has been burned.', async () => { + const initialFuses = CANNOT_UNWRAP | CANNOT_SET_RESOLVER + await NameWrapper.registerAndWrapETH2LD( + label, + account, + 86400, + EMPTY_ADDRESS, + initialFuses + ) + const [fuses, vulnerability, vulnerableNode] = await NameWrapper.getFuses( + wrappedTokenId + ) + expect(fuses).to.equal(initialFuses) + expect(vulnerability).to.equal(ParentVulnerability.Safe) + }) + + it('Will not wrap a name with an empty label', async () => { + await expect( + NameWrapper.registerAndWrapETH2LD( + '', + account, + 86400, + EMPTY_ADDRESS, + CAN_DO_EVERYTHING + ) + ).to.be.revertedWith('NameWrapper: Label too short') + }) + }) + + describe('renew', () => { + const label = 'register' + const labelHash = labelhash(label) + const wrappedTokenId = namehash(label + '.eth') + + before(async () => { + await BaseRegistrar.addController(NameWrapper.address) + await NameWrapper.setController(account, true) + }) + + it('renews names', async () => { + await NameWrapper.registerAndWrapETH2LD( + label, + account, + 86400, + EMPTY_ADDRESS, + CAN_DO_EVERYTHING + ) + const expires = await BaseRegistrar.nameExpires(labelHash) + await NameWrapper.renew(labelHash, 86400) + expect(await BaseRegistrar.nameExpires(labelHash)).to.equal( + expires.toNumber() + 86400 + ) + }) + }) + + describe('Controllable', () => { + it('allows the owner to add and remove controllers', async () => { + const tx = await NameWrapper.setController(account, true) + expect(tx) + .to.emit(NameWrapper, 'ControllerChanged') + .withArgs(account, true) + + const tx2 = await NameWrapper.setController(account, false) + expect(tx2) + .to.emit(NameWrapper, 'ControllerChanged') + .withArgs(account, false) + }) + + it('does not allow non-owners to add or remove controllers', async () => { + await NameWrapper.setController(account, true) + + await expect(NameWrapper2.setController(account2, true)).to.be.reverted + await expect(NameWrapper2.setController(account, false)).to.be.reverted + }) + }) + + describe('MetadataService', () => { + it('uri() returns url', async () => { + expect(await NameWrapper.uri(123)).to.equal('https://ens.domains') + }) + + it('owner can set a new MetadataService', async () => { + await NameWrapper.setMetadataService(account2) + expect(await NameWrapper.metadataService()).to.equal(account2) + }) + + it('non-owner cannot set a new MetadataService', async () => { + await expect( + NameWrapper2.setMetadataService(account2) + ).to.be.revertedWith('Ownable: caller is not the owner') + }) + }) +}) diff --git a/test/wrapper/SupportsInterface.behaviour.js b/test/wrapper/SupportsInterface.behaviour.js new file mode 100644 index 00000000..eea646fa --- /dev/null +++ b/test/wrapper/SupportsInterface.behaviour.js @@ -0,0 +1,133 @@ +// Based on https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/test/token/ERC1155/ERC1155.behaviour.js +// Copyright (c) 2016-2020 zOS Global Limited + +const { makeInterfaceId } = require('@openzeppelin/test-helpers') + +const { expect } = require('chai') + +const INTERFACES = { + ERC165: ['supportsInterface(bytes4)'], + ERC721: [ + 'balanceOf(address)', + 'ownerOf(uint256)', + 'approve(address,uint256)', + 'getApproved(uint256)', + 'setApprovalForAll(address,bool)', + 'isApprovedForAll(address,address)', + 'transferFrom(address,address,uint256)', + 'safeTransferFrom(address,address,uint256)', + 'safeTransferFrom(address,address,uint256,bytes)', + ], + ERC721Enumerable: [ + 'totalSupply()', + 'tokenOfOwnerByIndex(address,uint256)', + 'tokenByIndex(uint256)', + ], + ERC721Metadata: ['name()', 'symbol()', 'tokenURI(uint256)'], + ERC1155: [ + 'balanceOf(address,uint256)', + 'balanceOfBatch(address[],uint256[])', + 'setApprovalForAll(address,bool)', + 'isApprovedForAll(address,address)', + 'safeTransferFrom(address,address,uint256,uint256,bytes)', + 'safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)', + ], + ERC1155Receiver: [ + 'onERC1155Received(address,address,uint256,uint256,bytes)', + 'onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)', + ], + AccessControl: [ + 'hasRole(bytes32,address)', + 'getRoleAdmin(bytes32)', + 'grantRole(bytes32,address)', + 'revokeRole(bytes32,address)', + 'renounceRole(bytes32,address)', + ], + AccessControlEnumerable: [ + 'getRoleMember(bytes32,uint256)', + 'getRoleMemberCount(bytes32)', + ], + INameWrapper: [ + 'ens()', + 'registrar()', + 'metadataService()', + 'names(bytes32)', + 'wrap(bytes,address,uint96,address)', + 'wrapETH2LD(string,address,uint96,address)', + 'registerAndWrapETH2LD(string,address,uint256,address,uint96)', + 'renew(uint256,uint256)', + 'unwrap(bytes32,bytes32,address)', + 'unwrapETH2LD(bytes32,address,address)', + 'burnFuses(bytes32,uint96)', + 'setSubnodeRecord(bytes32,bytes32,address,address,uint64)', + 'setSubnodeRecordAndWrap(bytes32,string,address,address,uint64,uint96)', + 'setRecord(bytes32,address,address,uint64)', + 'setSubnodeOwner(bytes32,bytes32,address)', + 'setSubnodeOwnerAndWrap(bytes32,string,address,uint96)', + 'isTokenOwnerOrApproved(bytes32,address)', + 'setResolver(bytes32,address)', + 'setTTL(bytes32,uint64)', + 'getFuses(bytes32)', + 'allFusesBurned(bytes32,uint96)', + ], +} + +const INTERFACE_IDS = {} +const FN_SIGNATURES = {} +for (const k of Object.getOwnPropertyNames(INTERFACES)) { + INTERFACE_IDS[k] = makeInterfaceId.ERC165(INTERFACES[k]) + for (const fnName of INTERFACES[k]) { + // the interface id of a single function is equivalent to its function signature + FN_SIGNATURES[fnName] = makeInterfaceId.ERC165([fnName]) + } +} + +function shouldSupportInterfaces(contractUnderTest, interfaces = []) { + describe('Contract interface', function () { + beforeEach(function () { + this.contractUnderTest = contractUnderTest() + }) + + for (const k of interfaces) { + const interfaceId = INTERFACE_IDS[k] + describe(k, function () { + describe("ERC165's supportsInterface(bytes4)", function () { + it('uses less than 30k gas [skip-on-coverage]', async function () { + expect( + await this.contractUnderTest.estimateGas.supportsInterface( + interfaceId + ) + ).to.be.lte(30000) + }) + + it('claims support', async function () { + expect( + await this.contractUnderTest.supportsInterface(interfaceId) + ).to.equal(true) + }) + }) + + for (const fnName of INTERFACES[k]) { + const fnSig = FN_SIGNATURES[fnName] + describe(fnName, function () { + it('has to be implemented', function () { + expect( + this.contractUnderTest.interface.getFunction(fnSig) + ).to.not.throw + }) + }) + } + }) + } + + it('does not implement the forbidden interface', async function () { + expect( + await this.contractUnderTest.supportsInterface('0xffffffff') + ).to.equal(false) + }) + }) +} + +module.exports = { + shouldSupportInterfaces, +} diff --git a/yarn.lock b/yarn.lock index aca4b88a..19349297 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,30 +3,45 @@ "@babel/code-frame@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" + integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== dependencies: - "@babel/highlight" "^7.12.13" + "@babel/highlight" "^7.14.5" -"@babel/helper-validator-identifier@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" - integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== +"@babel/helper-validator-identifier@^7.14.5": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== -"@babel/highlight@^7.12.13": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" - integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== dependencies: - "@babel/helper-validator-identifier" "^7.14.0" + "@babel/helper-validator-identifier" "^7.14.5" chalk "^2.0.0" js-tokens "^4.0.0" -"@ensdomains/buffer@^0.0.10": - version "0.0.10" - resolved "https://registry.yarnpkg.com/@ensdomains/buffer/-/buffer-0.0.10.tgz#3b9f8b6a34c6160ae8a8cb8f0f033aa35c1a9970" - integrity sha512-EOFqiWnN36EyyBAgHFTsabFcFICUALt41SiDm/4pAw4V36R4lD4wHcnZcqCYki9m1fMaeWGHrdqxmrMa8iiSTQ== +"@babel/runtime@^7.4.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" + integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== + dependencies: + regenerator-runtime "^0.13.4" + +"@ensdomains/address-encoder@^0.1.7": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz#f948c485443d9ef7ed2c0c4790e931c33334d02d" + integrity sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg== + dependencies: + bech32 "^1.1.3" + blakejs "^1.1.0" + bn.js "^4.11.8" + bs58 "^4.0.1" + crypto-addr-codec "^0.1.7" + nano-base32 "^1.0.1" + ripemd160 "^2.0.2" "@ensdomains/buffer@^0.0.13": version "0.0.13" @@ -36,21 +51,26 @@ "@nomiclabs/hardhat-truffle5" "^2.0.0" "@ensdomains/dnsprovejs@^0.3.7": - version "0.3.7" - resolved "https://registry.yarnpkg.com/@ensdomains/dnsprovejs/-/dnsprovejs-0.3.7.tgz#682a0d3efd2b0e380fd7b65dc20235250af75782" - integrity sha512-5aLdt/4VHFW5NmsN0JI243v2kbgvbxM3n89Wj13F0QuQPk7u/X5dwAzdorqigVWvijNh6BX8J9yWbJuTRofk2A== + version "0.3.9" + resolved "https://registry.yarnpkg.com/@ensdomains/dnsprovejs/-/dnsprovejs-0.3.9.tgz#4c06dd613f57be889f1031192356a451b3f1963b" + integrity sha512-e54bpUEkOsbRzH5Seh7VmRN+i82uZ+cp4HyVb8EvaH6/b6sbkGKzxIigXVOi8MvwLs44gCN9GBIzngQKJE6osQ== dependencies: dns-packet "^5.2.1" ethereumjs-util "^7.0.7" typescript-logging "^1.0.0" -"@ensdomains/ens-contracts@0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@ensdomains/ens-contracts/-/ens-contracts-0.0.3.tgz#7023a3ad8e74431fa64c550f63c5730d9cb64303" - integrity sha512-da67JjAFjl8gLDDAqYQs5PSvth9usBcD7clXiXpfvJTMJnZnR+c/cG6xrkVgL4qEP7jmI+iEoj0y29qFtupy2w== +"@ensdomains/ens@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.3.tgz#f4a6b55146fe526c9a50e13f373bf90d36ca94dc" + integrity sha512-btC+fGze//ml8SMNCx5DgwM8+kG2t+qDCZrqlL/2+PV4CNxnRIpR3egZ49D9FqS52PFoYLmz6MaQfl7AO3pUMA== dependencies: - "@ensdomains/buffer" "^0.0.10" - "@openzeppelin/contracts" "^4.1.0" + bluebird "^3.5.2" + eth-ens-namehash "^2.0.8" + ethereumjs-testrpc "^6.0.3" + ganache-cli "^6.1.0" + solc "^0.4.20" + testrpc "0.0.1" + web3-utils "^1.0.0-beta.31" "@ensdomains/ens@^0.4.4": version "0.4.5" @@ -63,7 +83,21 @@ testrpc "0.0.1" web3-utils "^1.0.0-beta.31" -"@ensdomains/resolver@^0.2.4": +"@ensdomains/ensjs@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@ensdomains/ensjs/-/ensjs-2.0.1.tgz#c27438f9ca074825ddb08430988c7decf2062a91" + integrity sha512-gZLntzE1xqPNkPvaHdJlV5DXHms8JbHBwrXc2xNrL1AylERK01Lj/txCCZyVQqFd3TvUO1laDbfUv8VII0qrjg== + dependencies: + "@babel/runtime" "^7.4.4" + "@ensdomains/address-encoder" "^0.1.7" + "@ensdomains/ens" "0.4.3" + "@ensdomains/resolver" "0.2.4" + content-hash "^2.5.2" + eth-ens-namehash "^2.0.8" + ethers "^5.0.13" + js-sha3 "^0.8.0" + +"@ensdomains/resolver@0.2.4", "@ensdomains/resolver@^0.2.4": version "0.2.4" resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== @@ -83,38 +117,13 @@ bluebird "^3.5.2" dns-packet "^5.0.4" -"@ethereum-waffle/chai@^3.3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.3.1.tgz#3f20b810d0fa516f19af93c50c3be1091333fa8e" - integrity sha512-+vepCjttfOzCSnmiVEmd1bR8ctA2wYVrtWa8bDLhnTpj91BIIHotNDTwpeq7fyjrOCIBTN3Ai8ACfjNoatc4OA== - dependencies: - "@ethereum-waffle/provider" "^3.3.1" - ethers "^5.0.0" - "@ethereum-waffle/chai@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.0.tgz#2477877410a96bf370edd64df905b04fb9aba9d5" - integrity sha512-GVaFKuFbFUclMkhHtQTDnWBnBQMJc/pAbfbFj/nnIK237WPLsO3KDDslA7m+MNEyTAOFrcc0CyfruAGGXAQw3g== + version "3.4.1" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.1.tgz#500b59db766a490cb19a7f74ac75a1c3cf86049b" + integrity sha512-8mjgjWCe8XSCWuyJgVtJY8sm00VTczGBTDxBejgEBWN/J9x7QD8jdmWW8bfxdnqZbxiDCTvRFL58Wmd254BEqQ== dependencies: "@ethereum-waffle/provider" "^3.4.0" - ethers "^5.0.0" - -"@ethereum-waffle/compiler@^3.3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.3.1.tgz#946128fd565aa4347075fd716dbd0f3f38189280" - integrity sha512-X/TeQugt94AQwXEdCjIQxcXYGawNulVBYEBE7nloj4wE/RBxNolXwjoVNjcS4kuiMMbKkdO0JkL5sn6ixx8bDg== - 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.0" - solc "^0.6.3" - ts-generator "^0.1.1" - typechain "^3.0.0" + ethers "^5.4.7" "@ethereum-waffle/compiler@^3.4.0": version "3.4.0" @@ -133,15 +142,6 @@ ts-generator "^0.1.1" typechain "^3.0.0" -"@ethereum-waffle/ens@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.2.4.tgz#c486be4879ea7107e1ff01b24851a5e44f5946ce" - integrity sha512-lkRVPCEkk7KOwH9MqFMB+gL0X8cZNsm+MnKpP9CNbAyhFos2sCDGcY8t6BA12KBK6pdMuuRXPxYL9WfPl9bqSQ== - dependencies: - "@ensdomains/ens" "^0.4.4" - "@ensdomains/resolver" "^0.2.4" - ethers "^5.0.1" - "@ethereum-waffle/ens@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.3.0.tgz#d54f4c8e6b7bcafdc13ab294433f45416b2b2791" @@ -151,14 +151,6 @@ "@ensdomains/resolver" "^0.2.4" ethers "^5.0.1" -"@ethereum-waffle/mock-contract@^3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.2.2.tgz#5749b03cbb4850150f81cf66151c4523eb7436f0" - integrity sha512-H60Cc5C7sYNU4LuPMSKDh8YIaN9/fkwEjznY78CEbOosO+lMlFYdA+5VZjeDGDuYKfsBqsocQdkj1CRyoi1KNw== - dependencies: - "@ethersproject/abi" "^5.0.1" - ethers "^5.0.1" - "@ethereum-waffle/mock-contract@^3.3.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.3.0.tgz#7b331f1c95c5d46ee9478f7a6be2869f707d307a" @@ -167,17 +159,6 @@ "@ethersproject/abi" "^5.0.1" ethers "^5.0.1" -"@ethereum-waffle/provider@^3.3.0", "@ethereum-waffle/provider@^3.3.1": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.3.2.tgz#33677baf6af5cbb087c3072d84f38c152968ebb1" - integrity sha512-ilz6cXK0ylSKCmZktTMpY4gjo0CN6rb86JfN7+RZYk6tKtZA6sXoOe95skWEQkGf1fZk7G817fTzLb0CmFDp1g== - dependencies: - "@ethereum-waffle/ens" "^3.2.4" - ethers "^5.0.1" - ganache-core "^2.13.2" - patch-package "^6.2.2" - postinstall-postinstall "^2.1.0" - "@ethereum-waffle/provider@^3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.4.0.tgz#a36a0890d4fbc230e807870c8d3b683594efef00" @@ -189,114 +170,74 @@ patch-package "^6.2.2" postinstall-postinstall "^2.1.0" -"@ethereumjs/block@^3.2.0", "@ethereumjs/block@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.2.1.tgz#c24c345e6dd6299efa4bed40979280b7dda96d3a" - integrity sha512-FCxo5KwwULne2A2Yuae4iaGGqSsRjwzXOlDhGalOFiBbLfP3hE04RHaHGw4c8vh1PfOrLauwi0dQNUBkOG3zIA== - dependencies: - "@ethereumjs/common" "^2.2.0" - "@ethereumjs/tx" "^3.1.3" - ethereumjs-util "^7.0.10" - merkle-patricia-tree "^4.1.0" - -"@ethereumjs/block@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.3.0.tgz#a1b3baec831c71c0d9e7f6145f25e919cff4939c" - integrity sha512-WoefY9Rs4W8vZTxG9qwntAlV61xsSv0NPoXmHO7x3SH16dwJQtU15YvahPCz4HEEXbu7GgGgNgu0pv8JY7VauA== - dependencies: - "@ethereumjs/common" "^2.3.0" - "@ethereumjs/tx" "^3.2.0" - ethereumjs-util "^7.0.10" - merkle-patricia-tree "^4.2.0" - -"@ethereumjs/blockchain@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.2.1.tgz#83ed83647667265f1666f111caf065ef9d1e82b5" - integrity sha512-+hshP2qSOOFsiYvZCbaDQFG7jYTWafE8sfBi+pAsdhAHfP7BN7VLyob7qoQISgwS1s7NTR4c4+2t/woU9ahItw== - dependencies: - "@ethereumjs/block" "^3.2.0" - "@ethereumjs/common" "^2.2.0" - "@ethereumjs/ethash" "^1.0.0" - debug "^2.2.0" - ethereumjs-util "^7.0.9" - level-mem "^5.0.1" - lru-cache "^5.1.1" - rlp "^2.2.4" - semaphore-async-await "^1.5.1" - -"@ethereumjs/blockchain@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.3.0.tgz#206936e30a4320d87a26e58d157eadef21ef6ff1" - integrity sha512-B0Y5QDZcRDQISPilv3m8nzk97QmC98DnSE9WxzGpCxfef22Mw7xhwGipci5Iy0dVC2Np2Cr5d3F6bHAR7+yVmQ== - dependencies: - "@ethereumjs/block" "^3.3.0" - "@ethereumjs/common" "^2.3.0" - "@ethereumjs/ethash" "^1.0.0" +"@ethereumjs/block@^3.4.0", "@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.5.1.tgz#59737d393503249aa750c37dfc83896234f4e175" + integrity sha512-MoY9bHKABOBK6BW0v1N1Oc0Cve4x/giX67M3TtrVBUsKQTj2eznLGKpydoitxWSZ+WgKKSVhfRMzbCGRwk7T5w== + dependencies: + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.1" + ethereumjs-util "^7.1.1" + merkle-patricia-tree "^4.2.1" + +"@ethereumjs/blockchain@^5.4.0", "@ethereumjs/blockchain@^5.4.1": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.4.2.tgz#5074e0a0157818762a5f5175ea0bd93c5455fe32" + integrity sha512-AOAAwz/lw2lciG9gf5wHi7M/qknraXXnLR66lYgbQ04qfyFC3ZE5x/5rLVm1Vu+kfJLlKrYZTmA0IbOkc7kvgw== + dependencies: + "@ethereumjs/block" "^3.5.1" + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/ethash" "^1.1.0" debug "^2.2.0" - ethereumjs-util "^7.0.10" + ethereumjs-util "^7.1.1" level-mem "^5.0.1" lru-cache "^5.1.1" rlp "^2.2.4" semaphore-async-await "^1.5.1" -"@ethereumjs/common@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.2.0.tgz#850a3e3e594ee707ad8d44a11e8152fb62450535" - integrity sha512-PyQiTG00MJtBRkJmv46ChZL8u2XWxNBeAthznAUIUiefxPAXjbkuiCZOuncgJS34/XkMbNc9zMt/PlgKRBElig== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.0.9" - -"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.3.1.tgz#d692e3aff5adb35dd587dd1e6caab69e0ed2fa0b" - integrity sha512-V8hrULExoq0H4HFs3cCmdRGbgmipmlNzak6Xg34nHYfQyqkSdrCuflvYjyWmsNpI8GtrcZhzifAbgX/1C1Cjwg== +"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" + integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== dependencies: crc-32 "^1.2.0" - ethereumjs-util "^7.0.10" + ethereumjs-util "^7.1.1" -"@ethereumjs/ethash@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.0.0.tgz#4e77f85b37be1ade5393e8719bdabac3e796ddaa" - integrity sha512-iIqnGG6NMKesyOxv2YctB2guOVX18qMAWlj3QlZyrc+GqfzLqoihti+cVNQnyNxr7eYuPdqwLQOFuPe6g/uKjw== +"@ethereumjs/ethash@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" + integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== dependencies: + "@ethereumjs/block" "^3.5.0" "@types/levelup" "^4.3.0" buffer-xor "^2.0.1" - ethereumjs-util "^7.0.7" + ethereumjs-util "^7.1.1" miller-rabin "^4.0.0" -"@ethereumjs/tx@^3.1.3": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.1.4.tgz#04cf9e9406da5f04a1a26c458744641f4b4b8dd0" - integrity sha512-6cJpmmjCpG5ZVN9NJYtWvmrEQcevw9DIR8hj2ca2PszD2fxbIFXky3Z37gpf8S6u0Npv09kG8It+G4xjydZVLg== - dependencies: - "@ethereumjs/common" "^2.2.0" - ethereumjs-util "^7.0.10" - -"@ethereumjs/tx@^3.2.0", "@ethereumjs/tx@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.2.1.tgz#65f5f1c11541764f08377a94ba4b0dcbbd67739e" - integrity sha512-i9V39OtKvwWos1uVNZxdVhd7zFOyzFLjgt69CoiOY0EmXugS0HjO3uxpLBSglDKFMRriuGqw6ddKEv+RP1UNEw== +"@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.3.1": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" + integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog== dependencies: - "@ethereumjs/common" "^2.3.1" - ethereumjs-util "^7.0.10" + "@ethereumjs/common" "^2.5.0" + ethereumjs-util "^7.1.2" -"@ethereumjs/vm@^5.3.2": - version "5.3.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.3.2.tgz#b4d83a3d50a7ad22d6d412cc21bbde221b3e2871" - integrity sha512-QmCUQrW6xbhgEbQh9njue4kAJdM056C+ytBFUTF/kDYa3kNDm4Qxp9HUyTlt1OCSXvDhws0qqlh8+q+pmXpN7g== +"@ethereumjs/vm@^5.5.2": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.5.3.tgz#dc8b30dd35efb589db093592600207660fa8dada" + integrity sha512-0k5OreWnlgXYs54wohgO11jtGI05GDasj2EYxzuaStxTi15CS3vow5wGYELC1pG9xngE1F/mFmKi/f14XRuDow== dependencies: - "@ethereumjs/block" "^3.2.1" - "@ethereumjs/blockchain" "^5.2.1" - "@ethereumjs/common" "^2.2.0" - "@ethereumjs/tx" "^3.1.3" + "@ethereumjs/block" "^3.5.0" + "@ethereumjs/blockchain" "^5.4.1" + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.1" async-eventemitter "^0.2.4" core-js-pure "^3.0.1" debug "^2.2.0" - ethereumjs-util "^7.0.10" + ethereumjs-util "^7.1.1" functional-red-black-tree "^1.0.1" mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.1.0" + merkle-patricia-tree "^4.2.1" rustbn.js "~0.2.0" util.promisify "^1.0.1" @@ -330,40 +271,10 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.1.2", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.0": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.1.2.tgz#a8e75cd0455e6dc9e4861c3d1c22bbe436c1d775" - integrity sha512-uMhoQVPX0UtfzTpekYQSEUcJGDgsJ25ifz+SV6PDETWaUFhcR8RNgb1QPTASP13inW8r6iy0/Xdq9D5hK2pNvA== - dependencies: - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/abi@5.3.1", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.3.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.3.1.tgz#69a1a496729d3a83521675a57cbe21f3cc27241c" - integrity sha512-F98FWTJG7nWWAQ4DcV6R0cSlrj67MWK3ylahuFbzkumem5cLWg1p7fZ3vIdRoS1c7TEf55Lvyx0w7ICR47IImw== - dependencies: - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - -"@ethersproject/abi@^5.3.1", "@ethersproject/abi@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" - integrity sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw== +"@ethersproject/abi@5.4.1", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.3.1", "@ethersproject/abi@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.1.tgz#6ac28fafc9ef6f5a7a37e30356a2eb31fa05d39b" + integrity sha512-9mhbjUk76BiSluiiW4BaYyI58KSbDMMQpCLdsAR+RsT2GyATiNYxVv+pGWRrekmsIdY3I+hOqsYQSTkc8L/mcg== dependencies: "@ethersproject/address" "^5.4.0" "@ethersproject/bignumber" "^5.4.0" @@ -375,36 +286,10 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/abstract-provider@5.1.0", "@ethersproject/abstract-provider@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz#1f24c56cda5524ef4ed3cfc562a01d6b6f8eeb0b" - integrity sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/networks" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/web" "^5.1.0" - -"@ethersproject/abstract-provider@5.3.0", "@ethersproject/abstract-provider@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.3.0.tgz#f4c0ae4a4cef9f204d7781de805fd44b72756c81" - integrity sha512-1+MLhGP1GwxBDBNwMWVmhCsvKwh4gK7oIfOrmlmePNeskg1NhIrYssraJBieaFNHUYfKEd/1DjiVZMw8Qu5Cxw== - dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/networks" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/web" "^5.3.0" - -"@ethersproject/abstract-provider@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.0.tgz#415331031b0f678388971e1987305244edc04e1d" - integrity sha512-vPBR7HKUBY0lpdllIn7tLIzNN7DrVnhCLKSzY0l8WAwxz686m/aL7ASDzrVxV93GJtIub6N2t4dfZ29CkPOxgA== +"@ethersproject/abstract-provider@5.4.1", "@ethersproject/abstract-provider@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz#e404309a29f771bd4d28dbafadcaa184668c2a6e" + integrity sha512-3EedfKI3LVpjSKgAxoUaI+gB27frKsxzm+r21w9G60Ugk+3wVLQwhi1LsEJAKNV7WoZc8CIpNrATlL1QFABjtQ== dependencies: "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" @@ -414,32 +299,10 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/web" "^5.4.0" -"@ethersproject/abstract-signer@5.1.0", "@ethersproject/abstract-signer@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz#744c7a2d0ebe3cc0bc38294d0f53d5ca3f4e49e3" - integrity sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - -"@ethersproject/abstract-signer@5.3.0", "@ethersproject/abstract-signer@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.3.0.tgz#05172b653e15b535ed5854ef5f6a72f4b441052d" - integrity sha512-w8IFwOYqiPrtvosPuArZ3+QPR2nmdVTRrVY8uJYL3NNfMmQfTy3V3l2wbzX47UUlNbPJY+gKvzJAyvK1onZxJg== - dependencies: - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - -"@ethersproject/abstract-signer@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.0.tgz#cd5f50b93141ee9f9f49feb4075a0b3eafb57d65" - integrity sha512-AieQAzt05HJZS2bMofpuxMEp81AHufA5D6M4ScKwtolj041nrfIbIi8ciNW7+F59VYxXq+V4c3d568Q6l2m8ew== +"@ethersproject/abstract-signer@5.4.1", "@ethersproject/abstract-signer@^5.3.0", "@ethersproject/abstract-signer@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81" + integrity sha512-SkkFL5HVq1k4/25dM+NWP9MILgohJCgGv5xT5AcRruGz4ILpfHeBtO/y6j+Z3UN/PAjDeb4P7E51Yh8wcGNLGA== dependencies: "@ethersproject/abstract-provider" "^5.4.0" "@ethersproject/bignumber" "^5.4.0" @@ -447,29 +310,7 @@ "@ethersproject/logger" "^5.4.0" "@ethersproject/properties" "^5.4.0" -"@ethersproject/address@5.1.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.1.0.tgz#3854fd7ebcb6af7597de66f847c3345dae735b58" - integrity sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - -"@ethersproject/address@5.3.0", "@ethersproject/address@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.3.0.tgz#e53b69eacebf332e8175de814c5e6507d6932518" - integrity sha512-29TgjzEBK+gUEUAOfWCG7s9IxLNLCqvr+oDSk6L9TXD0VLvZJKhJV479tKQqheVA81OeGxfpdxYtUVH8hqlCvA== - dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/rlp" "^5.3.0" - -"@ethersproject/address@^5.4.0": +"@ethersproject/address@5.4.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.3.0", "@ethersproject/address@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== @@ -480,44 +321,14 @@ "@ethersproject/logger" "^5.4.0" "@ethersproject/rlp" "^5.4.0" -"@ethersproject/base64@5.1.0", "@ethersproject/base64@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.1.0.tgz#27240c174d0a4e13f6eae87416fd876caf7f42b6" - integrity sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g== - dependencies: - "@ethersproject/bytes" "^5.1.0" - -"@ethersproject/base64@5.3.0", "@ethersproject/base64@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.3.0.tgz#b831fb35418b42ad24d943c557259062b8640824" - integrity sha512-JIqgtOmgKcbc2sjGWTXyXktqUhvFUDte8fPVsAaOrcPiJf6YotNF+nsrOYGC9pbHBEGSuSBp3QR0varkO8JHEw== - dependencies: - "@ethersproject/bytes" "^5.3.0" - -"@ethersproject/base64@^5.4.0": +"@ethersproject/base64@5.4.0", "@ethersproject/base64@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== dependencies: "@ethersproject/bytes" "^5.4.0" -"@ethersproject/basex@5.1.0", "@ethersproject/basex@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.1.0.tgz#80da2e86f9da0cb5ccd446b337364d791f6a131c" - integrity sha512-vBKr39bum7DDbOvkr1Sj19bRMEPA4FnST6Utt6xhDzI7o7L6QNkDn2yrCfP+hnvJGhZFKtLygWwqlTBZoBXYLg== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - -"@ethersproject/basex@5.3.0", "@ethersproject/basex@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.3.0.tgz#02dea3ab8559ae625c6d548bc11773432255c916" - integrity sha512-8J4nS6t/SOnoCgr3DF5WCSRLC5YwTKYpZWJqeyYQLX+86TwPhtzvHXacODzcDII9tWKhVg6g0Bka8JCBWXsCiQ== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - -"@ethersproject/basex@^5.4.0": +"@ethersproject/basex@5.4.0", "@ethersproject/basex@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6" integrity sha512-J07+QCVJ7np2bcpxydFVf/CuYo9mZ7T73Pe7KQY4c1lRlrixMeblauMxHXD0MPwFmUHZIILDNViVkykFBZylbg== @@ -525,111 +336,33 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/properties" "^5.4.0" -"@ethersproject/bignumber@5.1.1", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.1.1.tgz#84812695253ccbc639117f7ac49ee1529b68e637" - integrity sha512-AVz5iqz7+70RIqoQTznsdJ6DOVBYciNlvO+AlQmPTB6ofCvoihI9bQdr6wljsX+d5W7Yc4nyvQvP4JMzg0Agig== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - bn.js "^4.4.0" - -"@ethersproject/bignumber@5.3.0", "@ethersproject/bignumber@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.3.0.tgz#74ab2ec9c3bda4e344920565720a6ee9c794e9db" - integrity sha512-5xguJ+Q1/zRMgHgDCaqAexx/8DwDVLRemw2i6uR8KyGjwGdXI8f32QZZ1cKGucBN6ekJvpUpHy6XAuQnTv0mPA== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - bn.js "^4.11.9" - -"@ethersproject/bignumber@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.0.tgz#be8dea298c0ec71208ee60f0b245be0761217ad9" - integrity sha512-OXUu9f9hO3vGRIPxU40cignXZVaYyfx6j9NNMjebKdnaCL3anCLSSy8/b8d03vY6dh7duCC0kW72GEC4tZer2w== +"@ethersproject/bignumber@5.4.2", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.3.0", "@ethersproject/bignumber@^5.4.0": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.2.tgz#44232e015ae4ce82ac034de549eb3583c71283d8" + integrity sha512-oIBDhsKy5bs7j36JlaTzFgNPaZjiNDOXsdSgSpXRucUl+UA6L/1YLlFeI3cPAoodcenzF4nxNPV13pcy7XbWjA== dependencies: "@ethersproject/bytes" "^5.4.0" "@ethersproject/logger" "^5.4.0" bn.js "^4.11.9" -"@ethersproject/bytes@5.1.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.1.0.tgz#55dfa9c4c21df1b1b538be3accb50fb76d5facfd" - integrity sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g== - dependencies: - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/bytes@5.3.0", "@ethersproject/bytes@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.3.0.tgz#473e0da7f831d535b2002be05e6f4ca3729a1bc9" - integrity sha512-rqLJjdVqCcn7glPer7Fxh87PRqlnRScVAoxcIP3PmOUNApMWJ6yRdOFfo2KvPAdO7Le3yEI1o0YW+Yvr7XCYvw== - dependencies: - "@ethersproject/logger" "^5.3.0" - -"@ethersproject/bytes@^5.4.0": +"@ethersproject/bytes@5.4.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.3.0", "@ethersproject/bytes@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/constants@5.1.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.1.0.tgz#4e7da6367ea0e9be87585d8b09f3fccf384b1452" - integrity sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - -"@ethersproject/constants@5.3.0", "@ethersproject/constants@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.3.0.tgz#a5d6d86c0eec2c64c3024479609493b9afb3fc77" - integrity sha512-4y1feNOwEpgjAfiCFWOHznvv6qUF/H6uI0UKp8xdhftb+H+FbKflXg1pOgH5qs4Sr7EYBL+zPyPb+YD5g1aEyw== - dependencies: - "@ethersproject/bignumber" "^5.3.0" - -"@ethersproject/constants@^5.4.0": +"@ethersproject/constants@5.4.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== dependencies: "@ethersproject/bignumber" "^5.4.0" -"@ethersproject/contracts@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.1.tgz#c66cb6d618fcbd73e20a6b808e8f768b2b781d0b" - integrity sha512-6WwktLJ0DFWU8pDkgH4IGttQHhQN4SnwKFu9h+QYVe48VGWtbDu4W8/q/7QA1u/HWlWMrKxqawPiZUJj0UMvOw== - dependencies: - "@ethersproject/abi" "^5.1.0" - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - -"@ethersproject/contracts@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.3.0.tgz#ad699a3abaae30bfb6422cf31813a663b2d4099c" - integrity sha512-eDyQ8ltykvyQqnGZxb/c1e0OnEtzqXhNNC4BX8nhYBCaoBrYYuK/1fLmyEvc5+XUMoxNhwpYkoSSwvPLci7/Zg== - dependencies: - "@ethersproject/abi" "^5.3.0" - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - -"@ethersproject/contracts@^5.3.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.0.tgz#e05fe6bd33acc98741e27d553889ec5920078abb" - integrity sha512-hkO3L3IhS1Z3ZtHtaAG/T87nQ7KiPV+/qnvutag35I0IkiQ8G3ZpCQ9NNOpSCzn4pWSW4CfzmtE02FcqnLI+hw== +"@ethersproject/contracts@5.4.1", "@ethersproject/contracts@^5.3.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.1.tgz#3eb4f35b7fe60a962a75804ada2746494df3e470" + integrity sha512-m+z2ZgPy4pyR15Je//dUaymRUZq5MtDajF6GwFbGAVmKz/RF+DNIPwF0k5qEcL3wPGVqUjFg2/krlCRVTU4T5w== dependencies: "@ethersproject/abi" "^5.4.0" "@ethersproject/abstract-provider" "^5.4.0" @@ -642,35 +375,7 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/transactions" "^5.4.0" -"@ethersproject/hash@5.1.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.1.0.tgz#40961d64837d57f580b7b055e0d74174876d891e" - integrity sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ== - dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/hash@5.3.0", "@ethersproject/hash@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.3.0.tgz#f65e3bf3db3282df4da676db6cfa049535dd3643" - integrity sha512-gAFZSjUPQ32CIfoKSMtMEQ+IO0kQxqhwz9fCIFt2DtAq2u4pWt8mL9Z5P0r6KkLcQU8LE9FmuPPyd+JvBzmr1w== - dependencies: - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - -"@ethersproject/hash@^5.4.0": +"@ethersproject/hash@5.4.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== @@ -684,43 +389,7 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/hdnode@5.1.0", "@ethersproject/hdnode@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.1.0.tgz#2bf5c4048935136ce83e9242e1bd570afcc0bc83" - integrity sha512-obIWdlujloExPHWJGmhJO/sETOOo7SEb6qemV4f8kyFoXg+cJK+Ta9SvBrj7hsUK85n3LZeZJZRjjM7oez3Clg== - dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/basex" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/pbkdf2" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/wordlists" "^5.1.0" - -"@ethersproject/hdnode@5.3.0", "@ethersproject/hdnode@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.3.0.tgz#26fed65ffd5c25463fddff13f5fb4e5617553c94" - integrity sha512-zLmmtLNoDMGoYRdjOab01Zqkvp+TmZyCGDAMQF1Bs3yZyBs/kzTNi1qJjR1jVUcPP5CWGtjFwY8iNG8oNV9J8g== - dependencies: - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/basex" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/pbkdf2" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" - "@ethersproject/signing-key" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/wordlists" "^5.3.0" - -"@ethersproject/hdnode@^5.4.0": +"@ethersproject/hdnode@5.4.0", "@ethersproject/hdnode@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac" integrity sha512-pKxdS0KAaeVGfZPp1KOiDLB0jba11tG6OP1u11QnYfb7pXn6IZx0xceqWRr6ygke8+Kw74IpOoSi7/DwANhy8Q== @@ -738,45 +407,7 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/json-wallets@5.1.0", "@ethersproject/json-wallets@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.1.0.tgz#bba7af2e520e8aea4d3829d80520db5d2e4fb8d2" - integrity sha512-00n2iBy27w8zrGZSiU762UOVuzCQZxUZxopsZC47++js6xUFuI74DHcJ5K/2pddlF1YBskvmMuboEu1geK8mnA== - dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hdnode" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/pbkdf2" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/json-wallets@5.3.0", "@ethersproject/json-wallets@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.3.0.tgz#7b1a5ff500c12aa8597ae82c8939837b0449376e" - integrity sha512-/xwbqaIb5grUIGNmeEaz8GdcpmDr++X8WT4Jqcclnxow8PXCUHFeDxjf3O+nSuoqOYG/Ds0+BI5xuQKbva6Xkw== - dependencies: - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/hdnode" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/pbkdf2" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/random" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/json-wallets@^5.4.0": +"@ethersproject/json-wallets@5.4.0", "@ethersproject/json-wallets@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95" integrity sha512-igWcu3fx4aiczrzEHwG1xJZo9l1cFfQOWzTqwRw/xcvxTk58q4f9M7cjh51EKphMHvrJtcezJ1gf1q1AUOfEQQ== @@ -795,23 +426,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.1.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.1.0.tgz#fdcd88fb13bfef4271b225cdd8dec4d315c8e60e" - integrity sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig== - dependencies: - "@ethersproject/bytes" "^5.1.0" - js-sha3 "0.5.7" - -"@ethersproject/keccak256@5.3.0", "@ethersproject/keccak256@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.3.0.tgz#fb5cd36bdfd6fa02e2ea84964078a9fc6bd731be" - integrity sha512-Gv2YqgIUmRbYVNIibafT0qGaeGYLIA/EdWHJ7JcVxVSs2vyxafGxOJ5VpSBHWeOIsE6OOaCelYowhuuTicgdFQ== - dependencies: - "@ethersproject/bytes" "^5.3.0" - js-sha3 "0.5.7" - -"@ethersproject/keccak256@^5.4.0": +"@ethersproject/keccak256@5.4.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== @@ -819,59 +434,19 @@ "@ethersproject/bytes" "^5.4.0" js-sha3 "0.5.7" -"@ethersproject/logger@5.1.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.1.0.tgz#4cdeeefac029373349d5818f39c31b82cc6d9bbf" - integrity sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw== - -"@ethersproject/logger@5.3.0", "@ethersproject/logger@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.3.0.tgz#7a69fa1d4ca0d4b7138da1627eb152f763d84dd0" - integrity sha512-8bwJ2gxJGkZZnpQSq5uSiZSJjyVTWmlGft4oH8vxHdvO1Asy4TwVepAhPgxIQIMxXZFUNMych1YjIV4oQ4I7dA== - -"@ethersproject/logger@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" - integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== - -"@ethersproject/networks@5.1.0", "@ethersproject/networks@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.1.0.tgz#f537290cb05aa6dc5e81e910926c04cfd5814bca" - integrity sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA== - dependencies: - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/networks@5.3.1", "@ethersproject/networks@^5.3.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.3.1.tgz#78fe08324cee289ce239acf8c746121934b2ef61" - integrity sha512-6uQKHkYChlsfeiZhQ8IHIqGE/sQsf25o9ZxAYpMxi15dLPzz3IxOEF5KiSD32aHwsjXVBKBSlo+teAXLlYJybw== - dependencies: - "@ethersproject/logger" "^5.3.0" - -"@ethersproject/networks@^5.4.0": +"@ethersproject/logger@5.4.1", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.4.0": version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.1.tgz#2ce83b8e42aa85216e5d277a7952d97b6ce8d852" - integrity sha512-8SvowCKz9Uf4xC5DTKI8+il8lWqOr78kmiqAVLYT9lzB8aSmJHQMD1GSuJI0CW4hMAnzocpGpZLgiMdzsNSPig== - dependencies: - "@ethersproject/logger" "^5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.1.tgz#503bd33683538b923c578c07d1c2c0dd18672054" + integrity sha512-DZ+bRinnYLPw1yAC64oRl0QyVZj43QeHIhVKfD/+YwSz4wsv1pfwb5SOFjz+r710YEWzU6LrhuSjpSO+6PeE4A== -"@ethersproject/pbkdf2@5.1.0", "@ethersproject/pbkdf2@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz#6b740a85dc780e879338af74856ca2c0d3b24d19" - integrity sha512-B8cUbHHTgs8OtgJIafrRcz/YPDobVd5Ru8gTnShOiM9EBuFpYHQpq3+8iQJ6pyczDu6HP/oc/njAsIBhwFZYew== +"@ethersproject/networks@5.4.2", "@ethersproject/networks@^5.4.0": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.2.tgz#2247d977626e97e2c3b8ee73cd2457babde0ce35" + integrity sha512-eekOhvJyBnuibfJnhtK46b8HimBc5+4gqpvd1/H9LEl7Q7/qhsIhM81dI9Fcnjpk3jB1aTy6bj0hz3cifhNeYw== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - -"@ethersproject/pbkdf2@5.3.0", "@ethersproject/pbkdf2@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.3.0.tgz#8adbb41489c3c9f319cc44bc7d3e6095fd468dc8" - integrity sha512-Q9ChVU6gBFiex0FSdtzo4b0SAKz3ZYcYVFLrEWHL0FnHvNk3J3WgAtRNtBQGQYn/T5wkoTdZttMbfBkFlaiWcA== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/pbkdf2@^5.4.0": +"@ethersproject/pbkdf2@5.4.0", "@ethersproject/pbkdf2@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c" integrity sha512-x94aIv6tiA04g6BnazZSLoRXqyusawRyZWlUhKip2jvoLpzJuLb//KtMM6PEovE47pMbW+Qe1uw+68ameJjB7g== @@ -879,81 +454,17 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/sha2" "^5.4.0" -"@ethersproject/properties@5.1.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.1.0.tgz#9484bd6def16595fc6e4bdc26f29dff4d3f6ac42" - integrity sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg== - dependencies: - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/properties@5.3.0", "@ethersproject/properties@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.3.0.tgz#feef4c4babeb7c10a6b3449575016f4ad2c092b2" - integrity sha512-PaHxJyM5/bfusk6vr3yP//JMnm4UEojpzuWGTmtL5X4uNhNnFNvlYilZLyDr4I9cTkIbipCMsAuIcXWsmdRnEw== - dependencies: - "@ethersproject/logger" "^5.3.0" - -"@ethersproject/properties@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7" - integrity sha512-7jczalGVRAJ+XSRvNA6D5sAwT4gavLq3OXPuV/74o3Rd2wuzSL035IMpIMgei4CYyBdialJMrTqkOnzccLHn4A== +"@ethersproject/properties@5.4.1", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.1.tgz#9f051f976ce790142c6261ccb7b826eaae1f2f36" + integrity sha512-cyCGlF8wWlIZyizsj2PpbJ9I7rIlUAfnHYwy/T90pdkSn/NFTa5YWZx2wTJBe9V7dD65dcrrEMisCRUJiq6n3w== dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/providers@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.1.2.tgz#4e4459698903f911402fe91aa7544eb07f3921ed" - integrity sha512-GqsS8rd+eyd4eNkcNgzZ4l9IRULBPUZa7JPnv22k4MHflMobUseyhfbVnmoN5bVNNkOxjV1IPTw9i0sV1hwdpg== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/basex" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/networks" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/web" "^5.1.0" - bech32 "1.1.4" - ws "7.2.3" - -"@ethersproject/providers@5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.3.1.tgz#a12c6370e8cbc0968c9744641b8ef90b0dd5ec2b" - integrity sha512-HC63vENTrur6/JKEhcQbA8PRDj1FAesdpX98IW+xAAo3EAkf70ou5fMIA3KCGzJDLNTeYA4C2Bonz849tVLekg== - dependencies: - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/basex" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/networks" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/random" "^5.3.0" - "@ethersproject/rlp" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/web" "^5.3.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/providers@^5.3.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.1.tgz#654267b563b833046b9c9647647cfc8267cb93b4" - integrity sha512-p06eiFKz8nu/5Ju0kIX024gzEQIgE5pvvGrBCngpyVjpuLtUIWT3097Agw4mTn9/dEA0FMcfByzFqacBMSgCVg== +"@ethersproject/providers@5.4.5", "@ethersproject/providers@^5.3.1": + version "5.4.5" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.5.tgz#eb2ea2a743a8115f79604a8157233a3a2c832928" + integrity sha512-1GkrvkiAw3Fj28cwi1Sqm8ED1RtERtpdXmRfwIBGmqBSN5MoeRUHuwHPppMtbPayPgpFcvD7/Gdc9doO5fGYgw== dependencies: "@ethersproject/abstract-provider" "^5.4.0" "@ethersproject/abstract-signer" "^5.4.0" @@ -975,23 +486,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.1.0", "@ethersproject/random@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.1.0.tgz#0bdff2554df03ebc5f75689614f2d58ea0d9a71f" - integrity sha512-+uuczLQZ4+no9cP6TCoCktXx0u2YbNaRT7lRkSt12d8263e702f0u+4JnnRO8Qmv5nylWJebnqCHzyxP+6mLqw== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/random@5.3.0", "@ethersproject/random@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.3.0.tgz#7c46bf36e50cb0d0550bc8c666af8e1d4496dc1a" - integrity sha512-A5SL/4inutSwt3Fh2OD0x2gz+x6GHmuUnIPkR7zAiTidMD2N8F6tZdMF1hlQKWVCcVMWhEQg8mWijhEzm6BBYw== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - -"@ethersproject/random@^5.4.0": +"@ethersproject/random@5.4.0", "@ethersproject/random@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16" integrity sha512-pnpWNQlf0VAZDEOVp1rsYQosmv2o0ITS/PecNw+mS2/btF8eYdspkN0vIXrCMtkX09EAh9bdk8GoXmFXM1eAKw== @@ -999,23 +494,7 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/rlp@5.1.0", "@ethersproject/rlp@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.1.0.tgz#700f4f071c27fa298d3c1d637485fefe919dd084" - integrity sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/rlp@5.3.0", "@ethersproject/rlp@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.3.0.tgz#7cb93a7b5dfa69163894153c9d4b0d936f333188" - integrity sha512-oI0joYpsRanl9guDubaW+1NbcpK0vJ3F/6Wpcanzcnqq+oaW9O5E98liwkEDPcb16BUTLIJ+ZF8GPIHYxJ/5Pw== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - -"@ethersproject/rlp@^5.4.0": +"@ethersproject/rlp@5.4.0", "@ethersproject/rlp@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== @@ -1023,25 +502,7 @@ "@ethersproject/bytes" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/sha2@5.1.0", "@ethersproject/sha2@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.1.0.tgz#6ca42d1a26884b3e32ffa943fe6494af7211506c" - integrity sha512-+fNSeZRstOpdRJpdGUkRONFCaiAqWkc91zXgg76Nlp5ndBQE25Kk5yK8gCPG1aGnCrbariiPr5j9DmrYH78JCA== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - hash.js "1.1.3" - -"@ethersproject/sha2@5.3.0", "@ethersproject/sha2@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.3.0.tgz#209f9a1649f7d2452dcd5e5b94af43b7f3f42366" - integrity sha512-r5ftlwKcocYEuFz2JbeKOT5SAsCV4m1RJDsTOEfQ5L67ZC7NFDK5i7maPdn1bx4nPhylF9VAwxSrQ1esmwzylg== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - hash.js "1.1.7" - -"@ethersproject/sha2@^5.4.0": +"@ethersproject/sha2@5.4.0", "@ethersproject/sha2@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371" integrity sha512-siheo36r1WD7Cy+bDdE1BJ8y0bDtqXCOxRMzPa4bV1TGt/eTUUt03BHoJNB6reWJD8A30E/pdJ8WFkq+/uz4Gg== @@ -1050,30 +511,7 @@ "@ethersproject/logger" "^5.4.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.1.0", "@ethersproject/signing-key@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.1.0.tgz#6eddfbddb6826b597b9650e01acf817bf8991b9c" - integrity sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - bn.js "^4.4.0" - elliptic "6.5.4" - -"@ethersproject/signing-key@5.3.0", "@ethersproject/signing-key@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.3.0.tgz#a96c88f8173e1abedfa35de32d3e5db7c48e5259" - integrity sha512-+DX/GwHAd0ok1bgedV1cKO0zfK7P/9aEyNoaYiRsGHpCecN7mhLqcdoUiUzE7Uz86LBsxm5ssK0qA1kBB47fbQ== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/signing-key@^5.4.0": +"@ethersproject/signing-key@5.4.0", "@ethersproject/signing-key@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== @@ -1085,29 +523,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.1.0.tgz#095a9c75244edccb26c452c155736d363399b954" - integrity sha512-kPodsGyo9zg1g9XSXp1lGhFaezBAUUsAUB1Vf6OkppE5Wksg4Et+x3kG4m7J/uShDMP2upkJtHNsIBK2XkVpKQ== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/solidity@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.3.0.tgz#2a0b00b4aaaef99a080ddea13acab1fa35cd4a93" - integrity sha512-uLRBaNUiISHbut94XKewJgQh6UmydWTBp71I7I21pkjVXfZO2dJ5EOo3jCnumJc01M4LOm79dlNNmF3oGIvweQ== - dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/sha2" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - -"@ethersproject/solidity@^5.3.0": +"@ethersproject/solidity@5.4.0", "@ethersproject/solidity@^5.3.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" integrity sha512-XFQTZ7wFSHOhHcV1DpcWj7VXECEiSrBuv7JErJvB9Uo+KfCdc3QtUZV+Vjh/AAaYgezUEKbCtE6Khjm44seevQ== @@ -1118,25 +534,7 @@ "@ethersproject/sha2" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/strings@5.1.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.1.0.tgz#0f95a56c3c8c9d5510a06c241d818779750e2da5" - integrity sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/strings@5.3.0", "@ethersproject/strings@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.3.0.tgz#a6b640aab56a18e0909f657da798eef890968ff0" - integrity sha512-j/AzIGZ503cvhuF2ldRSjB0BrKzpsBMtCieDtn4TYMMZMQ9zScJn9wLzTQl/bRNvJbBE6TOspK0r8/Ngae/f2Q== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - -"@ethersproject/strings@^5.4.0": +"@ethersproject/strings@5.4.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== @@ -1145,37 +543,7 @@ "@ethersproject/constants" "^5.4.0" "@ethersproject/logger" "^5.4.0" -"@ethersproject/transactions@5.1.1", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.1.tgz#5a6bbb25fb062c3cc75eb0db12faefcdd3870813" - integrity sha512-Nwgbp09ttIVN0OoUBatCXaHxR7grWPHbozJN8v7AXDLrl6nnOIBEMDh+yJTnosSQlFhcyjfTGGN+Mx6R8HdvMw== - dependencies: - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - -"@ethersproject/transactions@5.3.0", "@ethersproject/transactions@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.3.0.tgz#49b86f2bafa4d0bdf8e596578fc795ee47c50458" - integrity sha512-cdfK8VVyW2oEBCXhURG0WQ6AICL/r6Gmjh0e4Bvbv6MCn/GBd8FeBH3rtl7ho+AW50csMKeGv3m3K1HSHB2jMQ== - dependencies: - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/rlp" "^5.3.0" - "@ethersproject/signing-key" "^5.3.0" - -"@ethersproject/transactions@^5.4.0": +"@ethersproject/transactions@5.4.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.3.0", "@ethersproject/transactions@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== @@ -1190,67 +558,16 @@ "@ethersproject/rlp" "^5.4.0" "@ethersproject/signing-key" "^5.4.0" -"@ethersproject/units@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.1.0.tgz#b6ab3430ebc22adc3cb4839516496f167bee3ad5" - integrity sha512-isvJrx6qG0nKWfxsGORNjmOq/nh175fStfvRTA2xEKrGqx8JNJY83fswu4GkILowfriEM/eYpretfJnfzi7YhA== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/units@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.3.0.tgz#c4d1493532ad3d4ddf6e2bc4f8c94a2db933a8f5" - integrity sha512-BkfccZGwfJ6Ob+AelpIrgAzuNhrN2VLp3AILnkqTOv+yBdsc83V4AYf25XC/u0rHnWl6f4POaietPwlMqP2vUg== - dependencies: - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/constants" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - -"@ethersproject/wallet@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.1.0.tgz#134c5816eaeaa586beae9f9ff67891104a2c9a15" - integrity sha512-ULmUtiYQLTUS+y3DgkLzRhFEK10zMwmjOthnjiZxee3Q/MVwr3rnmuAnXIUZrPjna6hvUPnyRIdW5XuF0Ld0YQ== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/hdnode" "^5.1.0" - "@ethersproject/json-wallets" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/wordlists" "^5.1.0" - -"@ethersproject/wallet@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.3.0.tgz#91946b470bd279e39ade58866f21f92749d062af" - integrity sha512-boYBLydG6671p9QoG6EinNnNzbm7DNOjVT20eV8J6HQEq4aUaGiA2CytF2vK+2rOEWbzhZqoNDt6AlkE1LlsTg== +"@ethersproject/units@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe" + integrity sha512-Z88krX40KCp+JqPCP5oPv5p750g+uU6gopDYRTBGcDvOASh6qhiEYCRatuM/suC4S2XW9Zz90QI35MfSrTIaFg== dependencies: - "@ethersproject/abstract-provider" "^5.3.0" - "@ethersproject/abstract-signer" "^5.3.0" - "@ethersproject/address" "^5.3.0" - "@ethersproject/bignumber" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/hdnode" "^5.3.0" - "@ethersproject/json-wallets" "^5.3.0" - "@ethersproject/keccak256" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/random" "^5.3.0" - "@ethersproject/signing-key" "^5.3.0" - "@ethersproject/transactions" "^5.3.0" - "@ethersproject/wordlists" "^5.3.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/wallet@^5.3.0": +"@ethersproject/wallet@5.4.0", "@ethersproject/wallet@^5.3.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353" integrity sha512-wU29majLjM6AjCjpat21mPPviG+EpK7wY1+jzKD0fg3ui5fgedf2zEu1RDgpfIMsfn8fJHJuzM4zXZ2+hSHaSQ== @@ -1271,29 +588,7 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/web@5.1.0", "@ethersproject/web@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.1.0.tgz#ed56bbe4e3d9a8ffe3b2ed882da5c62d3551381b" - integrity sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA== - dependencies: - "@ethersproject/base64" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/web@5.3.0", "@ethersproject/web@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.3.0.tgz#7959c403f6476c61515008d8f92da51c553a8ee1" - integrity sha512-Ni6/DHnY6k/TD41LEkv0RQDx4jqWz5e/RZvrSecsxGYycF+MFy2z++T/yGc2peRunLOTIFwEksgEGGlbwfYmhQ== - dependencies: - "@ethersproject/base64" "^5.3.0" - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - -"@ethersproject/web@^5.4.0": +"@ethersproject/web@5.4.0", "@ethersproject/web@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== @@ -1304,29 +599,7 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/wordlists@5.1.0", "@ethersproject/wordlists@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.1.0.tgz#54eb9ef3a00babbff90ffe124e19c89e07e6aace" - integrity sha512-NsUCi/TpBb+oTFvMSccUkJGtp5o/84eOyqp5q5aBeiNBSLkYyw21znRn9mAmxZgySpxgruVgKbaapnYPgvctPQ== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - -"@ethersproject/wordlists@5.3.0", "@ethersproject/wordlists@^5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.3.0.tgz#45a0205f5178c1de33d316cb2ab7ed5eac3c06c5" - integrity sha512-JcwumCZcsUxgWpiFU/BRy6b4KlTRdOmYvOKZcAw/3sdF93/pZyPW5Od2hFkHS8oWp4xS06YQ+qHqQhdcxdHafQ== - dependencies: - "@ethersproject/bytes" "^5.3.0" - "@ethersproject/hash" "^5.3.0" - "@ethersproject/logger" "^5.3.0" - "@ethersproject/properties" "^5.3.0" - "@ethersproject/strings" "^5.3.0" - -"@ethersproject/wordlists@^5.4.0": +"@ethersproject/wordlists@5.4.0", "@ethersproject/wordlists@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7" integrity sha512-FemEkf6a+EBKEPxlzeVgUaVSodU7G0Na89jqKjmWMlDB0tomoU8RlEMgUvXyqtrg8N4cwpLh8nyRnm1Nay1isA== @@ -1338,11 +611,11 @@ "@ethersproject/strings" "^5.4.0" "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.2.tgz#862a66b3e0197109c11ddf2082a8db4c66ba6bd2" - integrity sha512-PjsLKLzJ0jWM1iM4xdYkrMyonAHP4kHGiXm81FRNfcnjToQA9UOknwZE28bxq0AGmEAMVBPSuuHurzla2wyYyA== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz#0300943770e04231041a51bd39f0439b5c7ab4f0" + integrity sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg== -"@nomiclabs/hardhat-ethers@^2.0.0", "@nomiclabs/hardhat-ethers@^2.0.2": +"@nomiclabs/hardhat-ethers@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" integrity sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg== @@ -1355,17 +628,17 @@ solhint "^2.0.0" "@nomiclabs/hardhat-truffle5@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.0.tgz#1363b7f4f90e3d5b049d22e5e6d3519ba1b91fdf" - integrity sha512-JLjyfeXTiSqa0oLHcN3i8kD4coJa4Gx6uAXybGv3aBiliEbHddLSzmBWx0EU69a1/Ad5YDdGSqVnjB8mkUCr/g== + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.2.tgz#bfc29843a5a78a6eceafc3f5c24b6163b92424a1" + integrity sha512-QHxtwNPmAYSxiUFCLqfTy3lbIgMeh0Uqcv5g9ioQWExMrYpwqW0goXTH6JWx3gwYIsF2ALtI4/10CKj7zLDyWA== dependencies: "@nomiclabs/truffle-contract" "^4.2.23" "@types/chai" "^4.2.0" chai "^4.2.0" - ethereumjs-util "^6.1.0" + ethereumjs-util "^7.1.0" fs-extra "^7.0.1" -"@nomiclabs/hardhat-waffle@^2.0.0", "@nomiclabs/hardhat-waffle@^2.0.1": +"@nomiclabs/hardhat-waffle@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.1.tgz#5d43654fba780720c5033dea240fe14f70ef4bd2" integrity sha512-2YR2V5zTiztSH9n8BYWgtv3Q+EL0N5Ltm1PAr5z20uAY4SkkfylJ98CIqt18XFvxTD5x4K2wKBzddjV9ViDAZQ== @@ -1396,22 +669,22 @@ source-map-support "^0.5.19" "@openzeppelin/contract-loader@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contract-loader/-/contract-loader-0.6.2.tgz#f0c08f14d5dfeaeb44952ba777ec9ce1c9ff9759" - integrity sha512-/P8v8ZFVwK+Z7rHQH2N3hqzEmTzLFjhMtvNK4FeIak6DEeONZ92vdFaFb10CCCQtp390Rp/Y57Rtfrm50bUdMQ== + version "0.6.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contract-loader/-/contract-loader-0.6.3.tgz#61a7b44de327e40b7d53f39e0fb59bbf847335c3" + integrity sha512-cOFIjBjwbGgZhDZsitNgJl0Ye1rd5yu/Yx5LMgeq3u0ZYzldm4uObzHDFq4gjDdoypvyORjjJa3BlFA7eAnVIg== dependencies: find-up "^4.1.0" fs-extra "^8.1.0" -"@openzeppelin/contracts@^4.0.0", "@openzeppelin/contracts@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.1.0.tgz#baec89a7f5f73e3d8ea582a78f1980134b605375" - integrity sha512-TihZitscnaHNcZgXGj9zDLDyCqjziytB4tMCwXq0XimfWkAjBYyk5/pOsDbbwcavhlc79HhpTEpQcrMnPVa1mw== +"@openzeppelin/contracts@^4.1.0": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.3.2.tgz#ff80affd6d352dbe1bbc5b4e1833c41afd6283b6" + integrity sha512-AybF1cesONZStg5kWf6ao9OlqTZuPqddvprc0ky7lrUVOjXeKpmQ2Y9FK+6ygxasb+4aic4O5pneFBfwVsRRRg== "@openzeppelin/test-helpers@^0.5.11": - version "0.5.11" - resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.11.tgz#67a4d28b1c3b15f98c56ed64680f988c8e882bf0" - integrity sha512-HkFpCjtTD8dk+wdYhsT07YbMGCE+Z4Wp5sBKXvPDF3Lynoc0H2KqZgCWV+qr2YZ0WW1oX/sXkKFrrKJ0caBTjw== + version "0.5.15" + resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.15.tgz#7727d4bb1535e1fa2372d65d1dcee335ce8d36af" + integrity sha512-10fS0kyOjc/UObo9iEWPNbC6MCeiQ7z97LDOJBj68g+AAs5pIGEI2h3V6G9TYTIq8VxOdwMQbfjKrx7Y3YZJtA== dependencies: "@openzeppelin/contract-loader" "^0.6.2" "@truffle/contract" "^4.0.35" @@ -1541,10 +814,10 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^7.0.4": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.0.5.tgz#558a7f8145a01366c44b3dcbdd7172c05c461564" - integrity sha512-fUt6b15bjV/VW93UP5opNXJxdwZSbK1EdiwnhN7XrQrcpaOhMJpZ/CjwFpM3THpxwA+YviBUJKSuEqKlCK5alw== +"@sinonjs/fake-timers@^7.1.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz#2524eae70c4910edccf99b2f4e6efc5894aff7b5" + integrity sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg== dependencies: "@sinonjs/commons" "^1.7.0" @@ -1565,6 +838,15 @@ dependencies: defer-to-connect "^1.0.1" +"@truffle/abi-utils@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@truffle/abi-utils/-/abi-utils-0.2.4.tgz#9fc8bfc95bbe29a33cca3ab9028865b078e2f051" + integrity sha512-ICr5Sger6r5uj2G5GN9Zp9OQDCaCqe2ZyAEyvavDoFB+jX0zZFUCfDnv5jllGRhgzdYJ3mec2390mjUyz9jSZA== + dependencies: + change-case "3.0.2" + faker "^5.3.1" + fast-check "^2.12.1" + "@truffle/blockchain-utils@^0.0.25": version "0.0.25" resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.25.tgz#f4b320890113d282f25f1a1ecd65b94a8b763ac1" @@ -1572,16 +854,18 @@ dependencies: source-map-support "^0.5.19" -"@truffle/blockchain-utils@^0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.30.tgz#1fafbd8e8694d79280177b5eff167b0690838855" - integrity sha512-3hkHSHxVavoALcxpBqD4YwHuCmkBrvjq6PAGw93i6WCB+pnejBD5sFjVCiZZKCogh4kGObxxcwu53+3dyT/6IQ== +"@truffle/blockchain-utils@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.31.tgz#0503d9fb2ce3e05c167c27294927f2f88d70a24d" + integrity sha512-BFo/nyxwhoHqPrqBQA1EAmSxeNnspGLiOCMa9pAL7WYSjyNBlrHaqCMO/F2O87G+NUK/u06E70DiSP2BFP0ZZw== -"@truffle/codec@^0.10.8": - version "0.10.8" - resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.10.8.tgz#d6555a153ef4be27e1109320de37b10150124cda" - integrity sha512-S4fxInoPH+gTF5zTawiqgFqU2tOIfob2dk0Zc/wqATH8hf1AmRjoYSL6hazk9mdynvmsvNM/QjO6XKCMX3pYYw== +"@truffle/codec@^0.11.16": + version "0.11.16" + resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.11.16.tgz#1947ee093cfe9399c71a202741636a82eade3021" + integrity sha512-IcqNpteZUTeyROIZTPSicryU3k9P36yZXlYCI0Q8V+DlplhSlrdnSqaIEE159uMAdSqGarqCGoTYWUGhBKOrkQ== dependencies: + "@truffle/abi-utils" "^0.2.4" + "@truffle/compile-common" "^0.7.22" big.js "^5.2.2" bn.js "^5.1.3" cbor "^5.1.0" @@ -1592,7 +876,7 @@ lodash.sum "^4.0.2" semver "^7.3.4" utf8 "^3.0.0" - web3-utils "1.3.6" + web3-utils "1.5.3" "@truffle/codec@^0.7.1": version "0.7.1" @@ -1612,33 +896,40 @@ utf8 "^3.0.0" web3-utils "1.2.9" -"@truffle/contract-schema@^3.2.5", "@truffle/contract-schema@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.4.1.tgz#13b404383d438b48960862022a20102970323666" - integrity sha512-2gvu6gxJtbbI67H2Bwh2rBuej+1uCV3z4zKFzQZP00hjNoL+QfybrmBcOVB88PflBeEB+oUXuwQfDoKX3TXlnQ== +"@truffle/compile-common@^0.7.22": + version "0.7.22" + resolved "https://registry.yarnpkg.com/@truffle/compile-common/-/compile-common-0.7.22.tgz#c376eea36f59dc770ece3bc8cbb7132f49352846" + integrity sha512-afFKh0Wphn8JrCSjOORKjO8/E1X0EtQv6GpFJpQCAWo3/i4VGcSVKR1rjkknnExtjEGe9PJH/Ym/opGH3pQyDw== + dependencies: + "@truffle/error" "^0.0.14" + colors "^1.4.0" + +"@truffle/contract-schema@^3.2.5", "@truffle/contract-schema@^3.4.3": + version "3.4.3" + resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.4.3.tgz#c1bcde343f70b9438314202e103a7d77d684603c" + integrity sha512-pgaTgF4CKIpkqVYZVr2qGTxZZQOkNCWOXW9VQpKvLd4G0SNF2Y1gyhrFbBhoOUtYlbbSty+IEFFHsoAqpqlvpQ== dependencies: ajv "^6.10.0" - crypto-js "^3.1.9-1" debug "^4.3.1" "@truffle/contract@^4.0.35": - version "4.3.18" - resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.3.18.tgz#15c60ff97480ca4bc4831e4b9c659305acc358ac" - integrity sha512-CvP6iTC/sz3rAfy3awFdDsvE6Q8xfjfW/7oM3OMD49nZnBNHKGQUG5CVKeAa180IVxbA8MGFr3KDCPtN2p0zMw== - dependencies: - "@truffle/blockchain-utils" "^0.0.30" - "@truffle/contract-schema" "^3.4.1" - "@truffle/debug-utils" "^5.0.18" + version "4.3.37" + resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.3.37.tgz#8007b97650303dc2576ec90bff124ade95e61cd1" + integrity sha512-lMPpyez1FFXEKbfqYZ4yDqvEEl4m/SiRYm+x1/yu2coCi5uaWaIZDE0pJ++tVDueQN8tJVZ6oTN9i5oAvjShzA== + dependencies: + "@ensdomains/ensjs" "^2.0.1" + "@truffle/blockchain-utils" "^0.0.31" + "@truffle/contract-schema" "^3.4.3" + "@truffle/debug-utils" "^5.1.17" "@truffle/error" "^0.0.14" - "@truffle/interface-adapter" "^0.5.0" + "@truffle/interface-adapter" "^0.5.8" bignumber.js "^7.2.1" - ethereum-ens "^0.8.0" ethers "^4.0.32" - web3 "1.3.6" - web3-core-helpers "1.3.6" - web3-core-promievent "1.3.6" - web3-eth-abi "1.3.6" - web3-utils "1.3.6" + web3 "1.5.3" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-eth-abi "1.5.3" + web3-utils "1.5.3" "@truffle/debug-utils@^4.2.9": version "4.2.14" @@ -1652,18 +943,17 @@ highlight.js "^9.15.8" highlightjs-solidity "^1.0.18" -"@truffle/debug-utils@^5.0.18": - version "5.0.18" - resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-5.0.18.tgz#ceb12c263e8f29fdacec6a5727dcca3ca7d678a8" - integrity sha512-uBPjp6w3LQK8bfSKU1vw1JjNeDn/DX2SnDH0bLNMZg224bhdcDOBhKQBPx3PhrYS01Yhktfu5kDhxgeGQzQfWg== +"@truffle/debug-utils@^5.1.17": + version "5.1.17" + resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-5.1.17.tgz#a287817bbd8a02d06b926c09b32cf339af124115" + integrity sha512-aAcs4qA1hwajtFG/gUXXFAvjRxdz6uAl8bmqOEwYxrXTHBzeWz9CiLgyxlIOZgZCeiUmqMNxvT7FORi6FSdfJg== dependencies: - "@truffle/codec" "^0.10.8" + "@truffle/codec" "^0.11.16" "@trufflesuite/chromafi" "^2.2.2" bn.js "^5.1.3" chalk "^2.4.2" debug "^4.3.1" - highlight.js "^10.4.0" - highlightjs-solidity "^1.1.0" + highlightjs-solidity "^2.0.1" "@truffle/error@^0.0.11": version "0.0.11" @@ -1676,22 +966,22 @@ integrity sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA== "@truffle/interface-adapter@^0.4.16": - version "0.4.23" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.23.tgz#9b474bb0455df1f02d72bf5a08f3d70b6fef875d" - integrity sha512-mfpwY25Apx36WHHNJMNHWyDQVFZoZYNQ43rOwr/n+5gAMxke7+D7+IR9UW4kuO/Jp0+2848UxMdRV+oqm017kQ== + version "0.4.24" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.24.tgz#5d6d4f10c756e967f19ac2ad1620d11d25c034bb" + integrity sha512-2Zho4dJbm/XGwNleY7FdxcjXiAR3SzdGklgrAW4N/YVmltaJv6bT56ACIbPNN6AdzkTSTO65OlsB/63sfSa/VA== dependencies: bn.js "^5.1.3" ethers "^4.0.32" - web3 "1.3.5" + web3 "1.3.6" -"@truffle/interface-adapter@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.0.tgz#00c9e16fe0edafbfbf4b331fb4db178c9148c8fc" - integrity sha512-0MRt9orgQqo0knyKDy0fGRqnI+alkuK0BUAvHB1/VUJgCKyWBNAUUZO5gPjuj75qCjV4Rw+W6SKDQpn2xOWsXw== +"@truffle/interface-adapter@^0.5.8": + version "0.5.8" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.8.tgz#76cfd34374d85849e1164de1a3d5a3dce0dc5d01" + integrity sha512-vvy3xpq36oLgjjy8KE9l2Jabg3WcGPOt18tIyMfTQX9MFnbHoQA2Ne2i8xsd4p6KfxIqSjAB53Q9/nScAqY0UQ== dependencies: bn.js "^5.1.3" ethers "^4.0.32" - web3 "1.3.6" + web3 "1.5.3" "@trufflesuite/chromafi@^2.2.1", "@trufflesuite/chromafi@^2.2.2": version "2.2.2" @@ -1721,9 +1011,9 @@ ethers "^5.0.2" "@types/abstract-leveldown@*": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.1.tgz#3c7750d0186b954c7f2d2f6acc8c3c7ba0c3412e" - integrity sha512-wYxU3kp5zItbxKmeRYCEplS2MW7DzyBnxPGj+GJVHZEUZiK/nn5Ei1sUFgURDh+X051+zsGe28iud3oHjrYWQQ== + version "5.0.2" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.2.tgz#ee81917fe38f770e29eec8139b6f16ee4a8b0a5f" + integrity sha512-+jA1XXF3jsz+Z7FcuiNqgK53hTa/luglT2TyTpKPqoYbxVY+mCPF22Rm+q3KPBrMHJwNXFrTViHszBOfU4vftQ== "@types/bignumber.js@^5.0.0": version "5.0.0" @@ -1747,14 +1037,14 @@ "@types/node" "*" "@types/chai@*", "@types/chai@^4.2.0": - version "4.2.18" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.18.tgz#0c8e298dbff8205e2266606c1ea5fbdba29b46e4" - integrity sha512-rS27+EkB/RE1Iz3u0XtVL5q36MGDWbgYe7zWiodyKNUnthxY0rukK5V36eiUCtCisB7NN8zKYH6DO2M37qxFEQ== + version "4.2.22" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.22.tgz#47020d7e4cf19194d43b5202f35f75bd2ad35ce7" + integrity sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ== "@types/concat-stream@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.0.tgz#394dbe0bb5fee46b38d896735e8b68ef2390d00d" - integrity sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0= + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== dependencies: "@types/node" "*" @@ -1765,18 +1055,24 @@ dependencies: "@types/node" "*" +"@types/level-errors@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" + integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== + "@types/levelup@^4.3.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.1.tgz#7a53b9fd510716e11b2065332790fdf5f9b950b9" - integrity sha512-n//PeTpbHLjMLTIgW5B/g06W/6iuTBHuvUka2nFL9APMSVMNe2r4enADfu3CIE9IyV9E+uquf9OEQQqrDeg24A== + version "4.3.3" + resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" + integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== dependencies: "@types/abstract-leveldown" "*" + "@types/level-errors" "*" "@types/node" "*" "@types/lru-cache@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" - integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w== + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== "@types/mkdirp@^0.5.2": version "0.5.2" @@ -1786,17 +1082,17 @@ "@types/node" "*" "@types/node-fetch@^2.5.5": - version "2.5.10" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.10.tgz#9b4d4a0425562f9fcea70b12cb3fcdd946ca8132" - integrity sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ== + version "2.5.12" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" + integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw== dependencies: "@types/node" "*" form-data "^3.0.0" "@types/node@*": - version "15.0.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.2.tgz#51e9c0920d1b45936ea04341aa3e2e58d339fb67" - integrity sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA== + version "16.10.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5" + integrity sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ== "@types/node@^10.0.3": version "10.17.60" @@ -1804,9 +1100,9 @@ integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== "@types/node@^12.12.6": - version "12.20.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.12.tgz#fd9c1c2cfab536a2383ed1ef70f94adea743a226" - integrity sha512-KQZ1al2hKOONAs2MFv+yTQP1LkDWMrRJ9YCVRalXltOfXsBmH5IownLxQaiq0lnAHwAViLnh2aTYqrPcRGEbgg== + version "12.20.28" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.28.tgz#4b20048c6052b5f51a8d5e0d2acbf63d5a17e1e2" + integrity sha512-cBw8gzxUPYX+/5lugXIPksioBSbE42k0fZ39p+4yRzfYjN6++eq9kAPdlY9qm+MXyfbk9EmvCYAYRn380sF46w== "@types/node@^8.0.0": version "8.10.66" @@ -1821,16 +1117,11 @@ "@types/node" "*" "@types/prettier@^2.1.1": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" - integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== - -"@types/qs@^6.2.31": - version "6.9.6" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" - integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.1.tgz#e1303048d5389563e130f5bdd89d37a99acb75eb" + integrity sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw== -"@types/qs@^6.9.4": +"@types/qs@^6.2.31", "@types/qs@^6.9.4": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== @@ -1843,9 +1134,9 @@ "@types/node" "*" "@types/secp256k1@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.2.tgz#20c29a87149d980f64464e56539bf4810fdb5d1d" - integrity sha512-QMg+9v0bbNJ2peLuHRWxzmy0HRJIG6gFZNhaRSp7S3ggSbCCxiqQB2/ybvhXyhHOCequpNkrx7OavNhrWOsW0A== + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== dependencies: "@types/node" "*" @@ -1858,16 +1149,16 @@ "@types/sinon" "*" "@types/sinon@*": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.0.tgz#eecc3847af03d45ffe53d55aaaaf6ecb28b5e584" - integrity sha512-jDZ55oCKxqlDmoTBBbBBEx+N8ZraUVhggMZ9T5t+6/Dh8/4NiOjSUfpLrPiEwxQDlAe3wpAkoXhWvE6LibtsMQ== + version "10.0.4" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.4.tgz#9332527665692b9f6826afe017f342a3ac6120f4" + integrity sha512-fOYjrxQv8zJsqOY6V6ecP4eZhQBxtY80X0er1VVnUIAIZo74jHm8e1vguG5Yt4Iv8W2Wr7TgibB8MfRe32k9pA== dependencies: - "@sinonjs/fake-timers" "^7.0.4" + "@sinonjs/fake-timers" "^7.1.0" "@types/underscore@*": - version "1.11.2" - resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.2.tgz#9441e0f6402bbcb72dbee771582fa57c5a1dedd3" - integrity sha512-Ls2ylbo7++ITrWk2Yc3G/jijwSq5V3GT0tlgVXEl2kKYXY3ImrtmTCoE2uyTWFRI5owMBriloZFWbE1SXOsE7w== + version "1.11.3" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.3.tgz#d6734f3741ce41b2630018c6b61c6745f6188c07" + integrity sha512-Fl1TX1dapfXyDqFg2ic9M+vlXRktcPJrc4PR7sRc7sdVrjavg/JHlbUXBt8qWWqhJrmSqg3RNAkAPRiOYw6Ahw== "@types/web3@1.0.19": version "1.0.19" @@ -1947,10 +1238,27 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ= + dependencies: + acorn "^4.0.3" + acorn-jsx@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= + +acorn@^5.0.0: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== acorn@^6.0.7: version "6.4.2" @@ -1979,17 +1287,12 @@ agent-base@6: dependencies: debug "4" -ajv@^5.2.2: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" +ajv-keywords@^3.1.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.6.1, ajv@^6.9.1: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.6.1, ajv@^6.9.1: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1999,6 +1302,15 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.6.1, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" @@ -2076,15 +1388,15 @@ antlr4@4.7.1: resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" + micromatch "^3.1.4" + normalize-path "^2.1.1" -anymatch@~3.1.1: +anymatch@~3.1.1, anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== @@ -2099,19 +1411,12 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= - dependencies: - arr-flatten "^1.0.1" - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-flatten@^1.0.1, arr-flatten@^1.1.0: +arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== @@ -2135,11 +1440,6 @@ array-back@^2.0.0: dependencies: typical "^2.6.1" -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -2150,11 +1450,6 @@ array-uniq@^1.0.3: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -2187,6 +1482,14 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" @@ -2202,7 +1505,7 @@ astral-regex@^1.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -async-each@^1.0.0: +async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== @@ -2248,12 +1551,10 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -available-typed-arrays@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" - integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== - dependencies: - array-filter "^1.0.0" +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sign2@~0.7.0: version "0.7.0" @@ -2266,11 +1567,11 @@ aws4@^1.8.0: integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== axios@^0.21.1: - version "0.21.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" - integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: - follow-redirects "^1.10.0" + follow-redirects "^1.14.0" babel-code-frame@^6.26.0: version "6.26.0" @@ -2810,7 +2111,7 @@ base-x@^3.0.2, base-x@^3.0.8: dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -2835,11 +2136,16 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bech32@1.1.4: +bech32@1.1.4, bech32@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +big-integer@1.6.36: + version "1.6.36" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" + integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -2891,9 +2197,9 @@ bip66@^1.1.5: safe-buffer "^5.0.1" blakejs@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" - integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= + version "1.1.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" + integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.2: version "3.7.2" @@ -2910,12 +2216,12 @@ bn.js@4.11.8: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0, bn.js@^4.8.0: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.8.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== @@ -2962,16 +2268,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1: +braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -2999,11 +2296,6 @@ brorand@^1.0.1, brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" - integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8= - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -3063,6 +2355,13 @@ browserify-sign@^4.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + browserslist@^3.2.6: version "3.2.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" @@ -3071,7 +2370,7 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -bs58@^4.0.0: +bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= @@ -3088,9 +2387,9 @@ bs58check@^2.1.2: safe-buffer "^5.1.2" buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-to-arraybuffer@^0.0.5: version "0.0.5" @@ -3109,6 +2408,23 @@ buffer-xor@^2.0.1: dependencies: safe-buffer "^5.1.1" +buffer@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -3118,12 +2434,17 @@ buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: ieee754 "^1.1.13" bufferutil@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" - integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== + version "4.0.4" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.4.tgz#ab81373d313a6ead0d734e98c448c722734ae7bb" + integrity sha512-VNxjXUCrF3LvbLgwfkTb5LsFvk6pGIn7OBb9x+3o+iJ6mKw0JTUp4chBFc88hi1aspeZGeZG9jAIbpFYPQSLZw== dependencies: node-gyp-build "^4.2.0" +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" @@ -3180,7 +2501,7 @@ cachedown@1.0.0: abstract-leveldown "^2.4.1" lru-cache "^3.2.0" -call-bind@^1.0.0, call-bind@^1.0.2: +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== @@ -3212,6 +2533,19 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camel-case@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" @@ -3228,9 +2562,9 @@ camelcase@^5.0.0: integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30000844: - version "1.0.30001228" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa" - integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A== + version "1.0.30001265" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz#0613c9e6c922e422792e6fcefdf9a3afeee4f8c3" + integrity sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw== caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" @@ -3245,10 +2579,18 @@ cbor@^5.1.0: bignumber.js "^9.0.1" nofilter "^1.0.4" +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + chai-bn@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.2.1.tgz#1dad95e24c3afcd8139ab0262e9bbefff8a30ab7" - integrity sha512-01jt2gSXAw7UYFPT5K8d7HYjdXj2vyeIuE+0T/34FWzlNcVbs1JkPxRu7rYMfQnJhrHT8Nr6qjSf5ZwwLU2EYg== + version "0.2.2" + resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.2.2.tgz#4dcf30dbc79db2378a00781693bc749c972bf34f" + integrity sha512-MzjelH0p8vWn65QKmEq/DLBG1Hle4WeyqT79ANhXZhn/UxRWO0OogkAxi5oGGtfzwU9bZR8mvbvYdoqNVWQwFg== chai@^4.2.0, chai@^4.3.4: version "4.3.4" @@ -3282,14 +2624,38 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.0, chalk@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== +chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" +change-case@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037" + integrity sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA== + dependencies: + camel-case "^3.0.0" + constant-case "^2.0.0" + dot-case "^2.1.0" + header-case "^1.0.0" + is-lower-case "^1.1.0" + is-upper-case "^1.1.0" + lower-case "^1.1.1" + lower-case-first "^1.0.0" + no-case "^2.3.2" + param-case "^2.1.0" + pascal-case "^2.0.0" + path-case "^2.1.0" + sentence-case "^2.1.0" + snake-case "^2.1.0" + swap-case "^1.1.0" + title-case "^2.1.0" + upper-case "^1.1.1" + upper-case-first "^1.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -3312,24 +2678,24 @@ checkpoint-store@^1.1.0: dependencies: functional-red-black-tree "^1.0.1" -cheerio-select@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.4.0.tgz#3a16f21e37a2ef0f211d6d1aa4eff054bb22cdc9" - integrity sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew== +cheerio-select@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.5.0.tgz#faf3daeb31b17c5e1a9dabcee288aaf8aafa5823" + integrity sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg== dependencies: - css-select "^4.1.2" - css-what "^5.0.0" + css-select "^4.1.3" + css-what "^5.0.1" domelementtype "^2.2.0" domhandler "^4.2.0" - domutils "^2.6.0" + domutils "^2.7.0" cheerio@^1.0.0-rc.2: - version "1.0.0-rc.9" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.9.tgz#a3ae6b7ce7af80675302ff836f628e7cb786a67f" - integrity sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng== + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.10.tgz#2ba3dcdfcc26e7956fc1f440e61d51c643379f3e" + integrity sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw== dependencies: - cheerio-select "^1.4.0" - dom-serializer "^1.3.1" + cheerio-select "^1.5.0" + dom-serializer "^1.3.2" domhandler "^4.2.0" htmlparser2 "^6.1.0" parse5 "^6.0.1" @@ -3351,38 +2717,41 @@ chokidar@3.3.0: optionalDependencies: fsevents "~2.1.1" -chokidar@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" is-binary-path "^1.0.0" - is-glob "^2.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" path-is-absolute "^1.0.0" - readdirp "^2.0.0" + readdirp "^2.2.1" + upath "^1.1.1" optionalDependencies: - fsevents "^1.0.0" + fsevents "^1.2.7" -chokidar@^3.4.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== +chokidar@^3.4.0, chokidar@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" -chownr@^1.1.1: +chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -3448,6 +2817,15 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -3457,15 +2835,6 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -3487,11 +2856,6 @@ clone@2.1.2, clone@^2.0.0: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -3529,7 +2893,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colors@^1.1.2: +colors@^1.1.2, colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== @@ -3555,11 +2919,6 @@ command-line-args@^4.0.7: find-replace "^1.0.3" typical "^2.6.1" -commander@2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" - integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== - commander@2.18.0: version "2.18.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" @@ -3570,7 +2929,7 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^2.15.0, commander@^2.9.0: +commander@^2.15.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -3595,6 +2954,24 @@ concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constant-case@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" + integrity sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY= + dependencies: + snake-case "^2.1.0" + upper-case "^1.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -3617,9 +2994,9 @@ content-type@~1.0.4: integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== convert-source-map@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" @@ -3639,9 +3016,9 @@ cookie@^0.4.1: integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== cookiejar@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" - integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== copy-descriptor@^0.1.0: version "0.1.1" @@ -3649,20 +3026,25 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-pure@^3.0.1: - version "3.12.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.12.1.tgz#934da8b9b7221e2a2443dc71dfa5bd77a7ea00b8" - integrity sha512-1cch+qads4JnDSWsvc7d6nzlKAippwjUlf6vykkTLW53VSV+NkE6muGBToAjEA8pG90cSfcud3JgVmW2ds5TaQ== + version "3.18.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.2.tgz#d8cc11d4885ea919f3de776d45e720e4c769d406" + integrity sha512-4hMMLUlZhKJKOWbbGD1/VDUxGPEhEoN/T01k7bx271WiBKCvCfkgPzy0IeRS4PB50p6/N1q/SZL4B/TRsTE5bA== core-js@^2.4.0, core-js@^2.5.0: version "2.6.12" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cors@^2.8.1: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -3721,11 +3103,11 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: sha.js "^2.4.8" cross-fetch@^2.1.0, cross-fetch@^2.1.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.3.tgz#e8a0b3c54598136e037f8650f8e823ccdfac198e" - integrity sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw== + version "2.2.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.5.tgz#afaf5729f3b6c78d89c9296115c9f142541a5705" + integrity sha512-xqYAhQb4NhCJSRym03dwxpP1bYXpK3y7UN83Bo2WFi3x1Zmzn0SL/6xGoPr+gpt4WmNrgCCX3HPysvOwFOW36w== dependencies: - node-fetch "2.1.2" + node-fetch "2.6.1" whatwg-fetch "2.0.4" cross-spawn@^5.0.1: @@ -3737,7 +3119,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.5: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -3753,7 +3135,20 @@ cross-spawn@^6.0.5: resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= -crypto-browserify@3.12.0: +crypto-addr-codec@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz#e16cea892730178fe25a38f6d15b680cab3124ae" + integrity sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg== + dependencies: + base-x "^3.0.8" + big-integer "1.6.36" + blakejs "^1.1.0" + bs58 "^4.0.1" + ripemd160-min "0.0.6" + safe-buffer "^5.2.0" + sha3 "^2.1.1" + +crypto-browserify@3.12.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -3770,15 +3165,10 @@ crypto-browserify@3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-js@^3.1.9-1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" - integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== - -css-select@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.2.tgz#8b52b6714ed3a80d8221ec971c543f3b12653286" - integrity sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw== +css-select@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== dependencies: boolbase "^1.0.0" css-what "^5.0.0" @@ -3786,10 +3176,10 @@ css-select@^4.1.2: domutils "^2.6.0" nth-check "^2.0.0" -css-what@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.0.tgz#f0bf4f8bac07582722346ab243f6a35b512cfc47" - integrity sha512-qxyKHQvgKwzwDWC/rGbT821eJalfupxYW2qbSJSAtdSTimsr/MlaGONoNLllaUPZWf8QnbcKM/kPVYUQuEKAFA== +css-what@^5.0.0, css-what@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" + integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== d@1, d@^1.0.1: version "1.0.1" @@ -3813,13 +3203,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: dependencies: ms "2.0.0" -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - debug@3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -3828,9 +3211,9 @@ debug@3.2.6: ms "^2.1.1" debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: ms "2.1.2" @@ -3841,7 +3224,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -decamelize@^1.1.1, decamelize@^1.2.0: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -3878,9 +3261,9 @@ deep-equal@~1.1.1: regexp.prototype.flags "^1.2.0" deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== defer-to-connect@^1.0.1: version "1.1.3" @@ -3984,12 +3367,7 @@ detect-indent@^5.0.0: resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= -diff@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" - integrity sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww== - -diff@3.5.0, diff@^3.5.0: +diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== @@ -4003,14 +3381,7 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -dns-packet@^5.0.4, dns-packet@^5.2.1: - version "5.2.4" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.2.4.tgz#e004f409eadfa8ec861964dcb9eb395884fcf67d" - integrity sha512-vgu5Bx5IV8mXmh/9cn1lzn+J7okFlXe1vBRp+kCBJXg1nBED6Z/Q4e+QaDxQRSozMr14p/VQmdXwsf/I2wGjUA== - dependencies: - ip "^1.1.5" - -dns-packet@^5.3.0: +dns-packet@^5.0.4, dns-packet@^5.2.1, dns-packet@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.3.0.tgz#9a0f66118d3be176b828b911a842b0b1a4bdfd4f" integrity sha512-Nce7YLu6YCgWRvOmDBsJMo9M5/jV3lEZ5vUWnWXYmwURvPylHvq7nkDWhNmk1ZQoZZOP7oQh/S0lSxbisKOfHg== @@ -4024,13 +3395,13 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serializer@^1.0.1, dom-serializer@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.1.tgz#d845a1565d7c041a95e5dab62184ab41e3a519be" - integrity sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q== +dom-serializer@^1.0.1, dom-serializer@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== dependencies: domelementtype "^2.0.1" - domhandler "^4.0.0" + domhandler "^4.2.0" entities "^2.0.0" dom-walk@^0.1.0: @@ -4038,27 +3409,39 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== domhandler@^4.0.0, domhandler@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + version "4.2.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.2.tgz#e825d721d19a86b8c201a35264e226c678ee755f" + integrity sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w== dependencies: domelementtype "^2.2.0" -domutils@^2.5.2, domutils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7" - integrity sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== +domutils@^2.5.2, domutils@^2.6.0, domutils@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" domelementtype "^2.2.0" domhandler "^4.2.0" +dot-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" + integrity sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4= + dependencies: + no-case "^2.2.0" + dotenv@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" @@ -4099,9 +3482,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.47: - version "1.3.727" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.727.tgz#857e310ca00f0b75da4e1db6ff0e073cc4a91ddf" - integrity sha512-Mfz4FIB4FSvEwBpDfdipRIrwd6uo8gUDoRDF4QEYb4h4tSuI3ov594OrjU6on042UlFHouIJpClDODGkPcBSbg== + version "1.3.861" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.861.tgz#981e37a79af7a7b29bbaeed36376f4795527de13" + integrity sha512-GZyflmpMnZRdZ1e2yAyvuFwz1MPSVQelwHX4TJZyXypB8NcxdPvPNwy5lOTxnlkrK13EiQzyTPugRSnj6cBgKg== elliptic-solidity@^1.0.0: version "1.0.0" @@ -4110,19 +3493,6 @@ elliptic-solidity@^1.0.0: dependencies: solc "^0.5.5" -elliptic@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -4141,6 +3511,11 @@ emoji-regex@^7.0.1: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encode-utf8@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" @@ -4186,6 +3561,16 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + enquirer@^2.3.0, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -4203,12 +3588,7 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -eol@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" - integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== - -errno@~0.1.1: +errno@^0.1.3, errno@~0.1.1: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== @@ -4229,27 +3609,31 @@ error-stack-parser@^1.3.6: dependencies: stackframe "^0.3.1" -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== +es-abstract@^1.18.5, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" has "^1.0.3" has-symbols "^1.0.2" - is-callable "^1.2.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" object-keys "^1.1.1" object.assign "^4.1.2" string.prototype.trimend "^1.0.4" string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" + unbox-primitive "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -4260,7 +3644,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== @@ -4269,7 +3653,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.50: es6-symbol "~3.1.3" next-tick "~1.0.0" -es6-iterator@~2.0.3: +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -4278,7 +3662,38 @@ es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-symbol@^3.1.1, es6-symbol@~3.1.3: +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== @@ -4286,6 +3701,16 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -4296,6 +3721,16 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" @@ -4572,9 +4007,9 @@ ethashjs@~0.0.7: miller-rabin "^4.0.0" ethereum-bloom-filters@^1.0.6: - version "1.0.9" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz#4a59dead803af0c9e33834170bd7695df67061ec" - integrity sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg== + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== dependencies: js-sha3 "^0.8.0" @@ -4621,7 +4056,7 @@ ethereum-ens@0.8.0, ethereum-ens@^0.8.0: underscore "^1.8.3" web3 "^1.0.0-beta.34" -ethereum-waffle@^3.1.1: +ethereum-waffle@^3.3.0: version "3.4.0" resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.4.0.tgz#990b3c6c26db9c2dd943bf26750a496f60c04720" integrity sha512-ADBqZCkoSA5Isk486ntKJVjFEawIiC+3HxNqpJqONvh3YXBTNiRfXvJtGuAFLXPG91QaqkGqILEHANAo7j/olQ== @@ -4632,17 +4067,6 @@ ethereum-waffle@^3.1.1: "@ethereum-waffle/provider" "^3.4.0" ethers "^5.0.1" -ethereum-waffle@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.3.0.tgz#166a0cc1d3b2925f117b20ef0951b3fe72e38e79" - integrity sha512-4xm3RWAPCu5LlaVxYEg0tG3L7g5ovBw1GY/UebrzZ+OTx22vcPjI+bvelFlGBpkdnO5yOIFXjH2eK59tNAe9IA== - dependencies: - "@ethereum-waffle/chai" "^3.3.0" - "@ethereum-waffle/compiler" "^3.3.0" - "@ethereum-waffle/mock-contract" "^3.2.2" - "@ethereum-waffle/provider" "^3.3.0" - ethers "^5.0.1" - ethereumjs-abi@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" @@ -4661,7 +4085,7 @@ ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: "ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": version "0.6.8" - resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#1a27c59c15ab1e95ee8e5c4ed6ad814c49cc439e" + resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0" dependencies: bn.js "^4.11.8" ethereumjs-util "^6.0.0" @@ -4732,6 +4156,13 @@ ethereumjs-common@^1.1.0, ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== +ethereumjs-testrpc@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/ethereumjs-testrpc/-/ethereumjs-testrpc-6.0.3.tgz#7a0b87bf3670f92f607f98fa6a78801d9741b124" + integrity sha512-lAxxsxDKK69Wuwqym2K49VpXtBvLEsXr1sryNG4AkvL5DomMdeCBbu3D87UEevKenLHBiT8GTjARwN6Yj039gA== + dependencies: + webpack "^3.0.0" + ethereumjs-tx@2.1.2, ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" @@ -4798,10 +4229,10 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7, ethereumjs-util@^7.0.8, ethereumjs-util@^7.0.9: - version "7.0.10" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.10.tgz#5fb7b69fa1fda0acc59634cf39d6b0291180fc1f" - integrity sha512-c/xThw6A+EAnej5Xk5kOzFzyoSnw0WX0tSlZ6pAsfGVvQj3TItaDg9b1+Fz1RJXA+y2YksKwQnuzgt1eY6LKzw== +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.7, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.2.tgz#cfd79a9a3f5cdc042d1abf29964de9caf10ec238" + integrity sha512-xCV3PTAhW8Q2k88XZn9VcO4OrjpeXAlDm5LQTaOLp81SjNSSY6+MwuGXrx6vafOMheWSmZGxIXUbue5e9UvUBw== dependencies: "@types/bn.js" "^5.1.0" bn.js "^5.1.2" @@ -4864,13 +4295,13 @@ ethereumjs-wallet@0.6.5: uuid "^3.3.2" ethers@^4.0.0-beta.1, ethers@^4.0.32, ethers@^4.0.40: - version "4.0.48" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" - integrity sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g== + version "4.0.49" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" + integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== dependencies: aes-js "3.0.0" - bn.js "^4.4.0" - elliptic "6.5.3" + bn.js "^4.11.9" + elliptic "6.5.4" hash.js "1.1.3" js-sha3 "0.5.7" scrypt-js "2.0.4" @@ -4878,77 +4309,41 @@ ethers@^4.0.0-beta.1, ethers@^4.0.32, ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.0, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.4.tgz#8ae973705ed962f8f41dc59693704002a38dd18b" - integrity sha512-EAPQ/fgGRu0PoR/VNFnHTMOtG/IZ0AItdW55C9T8ffmVu0rnyllZL404eBF66elJehOLz2kxnUrhXpE7TCpW7g== - dependencies: - "@ethersproject/abi" "5.1.2" - "@ethersproject/abstract-provider" "5.1.0" - "@ethersproject/abstract-signer" "5.1.0" - "@ethersproject/address" "5.1.0" - "@ethersproject/base64" "5.1.0" - "@ethersproject/basex" "5.1.0" - "@ethersproject/bignumber" "5.1.1" - "@ethersproject/bytes" "5.1.0" - "@ethersproject/constants" "5.1.0" - "@ethersproject/contracts" "5.1.1" - "@ethersproject/hash" "5.1.0" - "@ethersproject/hdnode" "5.1.0" - "@ethersproject/json-wallets" "5.1.0" - "@ethersproject/keccak256" "5.1.0" - "@ethersproject/logger" "5.1.0" - "@ethersproject/networks" "5.1.0" - "@ethersproject/pbkdf2" "5.1.0" - "@ethersproject/properties" "5.1.0" - "@ethersproject/providers" "5.1.2" - "@ethersproject/random" "5.1.0" - "@ethersproject/rlp" "5.1.0" - "@ethersproject/sha2" "5.1.0" - "@ethersproject/signing-key" "5.1.0" - "@ethersproject/solidity" "5.1.0" - "@ethersproject/strings" "5.1.0" - "@ethersproject/transactions" "5.1.1" - "@ethersproject/units" "5.1.0" - "@ethersproject/wallet" "5.1.0" - "@ethersproject/web" "5.1.0" - "@ethersproject/wordlists" "5.1.0" - -ethers@^5.0.17: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.3.1.tgz#1f018f0aeb651576cd84fd987a45f0b99646d761" - integrity sha512-xCKmC0gsZ9gks89ZfK3B1y6LlPdvX5fxDtu9SytnpdDJR1M7pmJI+4H0AxQPMgUYr7GtQdmECLR0gWdJQ+lZYw== - dependencies: - "@ethersproject/abi" "5.3.1" - "@ethersproject/abstract-provider" "5.3.0" - "@ethersproject/abstract-signer" "5.3.0" - "@ethersproject/address" "5.3.0" - "@ethersproject/base64" "5.3.0" - "@ethersproject/basex" "5.3.0" - "@ethersproject/bignumber" "5.3.0" - "@ethersproject/bytes" "5.3.0" - "@ethersproject/constants" "5.3.0" - "@ethersproject/contracts" "5.3.0" - "@ethersproject/hash" "5.3.0" - "@ethersproject/hdnode" "5.3.0" - "@ethersproject/json-wallets" "5.3.0" - "@ethersproject/keccak256" "5.3.0" - "@ethersproject/logger" "5.3.0" - "@ethersproject/networks" "5.3.1" - "@ethersproject/pbkdf2" "5.3.0" - "@ethersproject/properties" "5.3.0" - "@ethersproject/providers" "5.3.1" - "@ethersproject/random" "5.3.0" - "@ethersproject/rlp" "5.3.0" - "@ethersproject/sha2" "5.3.0" - "@ethersproject/signing-key" "5.3.0" - "@ethersproject/solidity" "5.3.0" - "@ethersproject/strings" "5.3.0" - "@ethersproject/transactions" "5.3.0" - "@ethersproject/units" "5.3.0" - "@ethersproject/wallet" "5.3.0" - "@ethersproject/web" "5.3.0" - "@ethersproject/wordlists" "5.3.0" +ethers@^5.0.1, ethers@^5.0.13, ethers@^5.0.2, ethers@^5.1.4, ethers@^5.4.7: + version "5.4.7" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.7.tgz#0fd491a5da7c9793de2d6058d76b41b1e7efba8f" + integrity sha512-iZc5p2nqfWK1sj8RabwsPM28cr37Bpq7ehTQ5rWExBr2Y09Sn1lDKZOED26n+TsZMye7Y6mIgQ/1cwpSD8XZew== + dependencies: + "@ethersproject/abi" "5.4.1" + "@ethersproject/abstract-provider" "5.4.1" + "@ethersproject/abstract-signer" "5.4.1" + "@ethersproject/address" "5.4.0" + "@ethersproject/base64" "5.4.0" + "@ethersproject/basex" "5.4.0" + "@ethersproject/bignumber" "5.4.2" + "@ethersproject/bytes" "5.4.0" + "@ethersproject/constants" "5.4.0" + "@ethersproject/contracts" "5.4.1" + "@ethersproject/hash" "5.4.0" + "@ethersproject/hdnode" "5.4.0" + "@ethersproject/json-wallets" "5.4.0" + "@ethersproject/keccak256" "5.4.0" + "@ethersproject/logger" "5.4.1" + "@ethersproject/networks" "5.4.2" + "@ethersproject/pbkdf2" "5.4.0" + "@ethersproject/properties" "5.4.1" + "@ethersproject/providers" "5.4.5" + "@ethersproject/random" "5.4.0" + "@ethersproject/rlp" "5.4.0" + "@ethersproject/sha2" "5.4.0" + "@ethersproject/signing-key" "5.4.0" + "@ethersproject/solidity" "5.4.0" + "@ethersproject/strings" "5.4.0" + "@ethersproject/transactions" "5.4.0" + "@ethersproject/units" "5.4.0" + "@ethersproject/wallet" "5.4.0" + "@ethersproject/web" "5.4.0" + "@ethersproject/wordlists" "5.4.0" ethjs-abi@^0.2.1: version "0.2.1" @@ -4975,6 +4370,14 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= + dependencies: + d "1" + es5-ext "~0.10.14" + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -5011,18 +4414,24 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exit-on-epipe@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -5036,13 +4445,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - express@^4.14.0: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -5080,11 +4482,11 @@ express@^4.14.0: vary "~1.1.2" ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + version "1.6.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" + integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== dependencies: - type "^2.0.0" + type "^2.5.0" extend-shallow@^2.0.1: version "2.0.1" @@ -5115,13 +4517,6 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -5153,10 +4548,17 @@ fake-merkle-patricia-tree@^1.0.1: dependencies: checkpoint-store "^1.1.0" -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= +faker@^5.3.1: + version "5.5.3" + resolved "https://registry.yarnpkg.com/faker/-/faker-5.5.3.tgz#c57974ee484431b25205c2c8dc09fda861e51e0e" + integrity sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g== + +fast-check@^2.12.1: + version "2.17.0" + resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-2.17.0.tgz#9b9637684332be386219a5f73a4799874da7461c" + integrity sha512-fNNKkxNEJP+27QMcEzF6nbpOYoSZIS0p+TyB+xh/jXqRBxRhLkiZSREly4ruyV8uJi7nwH1YWAhi7OOK5TubRw== + dependencies: + pure-rand "^5.0.0" fast-deep-equal@^3.1.1: version "3.1.3" @@ -5204,22 +4606,6 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -5273,7 +4659,7 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -5336,10 +4722,10 @@ fmix@^0.1.0: dependencies: imul "^1.0.0" -follow-redirects@^1.10.0, follow-redirects@^1.12.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" - integrity sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg== +follow-redirects@^1.12.1, follow-redirects@^1.14.0: + version "1.14.4" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379" + integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g== for-each@^0.3.3, for-each@~0.3.3: version "0.3.3" @@ -5348,17 +4734,10 @@ for-each@^0.3.3, for-each@~0.3.3: dependencies: is-callable "^1.1.3" -for-in@^1.0.1, for-in@^1.0.2: +for-in@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= foreach@^2.0.5: version "2.0.5" @@ -5406,10 +4785,10 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fp-ts@1.19.3: version "1.19.3" @@ -5480,7 +4859,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: +fs-minipass@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== @@ -5497,7 +4876,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.0.0: +fsevents@^1.2.7: version "1.2.13" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== @@ -5510,12 +4889,12 @@ fsevents@~2.1.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -fsevents@~2.3.1: +fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.1.1, function-bind@~1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -5525,6 +4904,15 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +ganache-cli@^6.1.0: + version "6.12.2" + resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" + integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== + dependencies: + ethereumjs-util "6.2.1" + source-map-support "0.5.12" + yargs "13.2.4" + ganache-core@^2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.2.tgz#27e6fc5417c10e6e76e2e646671869d7665814a3" @@ -5577,7 +4965,7 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -5596,7 +4984,7 @@ get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.1.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -5610,6 +4998,14 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -5622,32 +5018,25 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: - is-glob "^2.0.0" + is-glob "^3.1.0" + path-dirname "^1.0.0" -glob-parent@~5.1.0: +glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== +glob@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5656,10 +5045,10 @@ glob@7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob@^7.1.2, glob@^7.1.3: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5668,7 +5057,7 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.2, glob@^7.1.3, glob@~7.1.6: +glob@~7.1.7: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -5736,14 +5125,9 @@ got@^7.1.0: url-to-options "^1.0.1" graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -growl@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" - integrity sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q== + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== growl@1.10.5: version "1.10.5" @@ -5764,14 +5148,14 @@ har-validator@~5.1.3: har-schema "^2.0.0" hardhat-abi-exporter@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.2.1.tgz#98ad242d08987d34416c6315729f36f9d544e4fa" - integrity sha512-Um7+RPvJEj+OqWjPoPKlTTkO1Akr10pqpgMk8Pw2jz2wrGv5XQBGNW5aQgGVDUosYktUIWDaEhcwwFKbFsir9A== + version "2.3.0" + resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.3.0.tgz#f7aeb56f2ceef1ccdb75a5b8d81dc80cbbfeefc4" + integrity sha512-9EVhogHgFWsi4Bc46tv+WirOR+auGBZrv9V5/qAHBjOqYiZPbNXoFUo/yQhOAsF8Bz4Q9p4jHpdeQXnYt7g6Yw== hardhat-deploy-ethers@^0.3.0-beta.10: - version "0.3.0-beta.10" - resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.10.tgz#bccfcf635d380bbab3638960f6739fe4d396fc5f" - integrity sha512-TeyriUshRZ7XVHOjMsDtTozIrdwLf3Bw+oZRYNhXdG/eut5HeDhjUFPfRlG7TI1lSLvkcB5dt7OxOtPYKDOxTg== + version "0.3.0-beta.11" + resolved "https://registry.yarnpkg.com/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.11.tgz#7f9122301853b01cb85b5ac85ba84dd764c98b07" + integrity sha512-HnniBGBYsFRQDXBy3bQ27i86pQQnHkN0Mxdwiu869jZURY2gDQ4OEZxcXItnWQqBjYiEaavVyw/Xle7qwKOBAg== hardhat-deploy@^0.8.11: version "0.8.11" @@ -5808,16 +5192,16 @@ hardhat-gas-reporter@^1.0.4: eth-gas-reporter "^0.2.20" sha1 "^1.1.1" -hardhat@^2.0.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.4.0.tgz#b0db7a6e07fa72414665634ced149bbb10252499" - integrity sha512-IMh7Ws/7fIO5RRkm4nhqS2JWEct0690K35BcFVuIOoIRMcDLKc/7+JSxhey3RkXc5M4qUvdxfQI0LRQx4aqBZw== +hardhat@^2.6.5: + version "2.6.5" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.6.5.tgz#61d3e22da34e1b175bbe599f77396b32f9788b58" + integrity sha512-sBhREWZjQTtR/KMMp2F3ySuDqL0norjNq68geR3nlXRHXYKuNKeL7xqVsmldekt3sVB5Wh1WX7xDX79kvUr+fA== dependencies: - "@ethereumjs/block" "^3.3.0" - "@ethereumjs/blockchain" "^5.3.0" - "@ethereumjs/common" "^2.3.1" - "@ethereumjs/tx" "^3.2.1" - "@ethereumjs/vm" "^5.3.2" + "@ethereumjs/block" "^3.4.0" + "@ethereumjs/blockchain" "^5.4.0" + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" + "@ethereumjs/vm" "^5.5.2" "@ethersproject/abi" "^5.1.2" "@sentry/node" "^5.18.1" "@solidity-parser/parser" "^0.11.0" @@ -5835,7 +5219,7 @@ hardhat@^2.0.4: eth-sig-util "^2.5.2" ethereum-cryptography "^0.1.2" ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.0.10" + ethereumjs-util "^7.1.0" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" @@ -5861,57 +5245,6 @@ hardhat@^2.0.4: uuid "^3.3.2" ws "^7.4.6" -hardhat@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.2.1.tgz#bef0031b994e3f60a88d428f2097195c58cf9ed2" - integrity sha512-8s7MtGXdh0NDwQKdlA8m8QdloVIN1+hv5aFpn0G5Ljj9vfNY9kUoc0a9pMboeGbd9WrS+XrZs5YlsPgQjaW/Tg== - dependencies: - "@ethereumjs/block" "^3.2.1" - "@ethereumjs/blockchain" "^5.2.1" - "@ethereumjs/common" "^2.2.0" - "@ethereumjs/tx" "^3.1.3" - "@ethereumjs/vm" "^5.3.2" - "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.11.0" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" - adm-zip "^0.4.16" - ansi-escapes "^4.3.0" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - eth-sig-util "^2.5.2" - ethereum-cryptography "^0.1.2" - ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.0.10" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "^7.1.3" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - lodash "^4.17.11" - merkle-patricia-tree "^4.1.0" - mnemonist "^0.38.0" - mocha "^7.1.2" - node-fetch "^2.6.0" - qs "^6.7.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - slash "^3.0.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - "true-case-path" "^2.2.1" - tsort "0.0.1" - uuid "^3.3.2" - ws "^7.2.1" - has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -5956,6 +5289,13 @@ has-to-string-tag-x@^1.2.0: dependencies: has-symbol-support-x "^1.4.1" +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -6024,25 +5364,28 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" -he@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= - he@1.2.0, he@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +header-case@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" + integrity sha1-lTWXMZfBRLCWE81l0xfvGZY70C0= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.3" + heap@0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= -highlight.js@^10.4.0, highlight.js@^10.4.1: - version "10.7.2" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.2.tgz#89319b861edc66c48854ed1e6da21ea89f847360" - integrity sha512-oFLl873u4usRM9K63j4ME9u3etNF0PLiJhSQ8rdfuL51Wn3zkD6drf9ZW0dOzjnZI22YYG24z30JcmfCZjMgYg== +highlight.js@^10.4.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== highlight.js@^9.15.8: version "9.18.5" @@ -6050,16 +5393,16 @@ highlight.js@^9.15.8: integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== highlightjs-solidity@^1.0.18: - version "1.0.22" - resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-1.0.22.tgz#da3537cfcd4d49505bdc56700132422f403f5924" - integrity sha512-Ha1TDrtOwCDCSa+D99CMCdm2fOlpMqcEzC45rpwyr6SOPvor69tqhecolUA7TjnfHU8zJswH3lnxI1ti0tLmFw== + version "1.2.2" + resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-1.2.2.tgz#049a050c0d8009c99b373537a4e66bf55366de51" + integrity sha512-+cZ+1+nAO5Pi6c70TKuMcPmwqLECxiYhnQc1MxdXckK94zyWFMNZADzu98ECNlf5xCRdNh+XKp+eklmRU+Dniw== -highlightjs-solidity@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-1.1.0.tgz#bdf0adba6deffdb1651f8fa63bee4dacc3dc4e00" - integrity sha512-LtH7uuoe+FOmtQd41ozAZKLJC2chqdqs461FJcWAx00R3VcBhSQTRFfzRGtTQqu2wsVIEdHiyynrPrEDDWyIMw== +highlightjs-solidity@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-2.0.1.tgz#ee1beb6f353d4503aa3a011bbb86577976365b59" + integrity sha512-9YY+HQpXMTrF8HgRByjeQhd21GXAz2ktMPTcs6oWSj5HJR52fgsNoelMOmgigwcpt9j4tu4IVSaWaJB2n2TbvQ== -hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: +hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= @@ -6149,6 +5492,11 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -6165,9 +5513,9 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" @@ -6178,7 +5526,7 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -6199,9 +5547,9 @@ immediate@~3.2.3: integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= immutable@^4.0.0-rc.12: - version "4.0.0-rc.12" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" - integrity sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A== + version "4.0.0-rc.15" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.15.tgz#c30056f05eaaf5650fd15230586688fdd15c54bc" + integrity sha512-v8+A3sNyaieoP9dHegl3tEYnIZa7vqNiSv0U6D7YddiZi34VjKy4GsIxrRHj2d8+CS3MeiVja5QyNe4JO/aEXA== import-fresh@^2.0.0: version "2.0.0" @@ -6242,6 +5590,11 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -6266,6 +5619,20 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -6278,6 +5645,11 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + io-ts@1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" @@ -6285,11 +5657,6 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" -ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -6310,11 +5677,12 @@ is-accessor-descriptor@^1.0.0: kind-of "^6.0.0" is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" @@ -6322,9 +5690,11 @@ is-arrayish@^0.2.1: integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" is-binary-path@^1.0.0: version "1.0.1" @@ -6341,11 +5711,12 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-buffer@^1.1.5: version "1.1.6" @@ -6357,10 +5728,10 @@ is-buffer@~2.0.3: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-ci@^2.0.0: version "2.0.0" @@ -6370,9 +5741,9 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + version "2.7.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" + integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== dependencies: has "^1.0.3" @@ -6391,9 +5762,11 @@ is-data-descriptor@^1.0.0: kind-of "^6.0.0" is-date-object@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.4.tgz#550cfcc03afada05eea3dd30981c7b09551f73e5" - integrity sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" is-descriptor@^0.1.0: version "0.1.6" @@ -6423,18 +5796,6 @@ is-docker@^2.0.0: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -6447,12 +5808,7 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - -is-extglob@^2.1.1: +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= @@ -6485,21 +5841,23 @@ is-function@^1.0.1: integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== is-generator-function@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.9.tgz#e5f82c2323673e7fcad3d12858c83c4039f6399c" - integrity sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A== + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: - is-extglob "^1.0.0" + is-extglob "^2.1.0" -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -6508,22 +5866,24 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= +is-lower-case@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" + integrity sha1-fhR75HaNxGbbO/shzGCzHmrWk5M= + dependencies: + lower-case "^1.1.0" + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== dependencies: - kind-of "^3.0.2" + has-tostringtag "^1.0.0" is-number@^3.0.0: version "3.0.0" @@ -6532,11 +5892,6 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -6559,45 +5914,35 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - -is-regex@^1.0.4, is-regex@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== +is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" - has-symbols "^1.0.2" - -is-regex@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== - dependencies: - has "^1.0.3" + has-tostringtag "^1.0.0" is-retry-allowed@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-string@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" @@ -6606,22 +5951,29 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" - integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== +is-typed-array@^1.1.3, is-typed-array@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" + integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA== dependencies: - available-typed-arrays "^1.0.2" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" - es-abstract "^1.18.0-next.2" + es-abstract "^1.18.5" foreach "^2.0.5" - has-symbols "^1.0.1" + has-tostringtag "^1.0.0" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-upper-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" + integrity sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8= + dependencies: + upper-case "^1.1.0" + is-url@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" @@ -6632,6 +5984,13 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-weakref@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.1.tgz#842dba4ec17fa9ac9850df2d6efbc1737274f2a2" + integrity sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ== + dependencies: + call-bind "^1.0.0" + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -6649,7 +6008,7 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -6694,11 +6053,6 @@ js-sha3@0.5.5, js-sha3@0.5.7, js-sha3@0.8.0, js-sha3@^0.5.7, js-sha3@^0.8.0: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6745,6 +6099,11 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -6774,11 +6133,6 @@ json-rpc-random-id@^1.0.0: resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -6818,6 +6172,13 @@ json5@^0.5.1: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -6856,7 +6217,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -keccak@3.0.1, keccak@^3.0.0: +keccak@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== @@ -6874,6 +6235,15 @@ keccak@^2.0.0: nan "^2.14.0" safe-buffer "^5.2.0" +keccak@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -6919,6 +6289,11 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" @@ -6926,6 +6301,13 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + level-codec@^9.0.0: version "9.0.2" resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" @@ -7142,6 +6524,30 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -7205,7 +6611,7 @@ lodash@4.17.20: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -lodash@^4.14.2, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7217,6 +6623,11 @@ log-symbols@3.0.0: dependencies: chalk "^2.4.2" +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + looper@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" @@ -7234,6 +6645,18 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lower-case-first@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" + integrity sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E= + dependencies: + lower-case "^1.1.2" + +lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -7288,6 +6711,13 @@ ltgt@~2.1.1: resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ= +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -7310,15 +6740,10 @@ match-all@^1.2.6: resolved "https://registry.yarnpkg.com/match-all/-/match-all-1.2.6.tgz#66d276ad6b49655551e63d3a6ee53e8be0566f8d" integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - mcl-wasm@^0.7.1: - version "0.7.7" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.7.tgz#fd463dd1641a37f9f55b6ca8e5a38e95be2bc58f" - integrity sha512-jDGiCQA++5hX37gdH6RDZ3ZsA0raet7xyY/R5itj5cbcdf4Gvw+YyxWX/ZZ0Z2UPxJiw1ktRsCJZzpnqlQILdw== + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== md5.js@^1.3.4: version "1.3.5" @@ -7341,6 +6766,15 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + memdown@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" @@ -7377,6 +6811,14 @@ memdown@~3.0.0: ltgt "~2.2.0" safe-buffer "~5.1.1" +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -7414,26 +6856,13 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" -merkle-patricia-tree@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.1.0.tgz#010636c4cfd68682df33a2e3186b7d0be7b98b9d" - integrity sha512-vmP1J7FwIpprFMVjjSMM1JAwFce85Q+tp0TYIedYv8qaMh2oLUZ3ETXn9wbgi9S6elySzKzGa+Ai6VNKGEwSlg== - dependencies: - "@types/levelup" "^4.3.0" - ethereumjs-util "^7.0.8" - level-mem "^5.0.1" - level-ws "^2.0.0" - readable-stream "^3.6.0" - rlp "^2.2.3" - semaphore-async-await "^1.5.1" - -merkle-patricia-tree@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.0.tgz#a204b9041be5c25e8d14f0ff47021de090e811a1" - integrity sha512-0sBVXs7z1Q1/kxzWZ3nPnxSPiaHKF/f497UQzt9O7isRcS10tel9jM/4TivF6Jv7V1yFq4bWyoATxbDUOen5vQ== +merkle-patricia-tree@^4.2.0, merkle-patricia-tree@^4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.2.tgz#6dec17855370172458244c2f42c989dd60b773a3" + integrity sha512-eqZYNTshcYx9aESkSPr71EqwsR/QmpnObDEV4iLxkt/x/IoLYZYjJvKY72voP/27Vy61iMOrfOG6jrn7ttXD+Q== dependencies: "@types/levelup" "^4.3.0" - ethereumjs-util "^7.0.10" + ethereumjs-util "^7.1.2" level-mem "^5.0.1" level-ws "^2.0.0" readable-stream "^3.6.0" @@ -7445,25 +6874,6 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -7499,17 +6909,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.47.0: - version "1.47.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== +mime-db@1.50.0: + version "1.50.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" + integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.30" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== + version "2.1.33" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" + integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g== dependencies: - mime-db "1.47.0" + mime-db "1.50.0" mime@1.6.0: version "1.6.0" @@ -7521,6 +6931,11 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -7543,7 +6958,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= @@ -7555,17 +6970,12 @@ minimatch@3.0.4, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -7573,7 +6983,7 @@ minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.2.1: +minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== @@ -7600,14 +7010,7 @@ mkdirp@*: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -mkdirp@0.5.5, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.5, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -7615,28 +7018,12 @@ mkdirp@0.5.5, mkdirp@^0.5.0, mkdirp@^0.5.1: minimist "^1.2.5" mnemonist@^0.38.0: - version "0.38.3" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.3.tgz#35ec79c1c1f4357cfda2fe264659c2775ccd7d9d" - integrity sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw== + version "0.38.4" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.4.tgz#5d2f2dc4386aef78bfadeea60ce704dcf0ef8f3d" + integrity sha512-mflgW0gEWmVLbDDE2gJbOh3+RltTN7CgV9jV25qyCnyLN9FtoltWr7ZtAEDeD9u8W4oFAoolR6fBWieXdn3u8Q== dependencies: obliterator "^1.6.1" -mocha@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794" - integrity sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA== - dependencies: - browser-stdout "1.3.0" - commander "2.11.0" - debug "3.1.0" - diff "3.3.1" - escape-string-regexp "1.0.5" - glob "7.1.2" - growl "1.10.3" - he "1.1.1" - mkdirp "0.5.1" - supports-color "4.4.0" - mocha@^7.1.1, mocha@^7.1.2: version "7.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" @@ -7746,28 +7133,15 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -name-wrapper@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/name-wrapper/-/name-wrapper-1.0.0.tgz#6e064a29b9c7806e18032fdbf620a01de48cdfbb" - integrity sha512-7wTdz1ees+Q3GXFu/Mp76owXzWqYp+k2bB/W0yRnfFtnzU5Y8ga6VKbgl+UWYuCfndy0ylRSQpHPom/mEsDVqg== - dependencies: - "@ensdomains/ens-contracts" "0.0.3" - "@nomiclabs/hardhat-ethers" "^2.0.0" - "@nomiclabs/hardhat-waffle" "^2.0.0" - "@openzeppelin/contracts" "^4.0.0" - chalk "^4.1.0" - ethereum-waffle "^3.1.1" - ethers "^5.0.17" - hardhat "^2.0.4" - node-watch "^0.7.0" - qrcode-terminal "^0.12.0" - ramda "^0.27.1" - solium "^1.2.5" - nan@^2.12.1, nan@^2.14.0: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + +nano-base32@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nano-base32/-/nano-base32-1.0.1.tgz#ba548c879efcfb90da1c4d9e097db4a46c9255ef" + integrity sha1-ulSMh578+5DaHE2eCX20pGySVe8= nano-json-stream-parser@^0.1.2: version "0.1.2" @@ -7801,6 +7175,11 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +neo-async@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + next-tick@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -7811,6 +7190,13 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +no-case@^2.2.0, no-case@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -7824,16 +7210,18 @@ node-environment-flags@1.0.6: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" - integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= - -node-fetch@^2.6.0, node-fetch@^2.6.1: +node-fetch@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-fetch@^2.6.0, node-fetch@^2.6.1: + version "2.6.5" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd" + integrity sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ== + dependencies: + whatwg-url "^5.0.0" + node-fetch@~1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -7843,14 +7231,38 @@ node-fetch@~1.7.1: is-stream "^1.0.1" node-gyp-build@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" - integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" + integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== -node-watch@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.7.1.tgz#0caaa6a6833b0d533487f953c52a6c787769ba7c" - integrity sha512-UWblPYuZYrkCQCW5PxAwYSxaELNBLUckrTBBk8xr1/bUgyOkYYTsUcV4e3ytcazFEOyiRyiUrsG37pu6I0I05g== +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" nofilter@^1.0.4: version "1.0.4" @@ -7867,7 +7279,7 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.0, normalize-path@^2.0.1: +normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= @@ -7880,9 +7292,9 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== npm-run-path@^2.0.0: version "2.0.2" @@ -7892,9 +7304,9 @@ npm-run-path@^2.0.0: path-key "^2.0.0" nth-check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== dependencies: boolbase "^1.0.0" @@ -7916,7 +7328,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.0.0, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -7930,15 +7342,10 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.9.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" - integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw== - -object-inspect@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== +object-inspect@^1.11.0, object-inspect@^1.9.0, object-inspect@~1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== object-is@^1.0.1: version "1.1.5" @@ -7986,21 +7393,13 @@ object.assign@^4.1.2: object-keys "^1.1.1" object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + version "2.1.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" + es-abstract "^1.19.1" object.pick@^1.3.0: version "1.3.0" @@ -8069,6 +7468,11 @@ optionator@^0.8.2: type-check "~0.3.2" word-wrap "~1.2.3" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -8090,6 +7494,15 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -8105,11 +7518,21 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -8162,11 +7585,18 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@^1.0.4: +pako@^1.0.4, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== +param-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -8190,20 +7620,10 @@ parse-cache-control@^1.0.1: resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" integrity sha1-juqz5U+laSD+Fro493+iGqzC104= -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - parse-headers@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" - integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + version "2.0.4" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.4.tgz#9eaf2d02bed2d1eff494331ce3df36d7924760bf" + integrity sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw== parse-json@^2.2.0: version "2.2.0" @@ -8237,6 +7657,14 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" + integrity sha1-LVeNNFX2YNpl7KGO+VtODekSdh4= + dependencies: + camel-case "^3.0.0" + upper-case-first "^1.1.0" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -8279,11 +7707,28 @@ patch-package@^6.2.2: slash "^2.0.0" tmp "^0.0.33" +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + path-browserify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== +path-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" + integrity sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU= + dependencies: + no-case "^2.2.0" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -8317,9 +7762,9 @@ path-key@^2.0.0, path-key@^2.0.1: integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" @@ -8335,6 +7780,13 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" @@ -8351,20 +7803,15 @@ pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: safe-buffer "^5.0.1" sha.js "^2.4.8" -pegjs@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" - integrity sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0= - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" - integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== pify@^2.0.0, pify@^2.3.0: version "2.3.0" @@ -8413,20 +7860,15 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - prettier@^1.14.3: version "1.19.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== prettier@^2.1.2: - version "2.3.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18" - integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== + version "2.4.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" + integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== printj@~1.1.0: version "1.1.2" @@ -8469,11 +7911,11 @@ promise@^8.0.0: asap "~2.0.6" proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" prr@~1.0.1: @@ -8569,15 +8011,20 @@ punycode@2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== +pure-rand@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-5.0.0.tgz#87f5bdabeadbd8904e316913a5c0b8caac517b37" + integrity sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA== qs@6.7.0: version "6.7.0" @@ -8605,25 +8052,16 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -ramda@^0.27.1: - version "0.27.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.27.1.tgz#66fc2df3ef873874ffc2da6aa8984658abacf5c9" - integrity sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw== - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -8672,6 +8110,14 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -8681,6 +8127,15 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + readable-stream@^1.0.33: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" @@ -8691,7 +8146,7 @@ readable-stream@^1.0.33: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -8723,7 +8178,7 @@ readable-stream@~1.0.15: isarray "0.0.1" string_decoder "~0.10.x" -readdirp@^2.0.0: +readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== @@ -8739,10 +8194,10 @@ readdirp@~3.2.0: dependencies: picomatch "^2.0.4" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -8756,6 +8211,11 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -8765,13 +8225,6 @@ regenerator-transform@^0.10.0: babel-types "^6.19.0" private "^0.1.6" -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== - dependencies: - is-equal-shallow "^0.1.3" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -8932,14 +8385,14 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.17.0, resolve@~1.17.0: +resolve@1.17.0: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.8.1: +resolve@^1.10.0, resolve@^1.8.1, resolve@~1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -8979,6 +8432,13 @@ rfc4648@^1.5.0: resolved "https://registry.yarnpkg.com/rfc4648/-/rfc4648-1.5.0.tgz#1ba940ec1649685ec4d88788dc57fb8e18855055" integrity sha512-FA6W9lDNeX8WbMY31io1xWg+TpZCbeDKsBo0ocwACZiWnh9TUAyk9CCuBQuOPmYnwwdEQZmraQ2ZK7yJsxErBg== +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -8993,7 +8453,12 @@ rimraf@^2.2.8, rimraf@^2.6.3: dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: +ripemd160-min@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/ripemd160-min/-/ripemd160-min-0.0.6.tgz#a904b77658114474d02503e819dcc55853b67e62" + integrity sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A== + +ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== @@ -9002,11 +8467,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: inherits "^2.0.1" rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: - version "2.2.6" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" - integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== dependencies: - bn.js "^4.11.1" + bn.js "^5.2.0" run-async@^2.2.0: version "2.4.1" @@ -9030,7 +8495,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -9150,6 +8615,14 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +sentence-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" + integrity sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ= + dependencies: + no-case "^2.2.0" + upper-case-first "^1.1.2" + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -9196,7 +8669,7 @@ setimmediate@1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= -setimmediate@^1.0.5: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -9222,6 +8695,13 @@ sha1@^1.1.1: charenc ">= 0.0.1" crypt ">= 0.0.1" +sha3@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/sha3/-/sha3-2.1.4.tgz#000fac0fe7c2feac1f48a25e7a31b52a6492cc8f" + integrity sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg== + dependencies: + buffer "6.0.3" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -9244,9 +8724,9 @@ side-channel@^1.0.4: object-inspect "^1.9.0" signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" + integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== simple-concat@^1.0.0: version "1.0.1" @@ -9286,6 +8766,13 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +snake-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" + integrity sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8= + dependencies: + no-case "^2.2.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -9316,16 +8803,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sol-digger@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/sol-digger/-/sol-digger-0.0.2.tgz#406c4a9d31e269e7f88eb1c2ea101318e5e09025" - integrity sha1-QGxKnTHiaef4jrHC6hATGOXgkCU= - -sol-explore@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/sol-explore/-/sol-explore-1.6.1.tgz#b59f073c69fe332560d5a10c32ba8ca7f2986cfb" - integrity sha1-tZ8HPGn+MyVg1aEMMrqMp/KYbPs= - solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -9400,38 +8877,10 @@ solhint@^2.0.0: optionalDependencies: prettier "^1.14.3" -solium-plugin-security@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/solium-plugin-security/-/solium-plugin-security-0.1.1.tgz#2a87bcf8f8c3abf7d198e292e4ac080284e3f3f6" - integrity sha512-kpLirBwIq4mhxk0Y/nn5cQ6qdJTI+U1LO3gpoNIcqNaW+sI058moXBe2UiHs+9wvF9IzYD49jcKhFTxcR9u9SQ== - -solium@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/solium/-/solium-1.2.5.tgz#d036c30e2901e22137bbf342f106b17529ff22a8" - integrity sha512-NuNrm7fp8JcDN/P+SAdM5TVa4wYDtwVtLY/rG4eBOZrC5qItsUhmQKR/YhjszaEW4c8tNUYhkhQcwOsS25znpw== - dependencies: - ajv "^5.2.2" - chokidar "^1.6.0" - colors "^1.1.2" - commander "^2.9.0" - diff "^3.5.0" - eol "^0.9.1" - js-string-escape "^1.0.1" - lodash "^4.14.2" - sol-digger "0.0.2" - sol-explore "1.6.1" - solium-plugin-security "0.1.1" - solparse "2.2.8" - text-table "^0.2.0" - -solparse@2.2.8: - version "2.2.8" - resolved "https://registry.yarnpkg.com/solparse/-/solparse-2.2.8.tgz#d13e42dbed95ce32f43894f5ec53f00d14cf9f11" - integrity sha512-Tm6hdfG72DOxD40SD+T5ddbekWglNWjzDRSNq7ZDIOHVsyaJSeeunUuWNj4DE7uDrJK3tGQuX0ZTDZWNYsGPMA== - dependencies: - mocha "^4.0.1" - pegjs "^0.10.0" - yargs "^10.0.3" +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== source-map-resolve@^0.5.0: version "0.5.3" @@ -9460,9 +8909,9 @@ source-map-support@^0.4.15: source-map "^0.5.6" source-map-support@^0.5.13, source-map-support@^0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + version "0.5.20" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9" + integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -9477,12 +8926,12 @@ source-map@0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= -source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0: +source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -9509,9 +8958,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + version "3.0.10" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz#0d9becccde7003d6c658d487dd48a32f0bf3014b" + integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -9599,6 +9048,25 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + stream-to-pull-stream@^1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece" @@ -9638,14 +9106,14 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string.prototype.trim@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz#6014689baf5efaf106ad031a5fa45157666ed1bd" - integrity sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q== +string.prototype.trim@~1.2.4: + version "1.2.5" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz#a587bcc8bfad8cb9829a577f5de30dd170c1682c" + integrity sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + es-abstract "^1.19.1" string.prototype.trimend@^1.0.4: version "1.0.4" @@ -9663,7 +9131,7 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -9710,6 +9178,11 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -9737,13 +9210,6 @@ super-split@^1.1.0: resolved "https://registry.yarnpkg.com/super-split/-/super-split-1.1.0.tgz#43b3ba719155f4d43891a32729d59b213d9155fc" integrity sha512-I4bA5mgcb6Fw5UJ+EkpzqXfiuvVGS/7MuND+oBxNFmxu3ugLNrdIatzBLfhFRMVMLxgSsRy+TjIktgkF9RFSNQ== -supports-color@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" - integrity sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ== - dependencies: - has-flag "^2.0.0" - supports-color@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" @@ -9756,6 +9222,13 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -9770,6 +9243,14 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +swap-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" + integrity sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM= + dependencies: + lower-case "^1.1.1" + upper-case "^1.1.1" + swarm-js@^0.1.40: version "0.1.40" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" @@ -9813,39 +9294,44 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +tapable@^0.2.7: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" + integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== + tape@^4.6.3: - version "4.13.3" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.3.tgz#51b3d91c83668c7a45b1a594b607dee0a0b46278" - integrity sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw== + version "4.14.0" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.14.0.tgz#e4d46097e129817175b90925f2385f6b1bcfa826" + integrity sha512-z0+WrUUJuG6wIdWrl4W3rTte2CR26G6qcPOj3w1hfRdcmhF3kHBhOBW9VHsPVAkz08ZmGzp7phVpDupbLzrYKQ== dependencies: + call-bind "~1.0.2" 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" + glob "~7.1.7" has "~1.0.3" inherits "~2.0.4" - is-regex "~1.0.5" + is-regex "~1.1.3" minimist "~1.2.5" - object-inspect "~1.7.0" - resolve "~1.17.0" + object-inspect "~1.11.0" + resolve "~1.20.0" resumer "~0.0.0" - string.prototype.trim "~1.2.1" + string.prototype.trim "~1.2.4" through "~2.3.8" tar@^4.0.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" test-value@^2.1.0: version "2.1.0" @@ -9900,6 +9386,21 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +title-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" + integrity sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o= + dependencies: + no-case "^2.2.0" + upper-case "^1.0.3" + tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9914,6 +9415,11 @@ tmp@0.1.0: dependencies: rimraf "^2.6.3" +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -9969,6 +9475,11 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -10010,15 +9521,20 @@ tslib@^1.9.0, tslib@^1.9.3: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -10076,7 +9592,7 @@ type@^1.0.1: resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== -type@^2.0.0: +type@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== @@ -10135,12 +9651,36 @@ typical@^2.6.0, typical@^2.6.1: resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= +uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk= + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== -unbox-primitive@^1.0.0: +unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== @@ -10203,6 +9743,23 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +upper-case-first@^1.1.0, upper-case-first@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" + integrity sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU= + dependencies: + upper-case "^1.1.1" + +upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -10253,9 +9810,9 @@ use@^3.1.0: integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== utf-8-validate@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.5.tgz#dd32c2e82c72002dc9f02eb67ba6761f43456ca1" - integrity sha512-+pnxRYsS/axEpkrrEpzYfNZGXp0IjC/9RIxwM5gntY4Koi8SHmUGSfxfWqxZdRxrtaoVstuOzUp/rbs3JSPELQ== + version "5.0.6" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.6.tgz#e1b3e0a5cc8648a3b44c1799fbb170d1aaaffe80" + integrity sha512-hoY0gOf9EkCw+nimK21FVKHUIG1BMqSiRwxB/q3A9yKZOrOI99PP77BxmarDqWz6rG3vVYiBWfhG8z2Tl+7fZA== dependencies: node-gyp-build "^4.2.0" @@ -10280,10 +9837,24 @@ util.promisify@^1.0.0, util.promisify@^1.0.1: has-symbols "^1.0.1" object.getownpropertydescriptors "^2.1.1" +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + util@^0.12.0: - version "0.12.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" - integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== dependencies: inherits "^2.0.3" is-arguments "^1.0.4" @@ -10339,6 +9910,29 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.4.0: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + web3-bzz@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.11.tgz#41bc19a77444bd5365744596d778b811880f707f" @@ -10349,16 +9943,6 @@ web3-bzz@1.2.11: swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.5.tgz#f181a1319d9f867f4183b147e7aebd21aecff4a0" - integrity sha512-XiEUAbB1uKm/agqfwBsCW8fbw+sma85TfwuDpdcy591vinVk0S9TfWgLxro6v1KJ6nSELySIbKGbAJbh2GSyxw== - dependencies: - "@types/node" "^12.12.6" - got "9.6.0" - swarm-js "^0.1.40" - underscore "1.9.1" - web3-bzz@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.6.tgz#95f370aecc3ff6ad07f057e6c0c916ef09b04dde" @@ -10369,6 +9953,24 @@ web3-bzz@1.3.6: swarm-js "^0.1.40" underscore "1.12.1" +web3-bzz@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.5.3.tgz#e36456905ce051138f9c3ce3623cbc73da088c2b" + integrity sha512-SlIkAqG0eS6cBS9Q2eBOTI1XFzqh83RqGJWnyrNZMDxUwsTVHL+zNnaPShVPvrWQA1Ub5b0bx1Kc5+qJVxsTJg== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + +web3-bzz@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.6.0.tgz#584b51339f21eedff159abc9239b4b7ef6ded840" + integrity sha512-ugYV6BsinwhIi0CsLWINBz4mqN9wR9vNG0WmyEbdECjxcPyr6vkaWt4qi0zqlUxEnYAwGj4EJXNrbjPILntQTQ== + dependencies: + "@types/node" "^12.12.6" + got "9.6.0" + swarm-js "^0.1.40" + web3-core-helpers@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz#84c681ed0b942c0203f3b324a245a127e8c67a99" @@ -10378,15 +9980,6 @@ web3-core-helpers@1.2.11: web3-eth-iban "1.2.11" web3-utils "1.2.11" -web3-core-helpers@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.5.tgz#9f0ff7ed40befb9f691986e66fd94c828c7b1b13" - integrity sha512-HYh3ix5FjysgT0jyzD8s/X5ym0b4BGU7I2QtuBiydMnE0mQEWy7GcT9XKpTySA8FTOHHIAQYvQS07DN/ky3UzA== - dependencies: - underscore "1.9.1" - web3-eth-iban "1.3.5" - web3-utils "1.3.5" - web3-core-helpers@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz#c478246a9abe4e5456acf42657dac2f7c330be74" @@ -10396,6 +9989,22 @@ web3-core-helpers@1.3.6: web3-eth-iban "1.3.6" web3-utils "1.3.6" +web3-core-helpers@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.5.3.tgz#099030235c477aadf39a94199ef40092151d563c" + integrity sha512-Ip1IjB3S8vN7Kf1PPjK41U5gskmMk6IJQlxIVuS8/1U7n/o0jC8krqtpRwiMfAgYyw3TXwBFtxSRTvJtnLyXZw== + dependencies: + web3-eth-iban "1.5.3" + web3-utils "1.5.3" + +web3-core-helpers@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz#77e161b6ba930a4008a0df804ab379e0aa7e1e7f" + integrity sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg== + dependencies: + web3-eth-iban "1.6.0" + web3-utils "1.6.0" + web3-core-method@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.11.tgz#f880137d1507a0124912bf052534f168b8d8fbb6" @@ -10408,18 +10017,6 @@ web3-core-method@1.2.11: web3-core-subscriptions "1.2.11" web3-utils "1.2.11" -web3-core-method@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.5.tgz#995fe12f3b364469e5208a88d72736327b231faa" - integrity sha512-hCbmgQ+At6OTuaNGAdjXMsCr4eUCmp9yGKSuaB5HdkNVDpqFso4HHjVxcjNrTyJp3OZnyjKBzQzK1ZWLpLl84Q== - dependencies: - "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.3.5" - web3-core-promievent "1.3.5" - web3-core-subscriptions "1.3.5" - web3-utils "1.3.5" - web3-core-method@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.6.tgz#4b0334edd94b03dfec729d113c69a4eb6ebc68ae" @@ -10432,6 +10029,30 @@ web3-core-method@1.3.6: web3-core-subscriptions "1.3.6" web3-utils "1.3.6" +web3-core-method@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.5.3.tgz#6cff97ed19fe4ea2e9183d6f703823a079f5132c" + integrity sha512-8wJrwQ2qD9ibWieF9oHXwrJsUGrv3XAtEkNeyvyNMpktNTIjxJ2jaFGQUuLiyUrMubD18XXgLk4JS6PJU4Loeg== + dependencies: + "@ethereumjs/common" "^2.4.0" + "@ethersproject/transactions" "^5.0.0-beta.135" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-core-subscriptions "1.5.3" + web3-utils "1.5.3" + +web3-core-method@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.6.0.tgz#ebe4ea51f5a4fa809bb68185576186359d3982e9" + integrity sha512-cHekyEil4mtcCOk6Q1Zh4y+2o5pTwsLIxP6Bpt4BRtZgdsyPiadYJpkLAVT/quch5xN7Qs5ZwG5AvRCS3VwD2g== + dependencies: + "@ethereumjs/common" "^2.4.0" + "@ethersproject/transactions" "^5.0.0-beta.135" + web3-core-helpers "1.6.0" + web3-core-promievent "1.6.0" + web3-core-subscriptions "1.6.0" + web3-utils "1.6.0" + web3-core-promievent@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz#51fe97ca0ddec2f99bf8c3306a7a8e4b094ea3cf" @@ -10439,13 +10060,6 @@ web3-core-promievent@1.2.11: dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.5.tgz#33c34811cc4e2987c56e5192f9a014368c42ca39" - integrity sha512-K0j8x3ZJr0eAyNvyUCxOUsSTd4hco0/9nxxlyOuijcsa6YV8l9NL6eqhniWbSyxCJT8ka5Mb7yAiUZe69EDLBQ== - dependencies: - eventemitter3 "4.0.4" - web3-core-promievent@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz#6c27dc79de8f71b74f5d17acaf9aaf593d3cb0c9" @@ -10453,6 +10067,20 @@ web3-core-promievent@1.3.6: dependencies: eventemitter3 "4.0.4" +web3-core-promievent@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.5.3.tgz#3f11833c3dc6495577c274350b61144e0a4dba01" + integrity sha512-CFfgqvk3Vk6PIAxtLLuX+pOMozxkKCY+/GdGr7weMh033mDXEPvwyVjoSRO1PqIKj668/hMGQsVoIgbyxkJ9Mg== + dependencies: + eventemitter3 "4.0.4" + +web3-core-promievent@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz#8b6053ae83cb47164540167fc361469fc604d2dd" + integrity sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ== + dependencies: + eventemitter3 "4.0.4" + web3-core-requestmanager@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz#fe6eb603fbaee18530293a91f8cf26d8ae28c45a" @@ -10464,18 +10092,6 @@ web3-core-requestmanager@1.2.11: web3-providers-ipc "1.2.11" web3-providers-ws "1.2.11" -web3-core-requestmanager@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.5.tgz#c452ea85fcffdf5b82b84c250707b638790d0e75" - integrity sha512-9l294U3Ga8qmvv8E37BqjQREfMs+kFnkU3PY28g9DZGYzKvl3V1dgDYqxyrOBdCFhc7rNSpHdgC4PrVHjouspg== - dependencies: - underscore "1.9.1" - util "^0.12.0" - web3-core-helpers "1.3.5" - web3-providers-http "1.3.5" - web3-providers-ipc "1.3.5" - web3-providers-ws "1.3.5" - web3-core-requestmanager@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.6.tgz#4fea269fe913fd4fca464b4f7c65cb94857b5b2a" @@ -10488,6 +10104,28 @@ web3-core-requestmanager@1.3.6: web3-providers-ipc "1.3.6" web3-providers-ws "1.3.6" +web3-core-requestmanager@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.5.3.tgz#b339525815fd40e3a2a81813c864ddc413f7b6f7" + integrity sha512-9k/Bze2rs8ONix5IZR+hYdMNQv+ark2Ek2kVcrFgWO+LdLgZui/rn8FikPunjE+ub7x7pJaKCgVRbYFXjo3ZWg== + dependencies: + util "^0.12.0" + web3-core-helpers "1.5.3" + web3-providers-http "1.5.3" + web3-providers-ipc "1.5.3" + web3-providers-ws "1.5.3" + +web3-core-requestmanager@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.6.0.tgz#8ef3a3b89cd08983bd94574f9c5893f70a8a6aea" + integrity sha512-CY5paPdiDXKTXPWaEUZekDfUXSuoE2vPxolwqzsvKwFWH5+H1NaXgrc+D5HpufgSvTXawTw0fy7IAicg8+PWqA== + dependencies: + util "^0.12.0" + web3-core-helpers "1.6.0" + web3-providers-http "1.6.0" + web3-providers-ipc "1.6.0" + web3-providers-ws "1.6.0" + web3-core-subscriptions@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz#beca908fbfcb050c16f45f3f0f4c205e8505accd" @@ -10497,15 +10135,6 @@ web3-core-subscriptions@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-core-subscriptions@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.5.tgz#7c4dc9d559e344d852de2cf01bd0cc13c94023cb" - integrity sha512-6mtXdaEB1V1zKLqYBq7RF2W75AK5ZJNGpW6QYC7Zvbku7zq1ZlgaUkJo88JKMWJ7etfaHaYqQ/7VveHk5sQynA== - dependencies: - eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.5" - web3-core-subscriptions@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.6.tgz#ee24e7974d1d72ff6c992c599deba4ef9b308415" @@ -10515,6 +10144,22 @@ web3-core-subscriptions@1.3.6: underscore "1.12.1" web3-core-helpers "1.3.6" +web3-core-subscriptions@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.5.3.tgz#d7d69c4caad65074212028656e9dc56ca5c2159d" + integrity sha512-L2m9vG1iRN6thvmv/HQwO2YLhOQlmZU8dpLG6GSo9FBN14Uch868Swk0dYVr3rFSYjZ/GETevSXU+O+vhCummA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.5.3" + +web3-core-subscriptions@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.6.0.tgz#8c23b15b434a7c9f937652ecca45d7108e2c54df" + integrity sha512-kY9WZUY/m1URSOv3uTLshoZD9ZDiFKReIzHuPUkxFpD5oYNmr1/aPQNPCrrMxKODR7UVX/D90FxWwCYqHhLaxQ== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.6.0" + web3-core@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.11.tgz#1043cacc1becb80638453cc5b2a14be9050288a7" @@ -10528,19 +10173,6 @@ web3-core@1.2.11: web3-core-requestmanager "1.2.11" web3-utils "1.2.11" -web3-core@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.5.tgz#1e9335e6c4549dac09aaa07157242ebd6d097226" - integrity sha512-VQjTvnGTqJwDwjKEHSApea3RmgtFGLDSJ6bqrOyHROYNyTyKYjFQ/drG9zs3rjDkND9mgh8foI1ty37Qua3QCQ== - dependencies: - "@types/bn.js" "^4.11.5" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-requestmanager "1.3.5" - web3-utils "1.3.5" - web3-core@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.6.tgz#a6a761d1ff2f3ee462b8dab679229d2f8e267504" @@ -10554,6 +10186,32 @@ web3-core@1.3.6: web3-core-requestmanager "1.3.6" web3-utils "1.3.6" +web3-core@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.5.3.tgz#59f8728b27c8305b349051326aa262b9b7e907bf" + integrity sha512-ACTbu8COCu+0eUNmd9pG7Q9EVsNkAg2w3Y7SqhDr+zjTgbSHZV01jXKlapm9z+G3AN/BziV3zGwudClJ4u4xXQ== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-requestmanager "1.5.3" + web3-utils "1.5.3" + +web3-core@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.6.0.tgz#144eb00f651c9812faf7176abd7ee99d5f45e212" + integrity sha512-o0WsLrJ2yD+HAAc29lGMWJef/MutTyuzpJC0UzLJtIAQJqtpDalzWINEu4j8XYXGk34N/V6vudtzRPo23QEE6g== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.6.0" + web3-core-method "1.6.0" + web3-core-requestmanager "1.6.0" + web3-utils "1.6.0" + web3-eth-abi@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz#a887494e5d447c2926d557a3834edd66e17af9b0" @@ -10563,15 +10221,6 @@ web3-eth-abi@1.2.11: underscore "1.9.1" web3-utils "1.2.11" -web3-eth-abi@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.5.tgz#eeffab0a4b318c47b8777de90983ca45614f8173" - integrity sha512-bkbG2v/mOW5DH6rF/SEgqunusjYoEi2IBw+fkmD3rzWDaEY7+/i1xY94AeO257d06QMgld75GtV/N+aEs7A6vQ== - dependencies: - "@ethersproject/abi" "5.0.7" - underscore "1.9.1" - web3-utils "1.3.5" - web3-eth-abi@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz#4272ca48d817aa651bbf97b269f5ff10abc2b8a9" @@ -10581,6 +10230,22 @@ web3-eth-abi@1.3.6: underscore "1.12.1" web3-utils "1.3.6" +web3-eth-abi@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.5.3.tgz#5aea9394d797f99ca0d9bd40c3417eb07241c96c" + integrity sha512-i/qhuFsoNrnV130CSRYX/z4SlCfSQ4mHntti5yTmmQpt70xZKYZ57BsU0R29ueSQ9/P+aQrL2t2rqkQkAloUxg== + dependencies: + "@ethersproject/abi" "5.0.7" + web3-utils "1.5.3" + +web3-eth-abi@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz#4225608f61ebb0607d80849bb2b20f910780253d" + integrity sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA== + dependencies: + "@ethersproject/abi" "5.0.7" + web3-utils "1.6.0" + web3-eth-accounts@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz#a9e3044da442d31903a7ce035a86d8fa33f90520" @@ -10598,23 +10263,6 @@ web3-eth-accounts@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-eth-accounts@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.5.tgz#c23ee748759a6a06d6485a9322b106baa944dcdd" - integrity sha512-r3WOR21rgm6Cd6OFnifr3Tizdm5K+g2TsSOPySwX4FrgLrYDL6ck4zr5VXUPz+llpSExb/JztpE8pqEHr3U2NA== - dependencies: - crypto-browserify "3.12.0" - eth-lib "0.2.8" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" - scrypt-js "^3.0.1" - underscore "1.9.1" - uuid "3.3.2" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-utils "1.3.5" - web3-eth-accounts@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.6.tgz#f9fcb50b28ee58090ab292a10d996155caa2b474" @@ -10632,6 +10280,40 @@ web3-eth-accounts@1.3.6: web3-core-method "1.3.6" web3-utils "1.3.6" +web3-eth-accounts@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.5.3.tgz#076c816ff4d68c9dffebdc7fd2bfaddcfc163d77" + integrity sha512-pdGhXgeBaEJENMvRT6W9cmji3Zz/46ugFSvmnLLw79qi5EH7XJhKISNVb41eWCrs4am5GhI67GLx5d2s2a72iw== + dependencies: + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.1" + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-util "^7.0.10" + scrypt-js "^3.0.1" + uuid "3.3.2" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" + +web3-eth-accounts@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.6.0.tgz#530927f4c5b78df93b3ea1203abbb467de29cd04" + integrity sha512-2f6HS4KIH4laAsNCOfbNX3dRiQosqSY2TRK86C8jtAA/QKGdx+5qlPfYzbI2RjG81iayb2+mVbHIaEaBGZ8sGw== + dependencies: + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.1" + crypto-browserify "3.12.0" + eth-lib "0.2.8" + ethereumjs-util "^7.0.10" + scrypt-js "^3.0.1" + uuid "3.3.2" + web3-core "1.6.0" + web3-core-helpers "1.6.0" + web3-core-method "1.6.0" + web3-utils "1.6.0" + web3-eth-contract@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz#917065902bc27ce89da9a1da26e62ef663663b90" @@ -10647,21 +10329,6 @@ web3-eth-contract@1.2.11: web3-eth-abi "1.2.11" web3-utils "1.2.11" -web3-eth-contract@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.5.tgz#b41ecf8612b379c4fb1c614e950135717aa8f919" - integrity sha512-WfGVeQquN3D7Qm+KEIN9EI7yrm/fL2V9Y4+YhDWiKA/ns1pX1LYcEWojTOnBXCnPF3tcvoKKL+KBxXg1iKm38A== - dependencies: - "@types/bn.js" "^4.11.5" - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-promievent "1.3.5" - web3-core-subscriptions "1.3.5" - web3-eth-abi "1.3.5" - web3-utils "1.3.5" - web3-eth-contract@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.6.tgz#cccf4d32dc56917fb6923e778498a9ba2a5ba866" @@ -10677,6 +10344,34 @@ web3-eth-contract@1.3.6: web3-eth-abi "1.3.6" web3-utils "1.3.6" +web3-eth-contract@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.5.3.tgz#12b03a4a16ce583a945f874bea2ff2fb4c5b81ad" + integrity sha512-Gdlt1L6cdHe83k7SdV6xhqCytVtOZkjD0kY/15x441AuuJ4JLubCHuqu69k2Dr3tWifHYVys/vG8QE/W16syGg== + dependencies: + "@types/bn.js" "^4.11.5" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-promievent "1.5.3" + web3-core-subscriptions "1.5.3" + web3-eth-abi "1.5.3" + web3-utils "1.5.3" + +web3-eth-contract@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.6.0.tgz#deb946867ad86d32bcbba899d733b681b25ea674" + integrity sha512-ZUtO77zFnxuFtrc+D+iJ3AzNgFXAVcKnhEYN7f1PNz/mFjbtE6dJ+ujO0mvMbxIZF02t9IZv0CIXRpK0rDvZAw== + dependencies: + "@types/bn.js" "^4.11.5" + web3-core "1.6.0" + web3-core-helpers "1.6.0" + web3-core-method "1.6.0" + web3-core-promievent "1.6.0" + web3-core-subscriptions "1.6.0" + web3-eth-abi "1.6.0" + web3-utils "1.6.0" + web3-eth-ens@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz#26d4d7f16d6cbcfff918e39832b939edc3162532" @@ -10692,21 +10387,6 @@ web3-eth-ens@1.2.11: web3-eth-contract "1.2.11" web3-utils "1.2.11" -web3-eth-ens@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.5.tgz#5a28d23eb402fb1f6964da60ea60641e4d24d366" - integrity sha512-5bkpFTXV18CvaVP8kCbLZZm2r1TWUv9AsXH+80yz8bTZulUGvXsBMRfK6e5nfEr2Yv59xlIXCFoalmmySI9EJw== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-promievent "1.3.5" - web3-eth-abi "1.3.5" - web3-eth-contract "1.3.5" - web3-utils "1.3.5" - web3-eth-ens@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.6.tgz#0d28c5d4ea7b4462ef6c077545a77956a6cdf175" @@ -10722,6 +10402,34 @@ web3-eth-ens@1.3.6: web3-eth-contract "1.3.6" web3-utils "1.3.6" +web3-eth-ens@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.5.3.tgz#ef6eee1ddf32b1ff9536fc7c599a74f2656bafe1" + integrity sha512-QmGFFtTGElg0E+3xfCIFhiUF+1imFi9eg/cdsRMUZU4F1+MZCC/ee+IAelYLfNTGsEslCqfAusliKOT9DdGGnw== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-eth-abi "1.5.3" + web3-eth-contract "1.5.3" + web3-utils "1.5.3" + +web3-eth-ens@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.6.0.tgz#af13852168d56fa71b9198eb097e96fb93831c2a" + integrity sha512-AG24PNv9qbYHSpjHcU2pViOII0jvIR7TeojJ2bxXSDqfcgHuRp3NZGKv6xFvT4uNI4LEQHUhSC7bzHoNF5t8CA== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.6.0" + web3-core-helpers "1.6.0" + web3-core-promievent "1.6.0" + web3-eth-abi "1.6.0" + web3-eth-contract "1.6.0" + web3-utils "1.6.0" + web3-eth-iban@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz#f5f73298305bc7392e2f188bf38a7362b42144ef" @@ -10730,14 +10438,6 @@ web3-eth-iban@1.2.11: bn.js "^4.11.9" web3-utils "1.2.11" -web3-eth-iban@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.5.tgz#dff1e37864e23a3387016ec4db96cdc290a6fbd6" - integrity sha512-x+BI/d2Vt0J1cKK8eFd4W0f1TDjgEOYCwiViTb28lLE+tqrgyPqWDA+l6UlKYLF/yMFX3Dym4ofcCOtgcn4q4g== - dependencies: - bn.js "^4.11.9" - web3-utils "1.3.5" - web3-eth-iban@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz#0d6ba21fe78f190af8919e9cd5453882457209e0" @@ -10746,6 +10446,22 @@ web3-eth-iban@1.3.6: bn.js "^4.11.9" web3-utils "1.3.6" +web3-eth-iban@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.5.3.tgz#91b1475893a877b10eac1de5cce6eb379fb81b5d" + integrity sha512-vMzmGqolYZvRHwP9P4Nf6G8uYM5aTLlQu2a34vz78p0KlDC+eV1th3+90Qeaupa28EG7OO0IT1F0BejiIauOPw== + dependencies: + bn.js "^4.11.9" + web3-utils "1.5.3" + +web3-eth-iban@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz#edbe46cedc5b148d53fa455edea6b4eef53b2be7" + integrity sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw== + dependencies: + bn.js "^4.11.9" + web3-utils "1.6.0" + web3-eth-personal@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz#a38b3942a1d87a62070ce0622a941553c3d5aa70" @@ -10758,18 +10474,6 @@ web3-eth-personal@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth-personal@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.5.tgz#bc5d5b900bc4824139af2ef01eaf8e9855c644ba" - integrity sha512-xELQHNZ8p3VoO1582ghCaq+Bx7pSkOOalc6/ACOCGtHDMelqgVejrmSIZGScYl+k0HzngmQAzURZWQocaoGM1g== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-net "1.3.5" - web3-utils "1.3.5" - web3-eth-personal@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.6.tgz#226137916754c498f0284f22c55924c87a2efcf0" @@ -10782,6 +10486,30 @@ web3-eth-personal@1.3.6: web3-net "1.3.6" web3-utils "1.3.6" +web3-eth-personal@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.5.3.tgz#4ebe09e9a77dd49d23d93b36b36cfbf4a6dae713" + integrity sha512-JzibJafR7ak/Icas8uvos3BmUNrZw1vShuNR5Cxjo+vteOC8XMqz1Vr7RH65B4bmlfb3bm9xLxetUHO894+Sew== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-net "1.5.3" + web3-utils "1.5.3" + +web3-eth-personal@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.6.0.tgz#b75a61c0737b8b8bcc11d05db2ed7bfce7e4b262" + integrity sha512-8ohf4qAwbShf4RwES2tLHVqa+pHZnS5Q6tV80sU//bivmlZeyO1W4UWyNn59vu9KPpEYvLseOOC6Muxuvr8mFQ== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.6.0" + web3-core-helpers "1.6.0" + web3-core-method "1.6.0" + web3-net "1.6.0" + web3-utils "1.6.0" + web3-eth@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.11.tgz#4c81fcb6285b8caf544058fba3ae802968fdc793" @@ -10801,25 +10529,6 @@ web3-eth@1.2.11: web3-net "1.2.11" web3-utils "1.2.11" -web3-eth@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.5.tgz#2a3d0db870ef7921942a5d798ba0569175cc4de1" - integrity sha512-5qqDPMMD+D0xRqOV2ePU2G7/uQmhn0FgCEhFzKDMHrssDQJyQLW/VgfA0NLn64lWnuUrGnQStGvNxrWf7MgsfA== - dependencies: - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-subscriptions "1.3.5" - web3-eth-abi "1.3.5" - web3-eth-accounts "1.3.5" - web3-eth-contract "1.3.5" - web3-eth-ens "1.3.5" - web3-eth-iban "1.3.5" - web3-eth-personal "1.3.5" - web3-net "1.3.5" - web3-utils "1.3.5" - web3-eth@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.6.tgz#2c650893d540a7a0eb1365dd5b2dca24ac919b7c" @@ -10839,6 +10548,42 @@ web3-eth@1.3.6: web3-net "1.3.6" web3-utils "1.3.6" +web3-eth@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.5.3.tgz#d7d1ac7198f816ab8a2088c01e0bf1eda45862fe" + integrity sha512-saFurA1L23Bd7MEf7cBli6/jRdMhD4X/NaMiO2mdMMCXlPujoudlIJf+VWpRWJpsbDFdu7XJ2WHkmBYT5R3p1Q== + dependencies: + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-eth-abi "1.5.3" + web3-eth-accounts "1.5.3" + web3-eth-contract "1.5.3" + web3-eth-ens "1.5.3" + web3-eth-iban "1.5.3" + web3-eth-personal "1.5.3" + web3-net "1.5.3" + web3-utils "1.5.3" + +web3-eth@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.6.0.tgz#4c9d5fb4eccf9f8744828281757e6ea76af58cbd" + integrity sha512-qJMvai//r0be6I9ghU24/152f0zgJfYC23TMszN3Y6jse1JtjCBP2TlTibFcvkUN1RRdIUY5giqO7ZqAYAmp7w== + dependencies: + web3-core "1.6.0" + web3-core-helpers "1.6.0" + web3-core-method "1.6.0" + web3-core-subscriptions "1.6.0" + web3-eth-abi "1.6.0" + web3-eth-accounts "1.6.0" + web3-eth-contract "1.6.0" + web3-eth-ens "1.6.0" + web3-eth-iban "1.6.0" + web3-eth-personal "1.6.0" + web3-net "1.6.0" + web3-utils "1.6.0" + web3-net@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.11.tgz#eda68ef25e5cdb64c96c39085cdb74669aabbe1b" @@ -10848,15 +10593,6 @@ web3-net@1.2.11: web3-core-method "1.2.11" web3-utils "1.2.11" -web3-net@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.5.tgz#06e3465a9fbbeec1240160e2fd66ddb07b6af944" - integrity sha512-usbFbuUpKK8s7jPLGoUzi/WpNnefGFPTj948aJv8BZ04UQA4L/XS5NNkkhk358zNMmhGfEFW8wrWy+0Oy0njtA== - dependencies: - web3-core "1.3.5" - web3-core-method "1.3.5" - web3-utils "1.3.5" - web3-net@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.6.tgz#a56492e2227475e38db29394f8bac305a2446e41" @@ -10866,6 +10602,24 @@ web3-net@1.3.6: web3-core-method "1.3.6" web3-utils "1.3.6" +web3-net@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.5.3.tgz#545fee49b8e213b0c55cbe74ffd0295766057463" + integrity sha512-0W/xHIPvgVXPSdLu0iZYnpcrgNnhzHMC888uMlGP5+qMCt8VuflUZHy7tYXae9Mzsg1kxaJAS5lHVNyeNw4CoQ== + dependencies: + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" + +web3-net@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.6.0.tgz#2c28f8787073110a7c2310336889d2dad647e500" + integrity sha512-LFfG95ovTT2sNHkO1TEfsaKpYcxOSUtbuwHQ0K3G0e5nevKDJkPEFIqIcob40yiwcWoqEjENJP9Bjk8CRrZ99Q== + dependencies: + web3-core "1.6.0" + web3-core-method "1.6.0" + web3-utils "1.6.0" + web3-provider-engine@14.2.1: version "14.2.1" resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.2.1.tgz#ef351578797bf170e08d529cb5b02f8751329b95" @@ -10900,14 +10654,6 @@ web3-providers-http@1.2.11: web3-core-helpers "1.2.11" xhr2-cookies "1.1.0" -web3-providers-http@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.5.tgz#cdada6fb342e08fd75aea249fceb6eee467beffc" - integrity sha512-ZQOmceFjcajEZdiuqciXjijwIYWNmEJ1oxMtbrwB2eGxHRCMXEH2xGRUZuhOFNF88yQC/VXVi14yvYg5ZlFJlA== - dependencies: - web3-core-helpers "1.3.5" - xhr2-cookies "1.1.0" - web3-providers-http@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.6.tgz#36e8724a7424d52827819d53fd75dbf31f5422c2" @@ -10916,6 +10662,22 @@ web3-providers-http@1.3.6: web3-core-helpers "1.3.6" xhr2-cookies "1.1.0" +web3-providers-http@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.5.3.tgz#74f170fc3d79eb7941d9fbc34e2a067d61ced0b2" + integrity sha512-5DpUyWGHtDAr2RYmBu34Fu+4gJuBAuNx2POeiJIooUtJ+Mu6pIx4XkONWH6V+Ez87tZAVAsFOkJRTYuzMr3rPw== + dependencies: + web3-core-helpers "1.5.3" + xhr2-cookies "1.1.0" + +web3-providers-http@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.6.0.tgz#8db4e589abf7197f5d65b12af1bf9726c45f4160" + integrity sha512-sNxHFNv3lnxpmULt34AS6M36IYB/Hzm2Et4yPNzdP1XE644D8sQBZQZaJQdTaza5HfrlwoqU6AOK935armqGuA== + dependencies: + web3-core-helpers "1.6.0" + xhr2-cookies "1.1.0" + web3-providers-ipc@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz#d16d6c9be1be6e0b4f4536c4acc16b0f4f27ef21" @@ -10925,15 +10687,6 @@ web3-providers-ipc@1.2.11: underscore "1.9.1" web3-core-helpers "1.2.11" -web3-providers-ipc@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.5.tgz#2f5536abfe03f3824e00dedc614d8f46db72b57f" - integrity sha512-cbZOeb/sALiHjzMolJjIyHla/J5wdL2JKUtRO66Nh/uLALBCpU8JUgzNvpAdJ1ae3+A33+EdFStdzuDYHKtQew== - dependencies: - oboe "2.1.5" - underscore "1.9.1" - web3-core-helpers "1.3.5" - web3-providers-ipc@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.6.tgz#cef8d12c1ebb47adce5ebf597f553c623362cb4a" @@ -10943,6 +10696,22 @@ web3-providers-ipc@1.3.6: underscore "1.12.1" web3-core-helpers "1.3.6" +web3-providers-ipc@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.5.3.tgz#4bd7f5e445c2f3c2595fce0929c72bb879320a3f" + integrity sha512-JmeAptugVpmXI39LGxUSAymx0NOFdgpuI1hGQfIhbEAcd4sv7fhfd5D+ZU4oLHbRI8IFr4qfGU0uhR8BXhDzlg== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.5.3" + +web3-providers-ipc@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.6.0.tgz#6a3410fd47a67c4a36719fb97f99534ae12aac98" + integrity sha512-ETYdfhpGiGoWpmmSJnONvnPfd3TPivHEGjXyuX+L5FUsbMOVZj9MFLNIS19Cx/YGL8UWJ/8alLJoTcWSIdz/aA== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.6.0" + web3-providers-ws@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz#a1dfd6d9778d840561d9ec13dd453046451a96bb" @@ -10953,16 +10722,6 @@ web3-providers-ws@1.2.11: web3-core-helpers "1.2.11" websocket "^1.0.31" -web3-providers-ws@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.5.tgz#7f841ec79358d90c4a803d1291157b5ffb15aeb7" - integrity sha512-zeZ4LMvKhYaJBDCqA//Bzgp4r/T0tNq5U/xvN0axA4YflzF7yqlsbzGwCkcZYDbrUaK3Ltl2uOmvwjbWALOZ1A== - dependencies: - eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.5" - websocket "^1.0.32" - web3-providers-ws@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.6.tgz#e1df617bc89d66165abdf2191da0014c505bfaac" @@ -10973,6 +10732,24 @@ web3-providers-ws@1.3.6: web3-core-helpers "1.3.6" websocket "^1.0.32" +web3-providers-ws@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.5.3.tgz#eec6cfb32bb928a4106de506f13a49070a21eabf" + integrity sha512-6DhTw4Q7nm5CFYEUHOJM0gAb3xFx+9gWpVveg3YxJ/ybR1BUvEWo3bLgIJJtX56cYX0WyY6DS35a7f0LOI1kVg== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.5.3" + websocket "^1.0.32" + +web3-providers-ws@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.6.0.tgz#dc15dc18c30089efda992015fd5254bd2b77af5f" + integrity sha512-eNRmlhOPCpuVYwBrKBBQRLGPFb4U1Uo44r9EWV69Cpo4gP6XeBTl6nkawhLz6DS0fq79apyPfItJVuSfAy77pA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.6.0" + websocket "^1.0.32" + web3-shh@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.11.tgz#f5d086f9621c9a47e98d438010385b5f059fd88f" @@ -10983,16 +10760,6 @@ web3-shh@1.2.11: web3-core-subscriptions "1.2.11" web3-net "1.2.11" -web3-shh@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.5.tgz#af0b8ebca90a3652dbbb90d351395f36ca91f40b" - integrity sha512-aRwzCduXvuGVslLL/Y15VcOHa70Qr2kxZI7UwOzQVhaaOdxuRRvo3AK/cmyln1Tsd54/n93Yk8I3qg5I2+6alw== - dependencies: - web3-core "1.3.5" - web3-core-method "1.3.5" - web3-core-subscriptions "1.3.5" - web3-net "1.3.5" - web3-shh@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.6.tgz#4e3486c7eca5cbdb87f88910948223a5b7ea6c20" @@ -11003,6 +10770,26 @@ web3-shh@1.3.6: web3-core-subscriptions "1.3.6" web3-net "1.3.6" +web3-shh@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.5.3.tgz#3c04aa4cda9ba0b746d7225262401160f8e38b13" + integrity sha512-COfEXfsqoV/BkcsNLRxQqnWc1Teb8/9GxdGag5GtPC5gQC/vsN+7hYVJUwNxY9LtJPKYTij2DHHnx6UkITng+Q== + dependencies: + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-net "1.5.3" + +web3-shh@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.6.0.tgz#838a3435dce1039f669a48e53e948062de197931" + integrity sha512-ymN0OFL81WtEeSyb+PFpuUv39fR3frGwsZnIg5EVPZvrOIdaDSFcGSLDmafUt0vKSubvLMVYIBOCskRD6YdtEQ== + dependencies: + web3-core "1.6.0" + web3-core-method "1.6.0" + web3-core-subscriptions "1.6.0" + web3-net "1.6.0" + web3-utils@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.11.tgz#af1942aead3fb166ae851a985bed8ef2c2d95a82" @@ -11031,10 +10818,10 @@ web3-utils@1.2.9: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.3.5, web3-utils@^1.0.0-beta.31: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.5.tgz#14ee2ff1a7a226867698d6eaffd21aa97aed422e" - integrity sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A== +web3-utils@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.6.tgz#390bc9fa3a7179746963cfaca55bb80ac4d8dc10" + integrity sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg== dependencies: bn.js "^4.11.9" eth-lib "0.2.8" @@ -11042,13 +10829,13 @@ web3-utils@1.3.5, web3-utils@^1.0.0-beta.31: ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.9.1" + underscore "1.12.1" utf8 "3.0.0" -web3-utils@1.3.6, web3-utils@^1.2.5: - version "1.3.6" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.6.tgz#390bc9fa3a7179746963cfaca55bb80ac4d8dc10" - integrity sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg== +web3-utils@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.5.3.tgz#e914c9320cd663b2a09a5cb920ede574043eb437" + integrity sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q== dependencies: bn.js "^4.11.9" eth-lib "0.2.8" @@ -11056,7 +10843,19 @@ web3-utils@1.3.6, web3-utils@^1.2.5: ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.12.1" + utf8 "3.0.0" + +web3-utils@1.6.0, web3-utils@^1.0.0-beta.31, web3-utils@^1.2.5: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.6.0.tgz#1975c5ee5b7db8a0836eb7004848a7cd962d1ddc" + integrity sha512-bgCAWAeQnJF035YTFxrcHJ5mGEfTi/McsjqldZiXRwlHK7L1PyOqvXiQLE053dlzvy1kdAxWl/sSSfLMyNUAXg== + dependencies: + bn.js "^4.11.9" + 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" web3@1.2.11: @@ -11072,20 +10871,7 @@ web3@1.2.11: web3-shh "1.2.11" web3-utils "1.2.11" -web3@1.3.5, web3@^1.0.0-beta.34: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.5.tgz#ef4c3a2241fdd74f2f7794e839f30bc6f9814e46" - integrity sha512-UyQW/MT5EIGBrXPCh/FDIaD7RtJTn5/rJUNw2FOglp0qoXnCQHNKvntiR1ylztk05fYxIF6UgsC76IrazlKJjw== - dependencies: - web3-bzz "1.3.5" - web3-core "1.3.5" - web3-eth "1.3.5" - web3-eth-personal "1.3.5" - web3-net "1.3.5" - web3-shh "1.3.5" - web3-utils "1.3.5" - -web3@1.3.6, web3@^1.2.5: +web3@1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.6.tgz#599425461c3f9a8cbbefa70616438995f4a064cc" integrity sha512-jEpPhnL6GDteifdVh7ulzlPrtVQeA30V9vnki9liYlUvLV82ZM7BNOQJiuzlDePuE+jZETZSP/0G/JlUVt6pOA== @@ -11098,6 +10884,73 @@ web3@1.3.6, web3@^1.2.5: web3-shh "1.3.6" web3-utils "1.3.6" +web3@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.5.3.tgz#11882679453c645bf33620fbc255a243343075aa" + integrity sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w== + dependencies: + web3-bzz "1.5.3" + web3-core "1.5.3" + web3-eth "1.5.3" + web3-eth-personal "1.5.3" + web3-net "1.5.3" + web3-shh "1.5.3" + web3-utils "1.5.3" + +web3@^1.0.0-beta.34, web3@^1.2.5: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.6.0.tgz#d8fa0cd9e7bf252f9fe43bb77dc42bc6671affde" + integrity sha512-rWpXnO88MiVX5yTRqMBCVKASxc7QDkXZZUl1D48sKlbX4dt3BAV+nVMVUKCBKiluZ5Bp8pDrVCUdPx/jIYai5Q== + dependencies: + web3-bzz "1.6.0" + web3-core "1.6.0" + web3-eth "1.6.0" + web3-eth-personal "1.6.0" + web3-net "1.6.0" + web3-shh "1.6.0" + web3-utils "1.6.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +webpack-sources@^1.0.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^3.0.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74" + integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ== + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + websocket@1.0.32: version "1.0.32" resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" @@ -11127,6 +10980,14 @@ whatwg-fetch@2.0.4: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -11149,17 +11010,16 @@ which-module@^2.0.0: integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which-typed-array@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" - integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + version "1.1.7" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" + integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== dependencies: - available-typed-arrays "^1.0.2" - call-bind "^1.0.0" - es-abstract "^1.18.0-next.1" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" foreach "^2.0.5" - function-bind "^1.1.1" - has-symbols "^1.0.1" - is-typed-array "^1.1.3" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.7" which@1.3.1, which@^1.2.9: version "1.3.1" @@ -11175,6 +11035,11 @@ wide-align@1.1.3: dependencies: string-width "^1.0.2 || 2" +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" @@ -11185,6 +11050,11 @@ word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -11214,11 +11084,6 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" - integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== - ws@7.4.6: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" @@ -11234,21 +11099,16 @@ ws@^3.0.0: ultron "~1.1.0" ws@^5.1.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + version "5.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== dependencies: async-limiter "~1.0.0" -ws@^7.2.1: - version "7.4.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== - ws@^7.4.6: - version "7.5.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.0.tgz#0033bafea031fb9df041b2026fc72a571ca44691" - integrity sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw== + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== xhr-request-promise@^0.1.2: version "0.1.3" @@ -11324,7 +11184,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -11334,7 +11194,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@13.1.2, yargs-parser@^13.1.2: +yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== @@ -11350,10 +11210,10 @@ yargs-parser@^2.4.1: camelcase "^3.0.0" lodash.assign "^4.0.6" -yargs-parser@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" - integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ== +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= dependencies: camelcase "^4.1.0" @@ -11366,39 +11226,38 @@ yargs-unparser@1.6.0: lodash "^4.17.15" yargs "^13.3.0" -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@13.2.4: + version "13.2.4" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" + integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== dependencies: cliui "^5.0.0" find-up "^3.0.0" get-caller-file "^2.0.1" + os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.2" + yargs-parser "^13.1.0" -yargs@^10.0.3: - version "10.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" - integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig== +yargs@13.3.2, yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^2.0.0" + string-width "^3.0.0" which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^8.1.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" yargs@^4.7.1: version "4.8.1" @@ -11419,3 +11278,32 @@ yargs@^4.7.1: window-size "^0.2.0" y18n "^3.2.1" yargs-parser "^2.4.1" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0"