From e99f90980dd814c3f39a431ae8955fd9d7a8a765 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Thu, 7 Mar 2024 12:22:37 +0200 Subject: [PATCH 01/94] feat!: add LSP11 package --- foundry.toml | 5 + packages/lsp11-contracts/.eslintrc.js | 4 + packages/lsp11-contracts/.gitmodules | 3 + packages/lsp11-contracts/.solhint.json | 25 + packages/lsp11-contracts/README.md | 3 + packages/lsp11-contracts/build.config.ts | 9 + packages/lsp11-contracts/constants.ts | 3 + .../ILSP11UniversalSocialRecovery.sol | 304 +++++ .../contracts/LSP11Constants.sol | 8 + .../lsp11-contracts/contracts/LSP11Errors.sol | 134 ++ .../LSP11UniversalSocialRecovery.sol | 711 ++++++++++ .../foundry/LSP11UniversalRecovery.t.sol | 1159 +++++++++++++++++ packages/lsp11-contracts/hardhat.config.ts | 128 ++ packages/lsp11-contracts/index.ts | 1 + packages/lsp11-contracts/package.json | 51 + packages/lsp11-contracts/tsconfig.json | 4 + 16 files changed, 2552 insertions(+) create mode 100644 packages/lsp11-contracts/.eslintrc.js create mode 100644 packages/lsp11-contracts/.gitmodules create mode 100644 packages/lsp11-contracts/.solhint.json create mode 100755 packages/lsp11-contracts/README.md create mode 100644 packages/lsp11-contracts/build.config.ts create mode 100644 packages/lsp11-contracts/constants.ts create mode 100644 packages/lsp11-contracts/contracts/ILSP11UniversalSocialRecovery.sol create mode 100644 packages/lsp11-contracts/contracts/LSP11Constants.sol create mode 100644 packages/lsp11-contracts/contracts/LSP11Errors.sol create mode 100644 packages/lsp11-contracts/contracts/LSP11UniversalSocialRecovery.sol create mode 100644 packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol create mode 100755 packages/lsp11-contracts/hardhat.config.ts create mode 100644 packages/lsp11-contracts/index.ts create mode 100644 packages/lsp11-contracts/package.json create mode 100755 packages/lsp11-contracts/tsconfig.json diff --git a/foundry.toml b/foundry.toml index f5dac0d24..960257678 100644 --- a/foundry.toml +++ b/foundry.toml @@ -16,6 +16,11 @@ src = 'packages/lsp2-contracts/contracts' test = 'packages/lsp2-contracts/foundry' out = 'packages/lsp2-contracts/contracts/foundry_artifacts' +[profile.lsp11] +src = 'packages/lsp11-contracts/contracts' +test = 'packages/lsp11-contracts/foundry' +out = 'packages/lsp11-contracts/contracts/foundry_artifacts' + [profile.lsp6] src = 'packages/lsp6-contracts/contracts' test = 'packages/lsp6-contracts/foundry' diff --git a/packages/lsp11-contracts/.eslintrc.js b/packages/lsp11-contracts/.eslintrc.js new file mode 100644 index 000000000..03ee7431b --- /dev/null +++ b/packages/lsp11-contracts/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['custom'], +}; diff --git a/packages/lsp11-contracts/.gitmodules b/packages/lsp11-contracts/.gitmodules new file mode 100644 index 000000000..f67502a86 --- /dev/null +++ b/packages/lsp11-contracts/.gitmodules @@ -0,0 +1,3 @@ +[submodule "lib/forge-std"] + path = lib/forge-std + url = https://github.com/foundry-rs/forge-std.git diff --git a/packages/lsp11-contracts/.solhint.json b/packages/lsp11-contracts/.solhint.json new file mode 100644 index 000000000..26e01c48a --- /dev/null +++ b/packages/lsp11-contracts/.solhint.json @@ -0,0 +1,25 @@ +{ + "extends": "solhint:recommended", + "rules": { + "avoid-sha3": "error", + "avoid-suicide": "error", + "avoid-throw": "error", + "avoid-tx-origin": "error", + "check-send-result": "error", + "compiler-version": ["error", "^0.8.0"], + "func-visibility": ["error", { "ignoreConstructors": true }], + "not-rely-on-block-hash": "error", + "not-rely-on-time": "error", + "reentrancy": "error", + "constructor-syntax": "error", + "private-vars-leading-underscore": ["error", { "strict": false }], + "imports-on-top": "error", + "visibility-modifier-order": "error", + "no-unused-import": "error", + "no-global-import": "error", + "reason-string": ["warn", { "maxLength": 120 }], + "avoid-low-level-calls": "off", + "no-empty-blocks": ["error", { "ignoreConstructors": true }], + "custom-errors": "off" + } +} diff --git a/packages/lsp11-contracts/README.md b/packages/lsp11-contracts/README.md new file mode 100755 index 000000000..4c358cd52 --- /dev/null +++ b/packages/lsp11-contracts/README.md @@ -0,0 +1,3 @@ +# LSP11 Social Recovery + +Package for the LSP11 Social Recovery standard. diff --git a/packages/lsp11-contracts/build.config.ts b/packages/lsp11-contracts/build.config.ts new file mode 100644 index 000000000..dc4f36906 --- /dev/null +++ b/packages/lsp11-contracts/build.config.ts @@ -0,0 +1,9 @@ +import { defineBuildConfig } from 'unbuild'; + +export default defineBuildConfig({ + entries: ['./index'], + declaration: 'compatible', // generate .d.ts files + rollup: { + emitCJS: true, + }, +}); diff --git a/packages/lsp11-contracts/constants.ts b/packages/lsp11-contracts/constants.ts new file mode 100644 index 000000000..3a26fc4d9 --- /dev/null +++ b/packages/lsp11-contracts/constants.ts @@ -0,0 +1,3 @@ +// ERC165 Interface ID +// ---------- +export const INTERFACE_ID_LSP11 = '0x00000000'; diff --git a/packages/lsp11-contracts/contracts/ILSP11UniversalSocialRecovery.sol b/packages/lsp11-contracts/contracts/ILSP11UniversalSocialRecovery.sol new file mode 100644 index 000000000..3049002c9 --- /dev/null +++ b/packages/lsp11-contracts/contracts/ILSP11UniversalSocialRecovery.sol @@ -0,0 +1,304 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.9; + +/** + * @title ILSP11UniversalSocialRecovery + * @notice Contract providing a mechanism for account recovery through a designated set of guardians. + * @dev Guardians can be regular Ethereum addresses or secret guardians represented by a salted hash of their address. + * The contract allows for voting mechanisms where guardians can vote for a recovery address. Once the threshold is met, the recovery process can be initiated. + */ +interface ILSP11UniversalSocialRecovery { + /** + * @notice Event emitted when a guardian is added for an account. + * @param account The account for which the guardian is being added. + * @param guardian The address of the new guardian being added. + */ + event GuardianAdded(address account, address guardian); + + /** + * @notice Event emitted when a guardian is removed for an account. + * @param account The account from which the guardian is being removed. + * @param guardian The address of the guardian being removed. + */ + event GuardianRemoved(address account, address guardian); + + /** + * @notice Event emitted when the guardian threshold for an account is changed. + * @param account The account for which the guardian threshold is being changed. + * @param guardianThreshold The new guardian threshold for the account. + */ + event GuardiansThresholdChanged(address account, uint256 guardianThreshold); + + /** + * @notice Event emitted when the secret hash associated with an account is changed. + * @param account The account for which the secret hash is being changed. + * @param secretHash The new secret hash for the account. + */ + event SecretHashChanged(address account, bytes32 secretHash); + + /** + * @notice Event emitted when the recovery delay associated with an account is changed. + * @param account The account for which the recovery delay is being changed. + * @param recoveryDelay The new recovery delay for the account. + */ + event RecoveryDelayChanged(address account, uint256 recoveryDelay); + + /** + * @notice Event emitted when a guardian votes for an address to be recovered. + * @param account The account for which the vote is being cast. + * @param recoveryCounter The recovery counter at the time of voting. + * @param guardian The guardian casting the vote. + * @param guardianVotedAddress The address voted by the guardian for recovery. + */ + event GuardianVotedFor( + address account, + uint256 recoveryCounter, + address guardian, + address guardianVotedAddress + ); + + /** + * @notice Event emitted when a recovery process is cancelled for an account. + * @param account The account for which the recovery process was cancelled. + * @param previousRecoveryCounter The recovery counter before cancellation. + */ + event RecoveryCancelled(address account, uint256 previousRecoveryCounter); + + /** + * @notice Event emitted when an address commits a plain secret to recover an account. + * @param account The account for which the plain secret is being committed. + * @param recoveryCounter The recovery counter at the time of the commitment. + * @param committedBy The address who made the commitment. + * @param commitment The commitment associated with the plain secret. + */ + event PlainSecretCommitted( + address account, + uint256 recoveryCounter, + address committedBy, + bytes32 commitment + ); + + /** + * @notice Event emitted when a recovery process is successful for an account. + * @param account The account for which the recovery process was successful. + * @param recoveryCounter The recovery counter at the time of successful recovery. + * @param guardianVotedAddress The address voted by guardians for the successful recovery. + */ + event RecoveryProcessSuccessful( + address account, + uint256 recoveryCounter, + address guardianVotedAddress + ); + + /** + * @notice Get the array of addresses representing guardians associated with an account. + * @param account The account for which guardians are queried. + * @return An array of addresses representing guardians for the given account. + */ + function getGuardiansOf( + address account + ) external view returns (address[] memory); + + /** + * @notice Check if an address is a guardian for a specific account. + * @param account The account to check for guardian status. + * @param guardianAddress The address to verify if it's a guardian for the given account.. + * @return A boolean indicating whether the address is a guardian for the given account. + */ + function isGuardianOf( + address account, + address guardianAddress + ) external view returns (bool); + + /** + * @notice Get the guardian threshold for a specific account. + * @param account The account for which the guardian threshold is queried. + * @return The guardian threshold set for the given account. + */ + function getGuardiansThresholdOf( + address account + ) external view returns (uint256); + + /** + * @notice Get the secret hash associated with a specific account. + * @param account The account for which the secret hash is queried. + * @return The secret hash associated with the given account. + */ + function getSecretHashOf(address account) external view returns (bytes32); + + /** + * @notice Get the recovery delay associated with a specific account. + * @param account The account for which the recovery delay is queried. + * @return The recovery delay associated with the given account. + */ + function getRecoveryDelayOf(address account) external view returns (uint256); + + /** + * @notice Get the successful recovery counter for a specific account. + * @param account The account for which the recovery counter is queried. + * @return The successful recovery counter for the given account. + */ + function getRecoveryCounterOf( + address account + ) external view returns (uint256); + + /** + * @notice Get the address voted for recovery by a guardian for a specific account and recovery counter. + * @param account The account for which the vote is queried. + * @param recoveryCounter The recovery counter for which the vote is queried. + * @param guardian The guardian whose vote is queried. + * @return The address voted for recovery by the specified guardian for the given account and recovery counter. + */ + function getAddressVotedByGuardian( + address account, + uint256 recoveryCounter, + address guardian + ) external view returns (address); + + /** + * @notice Get the number of votes an address has received from guardians for a specific account and recovery counter. + * @param account The account for which the votes are queried. + * @param recoveryCounter The recovery counter for which the votes are queried. + * @param votedAddress The address for which the votes are queried. + * @return The number of votes the specified address has received from guardians for the given account and recovery counter. + */ + function getVotesOfGuardianVotedAddress( + address account, + uint256 recoveryCounter, + address votedAddress + ) external view returns (uint256); + + /** + * @notice Checks if the votes received by a given address from guardians have reached the threshold necessary for account recovery. + * @param account The account for which the threshold check is performed. + * @param recoveryCounter The recovery counter for which the threshold check is performed. + * @param votedAddress The address for which the votes are counted. + * @return A boolean indicating whether the votes for the specified address have reached the necessary threshold for the given account and recovery counter. + * @dev This function evaluates if the number of votes from guardians for a specific voted address meets or exceeds the required threshold for account recovery. + * This is part of the account recovery process where guardians vote for the legitimacy of a recovery address. + */ + function hasReachedThreshold( + address account, + uint256 recoveryCounter, + address votedAddress + ) external view returns (bool); + + /** + * @notice Get the commitment associated with an address for recovery for a specific account and recovery counter. + * @param account The account for which the commitment is queried. + * @param recoveryCounter The recovery counter for which the commitment is queried. + * @param committedBy The address who made the commitment. + * @return The commitment associated with the specified address for recovery for the given account and recovery counter. + */ + function getCommitmentInfoOf( + address account, + uint256 recoveryCounter, + address committedBy + ) external view returns (bytes32, uint256); + + /** + * @notice Adds a new guardian to the calling account. + * @param newGuardian The address of the new guardian to be added. + * @dev This function allows the account holder to add a new guardian to their account. + * If the provided address is already a guardian for the account, the function will revert. + * Emits a `GuardianAdded` event upon successful addition of the guardian. + */ + function addGuardian(address account, address newGuardian) external; + + /** + * @notice Removes an existing guardian from the calling account. + * @param existingGuardian The address of the existing guardian to be removed. + * @dev This function allows the account holder to remove an existing guardian from their account. + * If the provided address is not a current guardian or the removal would violate the guardian threshold, the function will revert. + * Emits a `GuardianRemoved` event upon successful removal of the guardian. + */ + function removeGuardian(address account, address existingGuardian) external; + + /** + * @notice Sets the guardian threshold for the calling account. + * @param newThreshold The new guardian threshold to be set for the calling account. + * @dev This function allows the account holder to set the guardian threshold for their account. + * If the provided threshold exceeds the number of current guardians, the function will revert. + * Emits a `GuardiansThresholdChanged` event upon successful threshold modification. + */ + function setGuardiansThreshold( + address account, + uint256 newThreshold + ) external; + + /** + * @notice Sets the recovery secret hash for the calling account. + * @param newRecoverSecretHash The new recovery secret hash to be set for the calling account. + * @dev This function allows the account holder to set a new recovery secret hash for their account. + * If the provided secret hash is zero, the function will revert. + * Emits a `SecretHashChanged` event upon successful secret hash modification. + */ + function setRecoverySecretHash( + address account, + bytes32 newRecoverSecretHash + ) external; + + /** + * @notice Sets the recovery delay for the calling account. + * @param account The address of the account to which the recovery delay will be set. + * @param recoveryDelay The new recovery delay to be set for the calling account. + * @dev This function allows the account to set a new recovery delay for their account. + * Emits a `RecoveryDelayChanged` event upon successful secret hash modification. + */ + function setRecoveryDelay( + address account, + uint256 recoveryDelay + ) external; + + /** + * @notice Allows a guardian to vote for an address to be recovered. + * @param account The account for which the vote is being cast. + * @param guardianVotedAddress The address voted by the guardian for recovery. + * @dev This function allows a guardian to vote for an address to be recovered in a recovery process. + * If the guardian has already voted for the provided address, the function will revert. + * Emits a `GuardianVotedFor` event upon successful vote. + */ + function voteForRecoverer( + address guardian, + address account, + address guardianVotedAddress + ) external; + + /** + * @notice Commits a plain secret for an address to be recovered. + * @param account The account for which the plain secret is being committed. + * @param commitment The commitment associated with the plain secret. + * @dev This function allows an address to commit a plain secret for the recovery process. + * If the guardian has not voted for the provided address, the function will revert. + */ + function commitPlainSecret( + address recoverer, + address account, + bytes32 commitment + ) external; + + /** + * @notice Initiates the account recovery process. + * @param account The account for which the recovery is being initiated. + * @param plainHash The plain hash associated with the recovery process. + * @param newSecretHash The new secret hash to be set for the account. + * @param calldataToExecute The calldata to be executed during the recovery process. + * @dev This function initiates the account recovery process and executes the provided calldata. + * If the new secret hash is zero or the number of votes is less than the guardian threshold, the function will revert. + * Emits a `RecoveryProcessSuccessful` event upon successful recovery process. + */ + function recoverAccess( + address recoverer, + address account, + bytes32 plainHash, + bytes32 newSecretHash, + bytes calldata calldataToExecute + ) external payable; + + /** + * @notice Cancels the ongoing recovery process for the account by increasing the recovery counter. + * @dev This function allows the account holder to cancel the ongoing recovery process by incrementing the recovery counter. + * Emits a `RecoveryCancelled` event upon successful cancellation of the recovery process. + */ + function cancelRecoveryProcess(address account) external; +} diff --git a/packages/lsp11-contracts/contracts/LSP11Constants.sol b/packages/lsp11-contracts/contracts/LSP11Constants.sol new file mode 100644 index 000000000..e823de28a --- /dev/null +++ b/packages/lsp11-contracts/contracts/LSP11Constants.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.9; + +// --- ERC165 interface ids +bytes4 constant _INTERFACEID_LSP11 = 0xcc80e8f6; + +// version number used to validate signed relayed call +uint256 constant LSP11_VERSION = 11; diff --git a/packages/lsp11-contracts/contracts/LSP11Errors.sol b/packages/lsp11-contracts/contracts/LSP11Errors.sol new file mode 100644 index 000000000..bdb9a5e99 --- /dev/null +++ b/packages/lsp11-contracts/contracts/LSP11Errors.sol @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.9; + +/** + * @dev The guardian address already exists for the account. + * @param account The account trying to add the guardian. + * @param guardian The guardian address that already exists. + */ +error GuardianAlreadyExists(address account, address guardian); + +/** + * @dev The specified guardian address does not exist for the account. + * @param account The account trying to remove the guardian. + * @param guardian The guardian address that was not found. + */ +error GuardianNotFound(address account, address guardian); + +/** + * @dev The caller is not a guardian for the account. + * @param guardian Expected guardian address. + * @param caller Address of the caller. + */ +error CallerIsNotGuardian(address guardian, address caller); + +/** + * @dev The caller is not the account holder. + * @param account The expected account holder. + * @param caller Address of the caller. + */ +error CallerIsNotTheAccount(address account, address caller); + +/** + * @dev One or more batch calls failed. + * @param iteration The iteration at which the batch call failed. + */ +error BatchCallsFailed(uint256 iteration); + +/** + * @dev The caller is not the expected recoverer. + * @param recoverer Expected recoverer address. + * @param caller Address of the caller. + */ +error CallerIsNotRecoverer(address recoverer, address caller); + +/** + * @dev The specified threshold exceeds the number of guardians. + * @param account The account trying to set the threshold. + * @param threshold The threshold value that exceeds the number of guardians. + */ +error ThresholdExceedsGuardianNumber(address account, uint256 threshold); + +/** + * @dev Removing the guardian would violate the guardian threshold. + * @param account The account trying to remove the guardian. + * @param threshold The guardian address that would cause a threshold violation if removed. + */ +error GuardianNumberCannotGoBelowThreshold(address account, uint256 threshold); + +/** + * @dev The secret guardian hash already exists for the account. + * @param account The account trying to add the secret guardian. + * @param secretGuardian The secret guardian hash that already exists. + */ +error SecretGuardianAlreadyExists(address account, bytes32 secretGuardian); + +/** + * @dev The specified secret guardian hash does not exist for the account. + * @param account The account trying to remove the secret guardian. + * @param secretGuardian The secret guardian hash that was not found. + */ +error SecretGuardianNotFound(address account, bytes32 secretGuardian); + +/** + * @dev Guardian is not authorized to vote for the account. + * @param account The account for which the vote is being cast. + * @param recoverer the caller + */ +error CallerVotesHaveNotReachedThreshold(address account, address recoverer); + +/** + * @dev The account has not been set up yet. + */ +error AccountNotSetupYet(); + +/** + * @dev The caller is not a guardian for the account. + * @param account The account in question. + * @param caller Address of the caller. + */ +error CallerIsNotAGuardianOfTheAccount(address account, address caller); + +/** + * @dev A guardian cannot vote for the same address twice. + * @param account The account for which the vote is being cast. + * @param guardian The guardian casting the vote. + * @param guardianVotedAddress The address voted by the guardian for recovery. + */ +error CannotVoteToAddressTwice( + address account, + address guardian, + address guardianVotedAddress +); + +/** + * @dev The voted address did not meet the recovery requirements. + * @param account The account for which recovery is being attempted. + * @param votedAddress The address that was voted for recovery. + */ +error InvalidRecovery(address account, address votedAddress); + +/** + * @dev The commitment provided is not valid. + * @param account The account for which the commitment is being checked. + * @param committer The address providing the commitment. + */ +error InvalidCommitment(address account, address committer); + +/** + * @dev The provided secret hash is not valid for recovery. + * @param account The account for which recovery is being attempted. + * @param secretHash The invalid secret hash provided. + */ +error InvalidSecretHash(address account, bytes32 secretHash); + +/** + * @dev The commitment provided is too early. + * @param account The account for which the commitment is being checked. + * @param committer The address providing the commitment. + */ +error CannotRecoverAfterDirectCommit(address account, address committer); + +error InvalidSignature(); + +error CannotRecoverBeforeDelay(address, uint256); diff --git a/packages/lsp11-contracts/contracts/LSP11UniversalSocialRecovery.sol b/packages/lsp11-contracts/contracts/LSP11UniversalSocialRecovery.sol new file mode 100644 index 000000000..b74b0ec5c --- /dev/null +++ b/packages/lsp11-contracts/contracts/LSP11UniversalSocialRecovery.sol @@ -0,0 +1,711 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.9; + +// Interfaces +import { + ILSP11UniversalSocialRecovery +} from "./ILSP11UniversalSocialRecovery.sol"; + +// Libraries +import { + EnumerableSet +} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import {Address} from "@openzeppelin/contracts/utils/Address.sol"; +import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; + +// Constants +// solhint-disable no-global-import +import "./LSP11Constants.sol"; + +// Errors +// solhint-disable no-global-import +import "./LSP11Errors.sol"; + +/** + * @title LSP11UniversalSocialRecovery + * @notice Contract providing a mechanism for account recovery through a designated set of guardians. + * @dev Guardians can be regular Ethereum addresses or secret guardians represented by a salted hash of their address. + * The contract allows for voting mechanisms where guardians can vote for a recovery address. Once the threshold is met, the recovery process can be initiated. + */ +contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { + using EnumerableSet for EnumerableSet.AddressSet; + + /// @notice The default recovery delay set to 40 minutes. + uint256 constant DEFAULT_RECOVERY_DELAY = 40 minutes; + + /** + * @dev Stores the hash of a commitment along with a timestamp. + */ + struct CommitmentInfo { + /// @notice The keccak256 hash of the commitment. + bytes32 commitment; + /// @notice The timestamp when the commitment was made. + uint256 timestamp; + } + + /** + * @dev This mapping stores the set of guardians associated with each account. + */ + mapping(address => EnumerableSet.AddressSet) internal _guardiansOf; + + /** + * @dev This mapping stores the guardian threshold for each account. + */ + mapping(address => uint256) internal _guardiansThresholdOf; + + /** + * @dev This mapping stores the delay associated with each account. + */ + mapping(address => uint256) internal _recoveryDelayOf; + + /** + * @dev This mapping stores if the account use the default recovery. + */ + mapping(address => bool) internal _defaultRecoveryRemoved; + + /** + * @dev This mapping stores the secret hash associated with each account. + */ + mapping(address => bytes32) internal _secretHashOf; + + /** + * @dev This mapping stores the successful recovery counter for each account. + */ + mapping(address => uint256) internal _recoveryCounterOf; + + /** + * @dev This mapping stores the address voted for recovery by guardians for each account in a specific recovery counter. + */ + mapping(address => mapping(uint256 => mapping(address => address))) + internal _guardiansVotedFor; + + /** + * @dev This mapping stores the number of votes an address has received from guardians for each account in a specific recovery counter. + */ + mapping(address => mapping(uint256 => mapping(address => uint256))) + internal _votesOfguardianVotedAddress; + + /** + * @dev This mapping stores the commitment associated with an address for recovery for each account in a specific recovery counter. + */ + mapping(address => mapping(uint256 => mapping(address => CommitmentInfo))) + internal _commitmentInfoOf; + + /** + * @dev First recovery timestamp in a recovery counter + */ + mapping(address => mapping(uint256 => uint256)) + internal _firstRecoveryTimestamp; + + /** + * @notice Modifier to ensure that a function is called only by designated guardians for a specific account. + * @dev Throws if called by any account other than the guardians + * @param account The account to check against for guardian status. + */ + modifier onlyGuardians(address account, address guardian) virtual { + if (guardian != msg.sender) + revert CallerIsNotGuardian(guardian, msg.sender); + + if (!(_guardiansOf[account].contains(guardian))) + revert CallerIsNotAGuardianOfTheAccount(account, guardian); + _; + } + + /** + * @notice Modifier to ensure that the account provided is the same as the caller + * @dev Throws if the caller is writing to another account + * @param account The account to check against the caller. + */ + modifier accountIsCaller(address account) virtual { + if (account != msg.sender) + revert CallerIsNotTheAccount(account, msg.sender); + _; + } + + /** + * @notice Executes multiple calls in a single transaction. + * @param data An array of calldata bytes to be executed. + * @return results An array of bytes containing the results of each executed call. + * @dev This function allows for multiple calls to be made in a single transaction, improving efficiency. + * If a call fails, the function will attempt to bubble up the revert reason or revert with a default message. + */ + function batchCalls( + bytes[] calldata data + ) public virtual returns (bytes[] memory results) { + results = new bytes[](data.length); + for (uint256 i; i < data.length; ) { + (bool success, bytes memory result) = address(this).delegatecall( + data[i] + ); + + if (!success) { + // Look for revert reason and bubble it up if present + if (result.length != 0) { + // The easiest way to bubble the revert reason is using memory via assembly + // solhint-disable no-inline-assembly + /// @solidity memory-safe-assembly + assembly { + let returndata_size := mload(result) + revert(add(32, result), returndata_size) + } + } else { + revert BatchCallsFailed(i); + } + } + + results[i] = result; + + unchecked { + ++i; + } + } + } + + /** + * @notice Get the array of addresses representing guardians associated with an account. + * @param account The account for which guardians are queried. + * @return An array of addresses representing guardians for the given account. + */ + function getGuardiansOf( + address account + ) public view returns (address[] memory) { + return _guardiansOf[account].values(); + } + + /** + * @notice Check if an address is a guardian for a specific account. + * @param account The account to check for guardian status. + * @param guardianAddress The address to verify if it's a guardian for the given account.. + * @return A boolean indicating whether the address is a guardian for the given account. + */ + function isGuardianOf( + address account, + address guardianAddress + ) public view returns (bool) { + return _guardiansOf[account].contains(guardianAddress); + } + + /** + * @notice Get the guardian threshold for a specific account. + * @param account The account for which the guardian threshold is queried. + * @return The guardian threshold set for the given account. + */ + function getGuardiansThresholdOf( + address account + ) public view returns (uint256) { + return _guardiansThresholdOf[account]; + } + + /** + * @notice Get the secret hash associated with a specific account. + * @param account The account for which the secret hash is queried. + * @return The secret hash associated with the given account. + */ + function getSecretHashOf(address account) public view returns (bytes32) { + return _secretHashOf[account]; + } + + /** + * @notice Get the recovery delay associated with a specific account. + * @param account The account for which the recovery delay is queried. + * @return The recovery delay associated with the given account. + */ + function getRecoveryDelayOf(address account) public view returns (uint256) { + if (!_defaultRecoveryRemoved[account]) return DEFAULT_RECOVERY_DELAY; + return _recoveryDelayOf[account]; + } + + /** + * @notice Get the successful recovery counter for a specific account. + * @param account The account for which the recovery counter is queried. + * @return The successful recovery counter for the given account. + */ + function getRecoveryCounterOf( + address account + ) public view returns (uint256) { + return _recoveryCounterOf[account]; + } + + /** + * @notice Get the address voted for recovery by a guardian for a specific account and recovery counter. + * @param account The account for which the vote is queried. + * @param recoveryCounter The recovery counter for which the vote is queried. + * @param guardian The guardian whose vote is queried. + * @return The address voted for recovery by the specified guardian for the given account and recovery counter. + */ + function getAddressVotedByGuardian( + address account, + uint256 recoveryCounter, + address guardian + ) public view returns (address) { + return _guardiansVotedFor[account][recoveryCounter][guardian]; + } + + /** + * @notice Get the number of votes an address has received from guardians for a specific account and recovery counter. + * @param account The account for which the votes are queried. + * @param recoveryCounter The recovery counter for which the votes are queried. + * @param votedAddress The address for which the votes are queried. + * @return The number of votes the specified address has received from guardians for the given account and recovery counter. + */ + function getVotesOfGuardianVotedAddress( + address account, + uint256 recoveryCounter, + address votedAddress + ) public view returns (uint256) { + return + _votesOfguardianVotedAddress[account][recoveryCounter][ + votedAddress + ]; + } + + /** + * @notice Get the commitment associated with an address for recovery for a specific account and recovery counter. + * @param account The account for which the commitment is queried. + * @param recoveryCounter The recovery counter for which the commitment is queried. + * @param committedBy The address who made the commitment. + * @return The bytes32 commitment and its timestamp associated with the specified address for recovery for the given account and recovery counter. + */ + function getCommitmentInfoOf( + address account, + uint256 recoveryCounter, + address committedBy + ) public view returns (bytes32, uint256) { + CommitmentInfo memory _commitment = _commitmentInfoOf[account][ + recoveryCounter + ][committedBy]; + return (_commitment.commitment, _commitment.timestamp); + } + + /** + * @notice Checks if the votes received by a given address from guardians have reached the threshold necessary for account recovery. + * @param account The account for which the threshold check is performed. + * @param recoveryCounter The recovery counter for which the threshold check is performed. + * @param votedAddress The address for which the votes are counted. + * @return A boolean indicating whether the votes for the specified address have reached the necessary threshold for the given account and recovery counter. + * @dev This function evaluates if the number of votes from guardians for a specific voted address meets or exceeds the required threshold for account recovery. + * This is part of the account recovery process where guardians vote for the legitimacy of a recovery address. + */ + function hasReachedThreshold( + address account, + uint256 recoveryCounter, + address votedAddress + ) public view returns (bool) { + return + _guardiansThresholdOf[account] == + _votesOfguardianVotedAddress[account][recoveryCounter][ + votedAddress + ]; + } + + /** + * @notice Adds a new guardian to the calling account. + * @param account The address of the account to which the guardian will be added. + * @param newGuardian The address of the new guardian to be added. + * @dev This function allows the account holder to add a new guardian to their account. + * If the provided address is already a guardian for the account, the function will revert. + * Emits a `GuardianAdded` event upon successful addition of the guardian. + */ + function addGuardian( + address account, + address newGuardian + ) public virtual accountIsCaller(account) { + if (_guardiansOf[account].contains(newGuardian)) + revert GuardianAlreadyExists(account, newGuardian); + + _guardiansOf[account].add(newGuardian); + emit GuardianAdded(account, newGuardian); + } + + /** + * @notice Removes an existing guardian from the calling account. + * @param account The address of the account to which the guardian will be removed. + * @param existingGuardian The address of the existing guardian to be removed. + * @dev This function allows the account holder to remove an existing guardian from their account. + * If the provided address is not a current guardian or the removal would violate the guardian threshold, the function will revert. + * Emits a `GuardianRemoved` event upon successful removal of the guardian. + */ + function removeGuardian( + address account, + address existingGuardian + ) public virtual accountIsCaller(account) { + if (!_guardiansOf[account].contains(existingGuardian)) + revert GuardianNotFound(account, existingGuardian); + + if (_guardiansOf[account].length() == _guardiansThresholdOf[account]) + revert GuardianNumberCannotGoBelowThreshold( + account, + _guardiansThresholdOf[account] + ); + + _guardiansOf[account].remove(existingGuardian); + emit GuardianRemoved(account, existingGuardian); + } + + /** + * @notice Sets the guardian threshold for the calling account. + * @param account The address of the account to which the threshold will be set. + * @param newThreshold The new guardian threshold to be set for the calling account. + * @dev This function allows the account holder to set the guardian threshold for their account. + * If the provided threshold exceeds the number of current guardians, the function will revert. + * Emits a `GuardiansThresholdChanged` event upon successful threshold modification. + */ + function setGuardiansThreshold( + address account, + uint256 newThreshold + ) public virtual accountIsCaller(account) { + if (newThreshold > _guardiansOf[account].length()) + revert ThresholdExceedsGuardianNumber(account, newThreshold); + + _guardiansThresholdOf[account] = newThreshold; + emit GuardiansThresholdChanged(account, newThreshold); + } + + /** + * @notice Sets the recovery secret hash for the calling account. + * @param account The address of the account to which the recovery secret hash will be set. + * @param newRecoverSecretHash The new recovery secret hash to be set for the calling account. + * @dev This function allows the account holder to set a new recovery secret hash for their account. + * If the provided secret hash is zero, the function will revert. + * Emits a `SecretHashChanged` event upon successful secret hash modification. + */ + function setRecoverySecretHash( + address account, + bytes32 newRecoverSecretHash + ) public virtual accountIsCaller(account) { + _secretHashOf[account] = newRecoverSecretHash; + emit SecretHashChanged(account, newRecoverSecretHash); + } + + /** + * @notice Sets the recovery delay for the calling account. + * @param account The address of the account to which the recovery delay will be set. + * @param recoveryDelay The new recovery delay to be set for the calling account. + * @dev This function allows the account to set a new recovery delay for their account. + * Emits a `RecoveryDelayChanged` event upon successful secret hash modification. + */ + function setRecoveryDelay( + address account, + uint256 recoveryDelay + ) public virtual accountIsCaller(account) { + _recoveryDelayOf[account] = recoveryDelay; + emit RecoveryDelayChanged(account, recoveryDelay); + + if (!_defaultRecoveryRemoved[account]) { + _defaultRecoveryRemoved[account] = true; + } + } + + /** + * @notice Allows a guardian to vote for an address to be recovered. + * @param account The account for which the vote is being cast. + * @param guardianVotedAddress The address voted by the guardian for recovery. + * @dev This function allows a guardian to vote for an address to be recovered in a recovery process. + * If the guardian has already voted for the provided address, the function will revert. + * Emits a `GuardianVotedFor` event upon successful vote. + */ + function voteForRecoverer( + address account, + address guardian, + address guardianVotedAddress + ) public virtual onlyGuardians(account, guardian) { + uint256 accountRecoveryCounter = _recoveryCounterOf[account]; + + uint256 recoveryTimestamp = _firstRecoveryTimestamp[account][ + accountRecoveryCounter + ]; + + if (recoveryTimestamp == 0) { + _firstRecoveryTimestamp[account][accountRecoveryCounter] = block + .timestamp; + } + + address previousVotedForAddressByGuardian = _guardiansVotedFor[account][ + accountRecoveryCounter + ][guardian]; + + // Cannot vote to the same person twice + if (guardianVotedAddress == previousVotedForAddressByGuardian) + revert CannotVoteToAddressTwice( + account, + guardian, + guardianVotedAddress + ); + + // If didn't vote before or reset + if (previousVotedForAddressByGuardian == address(0)) { + _guardiansVotedFor[account][accountRecoveryCounter][ + guardian + ] = guardianVotedAddress; + _votesOfguardianVotedAddress[account][accountRecoveryCounter][ + guardianVotedAddress + ]++; + } + + if ( + guardianVotedAddress != previousVotedForAddressByGuardian && + previousVotedForAddressByGuardian != address(0) + ) { + _guardiansVotedFor[account][accountRecoveryCounter][ + guardian + ] = guardianVotedAddress; + _votesOfguardianVotedAddress[account][accountRecoveryCounter][ + previousVotedForAddressByGuardian + ]--; + + // If the voted address for is address(0) the intention is to reset, not vote for address 0 + if (guardianVotedAddress != address(0)) { + _votesOfguardianVotedAddress[account][accountRecoveryCounter][ + guardianVotedAddress + ]++; + } + } + + emit GuardianVotedFor( + account, + accountRecoveryCounter, + guardian, + guardianVotedAddress + ); + } + + /** + * @notice Cancels the ongoing recovery process for the account by increasing the recovery counter. + * @param account The address of the account to which the recovery process will be canceled. + * @dev This function allows the account holder to cancel the ongoing recovery process by incrementing the recovery counter. + * Emits a `RecoveryCancelled` event upon successful cancellation of the recovery process. + */ + function cancelRecoveryProcess( + address account + ) public accountIsCaller(account) { + uint256 previousRecoveryCounter = _recoveryCounterOf[account]; + _recoveryCounterOf[account]++; + emit RecoveryCancelled(account, previousRecoveryCounter); + } + + /** + * @notice Commits a plain secret for an address to be recovered. + * @param account The account for which the plain secret is being committed. + * @param commitment The commitment associated with the plain secret. + * @dev This function allows an address to commit a plain secret for the recovery process. + * If the guardian has not voted for the provided address, the function will revert. + */ + function commitPlainSecret( + address account, + address recoverer, + bytes32 commitment + ) public { + if (recoverer != msg.sender) + revert CallerIsNotRecoverer(recoverer, msg.sender); + + uint256 recoveryCounter = _recoveryCounterOf[account]; + + CommitmentInfo memory _commitment = CommitmentInfo( + commitment, + block.timestamp + ); + _commitmentInfoOf[account][recoveryCounter][recoverer] = _commitment; + + emit PlainSecretCommitted( + account, + recoveryCounter, + recoverer, + commitment + ); + } + + /** + * @notice Commits a plain secret for an address to be recovered. + * @param account The account for which the plain secret is being committed. + * @param commitment The commitment associated with the plain secret. + * @dev This function allows an address to commit a plain secret for the recovery process. + * If the guardian has not voted for the provided address, the function will revert. + */ + function commitPlainSecretRelayCall( + address account, + address recoverer, + bytes32 commitment, + bytes memory signature + ) public { + // retreive current recovery counter + uint256 accountRecoveryCounter = _recoveryCounterOf[account]; + + bytes memory lsp11EncodedMessage = abi.encodePacked( + "lsp11", + account, + accountRecoveryCounter, + block.chainid, + recoverer, + commitment + ); + + bytes32 eip191Hash = ECDSA.toEthSignedMessageHash(lsp11EncodedMessage); + + address recoveredAddress = ECDSA.recover(eip191Hash, signature); + + if (recoverer != recoveredAddress) revert InvalidSignature(); + + uint256 recoveryCounter = _recoveryCounterOf[account]; + + CommitmentInfo memory _commitment = CommitmentInfo( + commitment, + block.timestamp + ); + _commitmentInfoOf[account][recoveryCounter][recoverer] = _commitment; + + emit PlainSecretCommitted( + account, + recoveryCounter, + recoverer, + commitment + ); + } + + /** + * @notice Initiates the account recovery process. + * @param account The account for which the recovery is being initiated. + * @param plainHash The plain hash associated with the recovery process. + * @param newSecretHash The new secret hash to be set for the account. + * @param calldataToExecute The calldata to be executed during the recovery process. + * @dev This function initiates the account recovery process and executes the provided calldata. + * If the new secret hash is zero or the number of votes is less than the guardian threshold, the function will revert. + * Emits a `RecoveryProcessSuccessful` event upon successful recovery process. + */ + function recoverAccess( + address account, + address recoverer, + bytes32 plainHash, + bytes32 newSecretHash, + bytes calldata calldataToExecute + ) public payable { + if (recoverer != msg.sender) + revert CallerIsNotRecoverer(recoverer, msg.sender); + + // retreive current recovery counter + uint256 accountRecoveryCounter = _recoveryCounterOf[account]; + + _recoverAccess( + account, + accountRecoveryCounter, + recoverer, + plainHash, + newSecretHash, + calldataToExecute + ); + } + + function recoverAccessRelayCall( + address account, + address recoverer, + bytes32 plainHash, + bytes32 newSecretHash, + bytes calldata calldataToExecute, + bytes calldata signature + ) public payable { + // retreive current recovery counter + uint256 accountRecoveryCounter = _recoveryCounterOf[account]; + + bytes memory lsp11EncodedMessage = abi.encodePacked( + "lsp11", + account, + accountRecoveryCounter, + block.chainid, + msg.value, + recoverer, + plainHash, + newSecretHash, + calldataToExecute + ); + + bytes32 eip191Hash = ECDSA.toEthSignedMessageHash(lsp11EncodedMessage); + + address recoveredAddress = ECDSA.recover(eip191Hash, signature); + + if (recoverer != recoveredAddress) revert InvalidSignature(); + + _recoverAccess( + account, + accountRecoveryCounter, + recoverer, + plainHash, + newSecretHash, + calldataToExecute + ); + } + + function _recoverAccess( + address account, + uint256 recoveryCounter, + address recoverer, + bytes32 plainHash, + bytes32 newSecretHash, + bytes calldata calldataToExecute + ) internal { + if ( + block.timestamp < + _firstRecoveryTimestamp[account][recoveryCounter] + + getRecoveryDelayOf(account) + ) revert CannotRecoverBeforeDelay(account, getRecoveryDelayOf(account)); + + // retreive current secret hash + bytes32 _secretHash = _secretHashOf[account]; + + // retreive current guardians threshold + uint256 guardiansThresholdOfAccount = _guardiansThresholdOf[account]; + + // if there is no guardians, disallow recovering + if (guardiansThresholdOfAccount == 0) revert AccountNotSetupYet(); + + // retreive number of votes caller have + uint256 votesOfGuardianVotedAddress_ = _votesOfguardianVotedAddress[ + account + ][recoveryCounter][recoverer]; + + // votes validation + // if the threshold is 0, and the caller does not have votes + // will rely on the hash + if (votesOfGuardianVotedAddress_ < guardiansThresholdOfAccount) + revert CallerVotesHaveNotReachedThreshold(account, recoverer); + + // if there is a secret require a commitment first + if (_secretHash != bytes32(0)) { + bytes32 saltedHash = keccak256(abi.encode(account, plainHash)); + bytes32 commitment = keccak256(abi.encode(recoverer, saltedHash)); + + // Check that the commitment is valid + if ( + commitment != + _commitmentInfoOf[account][recoveryCounter][recoverer] + .commitment + ) revert InvalidCommitment(account, recoverer); + + // Check that the commitment is not too early + if ( + _commitmentInfoOf[account][recoveryCounter][recoverer] + .timestamp + + 100 > + block.timestamp + ) revert CannotRecoverAfterDirectCommit(account, recoverer); + + // Check that the secret hash is valid + if (saltedHash != _secretHash) + revert InvalidSecretHash(account, plainHash); + } + + _recoveryCounterOf[account]++; + _secretHashOf[account] = newSecretHash; + emit SecretHashChanged(account, newSecretHash); + + (bool success, bytes memory returnedData) = account.call{ + value: msg.value + }(calldataToExecute); + + Address.verifyCallResult( + success, + returnedData, + "LSP11: Failed to call function on account" + ); + + emit RecoveryProcessSuccessful(account, recoveryCounter, recoverer); + } +} diff --git a/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol b/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol new file mode 100644 index 000000000..39cf7db4c --- /dev/null +++ b/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol @@ -0,0 +1,1159 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; +import "forge-std/console.sol"; + +import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; + +import {Address} from "@openzeppelin/contracts/utils/Address.sol"; +import { + LSP11UniversalSocialRecovery +} from "../contracts/LSP11UniversalSocialRecovery.sol"; + +contract LSP11AccountFunctionalities is Test { + LSP11UniversalSocialRecovery public lsp11; + + fallback() external payable {} + + receive() external payable {} + + function setUp() public { + lsp11 = new LSP11UniversalSocialRecovery(); + } + + function testAddGuardian() public { + address newGuardian = address(0xABC); + + // // Expect GuardianAdded event + // vm.expectEmit(true, true, true, true); + // emit GuardianAdded(address(this), newGuardian); + + // Call addGuardian + lsp11.addGuardian(address(this), newGuardian); + + // Check if newGuardian is added + assertTrue(lsp11.isGuardianOf(address(this), newGuardian)); + + // Check getGuardiansOf + address[] memory guardians = lsp11.getGuardiansOf(address(this)); + assertTrue(guardians.length == 1 && guardians[0] == newGuardian); + } + + function testAddGuardianWithDifferentAccountShouldRevert() public { + address newGuardian = address(0xABC); + address differentAccount = address(0xDEF); + + // Expect a revert when trying to add a guardian with a different account parameter + vm.expectRevert(); + lsp11.addGuardian(differentAccount, newGuardian); + } + + function testAddExistingGuardianShouldRevert() public { + address existingGuardian = address(0xABC); + + // First, add the guardian + lsp11.addGuardian(address(this), existingGuardian); + + // Expect a revert when trying to add the same guardian again + vm.expectRevert(); + lsp11.addGuardian(address(this), existingGuardian); + } + + function testRemoveNonExistentGuardianShouldRevert() public { + address nonExistentGuardian = address(0xABC); + + // Expect a revert when trying to remove a guardian that does not exist + vm.expectRevert(); + lsp11.removeGuardian(address(this), nonExistentGuardian); + } + + function testRemoveExistingGuardian() public { + address existingGuardian = address(0xABC); + + // Add a guardian first + lsp11.addGuardian(address(this), existingGuardian); + + // Expect GuardianRemoved event + // vm.expectEmit(true, true, true, true); + // emit GuardianRemoved(address(this), existingGuardian); + + // Remove the guardian + lsp11.removeGuardian(address(this), existingGuardian); + + // Check if existingGuardian is removed + assertFalse(lsp11.isGuardianOf(address(this), existingGuardian)); + + // Check getGuardiansOf + address[] memory guardians = lsp11.getGuardiansOf(address(this)); + assertTrue(guardians.length == 0); + } + + function testRemoveGuardianWithDifferentAccountShouldRevert() public { + address existingGuardian = address(0xABC); + address differentAccount = address(0xDEF); + + // First, add the guardian to the test account + lsp11.addGuardian(address(this), existingGuardian); + + // Expect a revert when trying to remove a guardian from a different account + vm.expectRevert(); + lsp11.removeGuardian(differentAccount, existingGuardian); + } + + function testRemoveGuardianWhenThresholdEqualsGuardiansShouldRevert() + public + { + address guardian1 = address(0xABC); + address guardian2 = address(0xDEF); + + // Add two guardians + lsp11.addGuardian(address(this), guardian1); + lsp11.addGuardian(address(this), guardian2); + + // Set the guardian threshold to the current number of guardians (2 in this case) + lsp11.setGuardiansThreshold(address(this), 2); + + // Expect a revert when trying to remove a guardian, since it would violate the threshold + vm.expectRevert(); + lsp11.removeGuardian(address(this), guardian1); + } + + function testAddGuardiansThreshold() public { + uint256 newThreshold = 1; + address guardian1 = address(0xABC); + address guardian2 = address(0xDEF); + + // Expect GuardiansThresholdChanged event + // vm.expectEmit(true, true, true, true); + // emit GuardiansThresholdChanged(address(this), newThreshold); + + // Add two guardians + lsp11.addGuardian(address(this), guardian1); + lsp11.addGuardian(address(this), guardian2); + + // Set the guardians threshold + lsp11.setGuardiansThreshold(address(this), newThreshold); + + // Verify the guardians threshold is updated in the contract's state + uint256 storedThreshold = lsp11.getGuardiansThresholdOf(address(this)); + assertEq(storedThreshold, newThreshold); + } + + function testSetGuardiansThresholdWithDifferentAccountShouldRevert() + public + { + address differentAccount = address(0xDEF); + uint256 newThreshold = 2; + + // Expect a revert when trying to set the guardian threshold for a different account + vm.expectRevert(); + lsp11.setGuardiansThreshold(differentAccount, newThreshold); + } + + function testSetGuardiansThresholdHigherThanGuardiansShouldRevert() public { + address guardian1 = address(0xABC); + + // Add a single guardian + lsp11.addGuardian(address(this), guardian1); + + uint256 newThreshold = 2; // Setting threshold higher than the number of guardians (1 in this case) + + // Expect a revert when trying to set a threshold higher than the number of guardians + vm.expectRevert(); + lsp11.setGuardiansThreshold(address(this), newThreshold); + } + + function testAddSecretHash() public { + bytes32 newSecretHash = keccak256("newSecret"); + + // Expect SecretHashChanged event + // vm.expectEmit(true, true, true, true); + // emit SecretHashChanged(address(this), newSecretHash); + + // Set the secret hash + lsp11.setRecoverySecretHash(address(this), newSecretHash); + + // Verify the secret hash is updated in the contract's state + bytes32 storedSecretHash = lsp11.getSecretHashOf(address(this)); + assertEq(storedSecretHash, newSecretHash); + } + + function testAddRecoveryDelay() public { + uint256 newRecoveryDelay = 3600; // Example delay of 1 hour + + // Expect RecoveryDelayChanged event + // vm.expectEmit(true, true, true, true); + // emit RecoveryDelayChanged(address(this), newRecoveryDelay); + + // Set the recovery delay + lsp11.setRecoveryDelay(address(this), newRecoveryDelay); + + // Verify the recovery delay is updated in the contract's state + uint256 storedRecoveryDelay = lsp11.getRecoveryDelayOf(address(this)); + assertEq(storedRecoveryDelay, newRecoveryDelay); + } + + function testSetRecoverySecretHashWithDifferentAccountShouldRevert() + public + { + address differentAccount = address(0xDEF); + bytes32 newSecretHash = keccak256("newSecret"); + + // Expect a revert when trying to set the recovery secret hash for a different account + vm.expectRevert(); + lsp11.setRecoverySecretHash(differentAccount, newSecretHash); + } + + function testSetRecoveryDelayWithDifferentAccountShouldRevert() public { + address differentAccount = address(0xDEF); + uint256 newRecoveryDelay = 3600; // Example delay of 1 hour + + // Expect a revert when trying to set the recovery delay for a different account + vm.expectRevert(); + lsp11.setRecoveryDelay(differentAccount, newRecoveryDelay); + } + + function testCancelRecoveryIncrementsCounter() public { + // First, check the initial recovery counter value + uint256 initialCounter = lsp11.getRecoveryCounterOf(address(this)); + + // Expect RecoveryCancelled event + // vm.expectEmit(true, true, true, true); + // emit RecoveryCancelled(address(this), initialCounter); + + // Call cancelRecoveryProcess + lsp11.cancelRecoveryProcess(address(this)); + + // Verify the recovery counter is incremented + uint256 newCounter = lsp11.getRecoveryCounterOf(address(this)); + assertEq(newCounter, initialCounter + 1); + } + + function testCancelRecoveryFromDifferentAccountShouldRevert() public { + address differentAccount = address(0xDEF); + + // Expect a revert when trying to cancel recovery from a different account + vm.expectRevert(); + lsp11.cancelRecoveryProcess(differentAccount); + } + + function testBatchCallMultipleOperations() public { + address newGuardian = address(0xABC); + uint256 newThreshold = 1; + bytes32 newSecretHash = keccak256("newSecret"); + uint256 newRecoveryDelay = 3600; // 1 hour + + // Prepare calldata for addGuardian + bytes memory addGuardianData = abi.encodeWithSelector( + LSP11UniversalSocialRecovery.addGuardian.selector, + address(this), + newGuardian + ); + + // Prepare calldata for setGuardiansThreshold + bytes memory setThresholdData = abi.encodeWithSelector( + LSP11UniversalSocialRecovery.setGuardiansThreshold.selector, + address(this), + newThreshold + ); + + // Prepare calldata for setRecoverySecretHash + bytes memory setSecretData = abi.encodeWithSelector( + LSP11UniversalSocialRecovery.setRecoverySecretHash.selector, + address(this), + newSecretHash + ); + + // Prepare calldata for setRecoveryDelay + bytes memory setDelayData = abi.encodeWithSelector( + LSP11UniversalSocialRecovery.setRecoveryDelay.selector, + address(this), + newRecoveryDelay + ); + + bytes[] memory calls = new bytes[](4); + calls[0] = addGuardianData; + calls[1] = setThresholdData; + calls[2] = setSecretData; + calls[3] = setDelayData; + + // Batch call + lsp11.batchCalls(calls); + + // Verify each operation + assertTrue(lsp11.isGuardianOf(address(this), newGuardian)); + assertEq(lsp11.getGuardiansThresholdOf(address(this)), newThreshold); + assertEq(lsp11.getSecretHashOf(address(this)), newSecretHash); + assertEq(lsp11.getRecoveryDelayOf(address(this)), newRecoveryDelay); + } + + function testBatchCallMultipleOperationsOneFailTheWholeCall() public { + address newGuardian = address(0xABC); + + // Setting the threshold to 3 will make the setGuardiansThreshold call fail + // as its value is higher than the number of guardians + uint256 newThreshold = 3; + bytes32 newSecretHash = keccak256("newSecret"); + uint256 newRecoveryDelay = 3600; // 1 hour + + // Prepare calldata for addGuardian + bytes memory addGuardianData = abi.encodeWithSelector( + LSP11UniversalSocialRecovery.addGuardian.selector, + address(this), + newGuardian + ); + + // Prepare calldata for setGuardiansThreshold + bytes memory setThresholdData = abi.encodeWithSelector( + LSP11UniversalSocialRecovery.setGuardiansThreshold.selector, + address(this), + newThreshold + ); + + // Prepare calldata for setRecoverySecretHash + bytes memory setSecretData = abi.encodeWithSelector( + LSP11UniversalSocialRecovery.setRecoverySecretHash.selector, + address(this), + newSecretHash + ); + + // Prepare calldata for setRecoveryDelay + bytes memory setDelayData = abi.encodeWithSelector( + LSP11UniversalSocialRecovery.setRecoveryDelay.selector, + address(this), + newRecoveryDelay + ); + + bytes[] memory calls = new bytes[](4); + calls[0] = addGuardianData; + calls[1] = setThresholdData; + calls[2] = setSecretData; + calls[3] = setDelayData; + + // Batch call + vm.expectRevert(); + lsp11.batchCalls(calls); + } + + function testNonGuardianCannotVote() public { + address nonGuardian = address(0xABC); + address recoveryAccount = address(this); // The account for which recovery is being attempted + address guardianVotedAddress = address(0xDEF); + + // Add a guardian (different from nonGuardian) + address guardian = address(0x123); + lsp11.addGuardian(recoveryAccount, guardian); + + // Expect a revert when nonGuardian tries to vote + vm.expectRevert(); + lsp11.voteForRecoverer( + recoveryAccount, + nonGuardian, + guardianVotedAddress + ); + } + + function testGuardianVoteAndCheckVoteCount() public { + address guardian = address(0xABC); + address recoveryAccount = address(this); // The account for which recovery is being attempted + address guardianVotedAddress = address(0xDEF); + + // Add guardian + lsp11.addGuardian(recoveryAccount, guardian); + + // Simulate the guardian casting a vote + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, guardianVotedAddress); + + // Verify the vote + address votedAddress = lsp11.getAddressVotedByGuardian( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + guardian + ); + assertEq(votedAddress, guardianVotedAddress); + + // Verify the number of votes for the voted address + uint256 voteCount = lsp11.getVotesOfGuardianVotedAddress( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + guardianVotedAddress + ); + assertEq(voteCount, 1); + } + + function testTwoGuardiansVoteAndStateCheck() public { + address guardian1 = address(0xABC); + address guardian2 = address(0xDEF); + address recoveryAccount = address(this); // The account for which recovery is being attempted + address votedAddress = address(0x123); + + // Add two guardians + lsp11.addGuardian(recoveryAccount, guardian1); + lsp11.addGuardian(recoveryAccount, guardian2); + + // Guardian1 casts a vote + vm.prank(guardian1); + lsp11.voteForRecoverer(recoveryAccount, guardian1, votedAddress); + + // Guardian2 casts a vote + vm.prank(guardian2); + lsp11.voteForRecoverer(recoveryAccount, guardian2, votedAddress); + + // Verify votes for each guardian + assertEq( + lsp11.getAddressVotedByGuardian( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + guardian1 + ), + votedAddress + ); + assertEq( + lsp11.getAddressVotedByGuardian( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + guardian2 + ), + votedAddress + ); + + // Verify the total number of votes for the voted address + uint256 totalVotes = lsp11.getVotesOfGuardianVotedAddress( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + votedAddress + ); + assertEq(totalVotes, 2); + } + + function testGuardianChangesVote() public { + address guardian = address(0xABC); + address recoveryAccount = address(this); // The account for which recovery is being attempted + address firstVotedAddress = address(0xDEF); + address secondVotedAddress = address(0x123); + + // Add a guardian + lsp11.addGuardian(recoveryAccount, guardian); + + // Guardian casts a vote for the first address + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, firstVotedAddress); + + // Guardian changes vote to the second address + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, secondVotedAddress); + + // Verify the updated vote + address currentVotedAddress = lsp11.getAddressVotedByGuardian( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + guardian + ); + assertEq(currentVotedAddress, secondVotedAddress); + + // Verify vote counts for both addresses + uint256 firstAddressVotes = lsp11.getVotesOfGuardianVotedAddress( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + firstVotedAddress + ); + uint256 secondAddressVotes = lsp11.getVotesOfGuardianVotedAddress( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + secondVotedAddress + ); + assertEq(firstAddressVotes, 0); // The vote for the first address should be removed + assertEq(secondAddressVotes, 1); // The vote for the second address should be counted + } + + function testGuardianResetsVote() public { + address guardian = address(0xABC); + address recoveryAccount = address(this); // The account for which recovery is being attempted + address votedAddress = address(0xDEF); + + // Add a guardian + lsp11.addGuardian(recoveryAccount, guardian); + + // Guardian casts a vote + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, votedAddress); + + // Guardian resets their vote by voting for address(0) + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, address(0)); + + // Verify the vote is reset + address currentVotedAddress = lsp11.getAddressVotedByGuardian( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + guardian + ); + assertEq(currentVotedAddress, address(0)); + + // Verify the vote count for the initially voted address + uint256 voteCount = lsp11.getVotesOfGuardianVotedAddress( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + votedAddress + ); + assertEq(voteCount, 0); // The vote count should be reset to 0 + + // Verify that address(0) does not have any votes + uint256 voteCountForZeroAddress = lsp11.getVotesOfGuardianVotedAddress( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + address(0) + ); + assertEq(voteCountForZeroAddress, 0); // Address(0) should have 0 votes + } + + function testGuardiansVoteAccountCancelsRecoveryAndCheckVotes() public { + address guardian1 = address(0xABC); + address guardian2 = address(0xDEF); + address recoveryAccount = address(this); // The account for which recovery is being attempted + address votedAddress = address(0x123); + + // Add guardians + lsp11.addGuardian(recoveryAccount, guardian1); + lsp11.addGuardian(recoveryAccount, guardian2); + + // Guardians cast their votes + vm.prank(guardian1); + lsp11.voteForRecoverer(recoveryAccount, guardian1, votedAddress); + vm.prank(guardian2); + lsp11.voteForRecoverer(recoveryAccount, guardian2, votedAddress); + + uint256 oldRecoveryCounter = lsp11.getRecoveryCounterOf( + recoveryAccount + ); + + // Account owner cancels recovery process + lsp11.cancelRecoveryProcess(recoveryAccount); + + uint256 newRecoveryCounter = lsp11.getRecoveryCounterOf( + recoveryAccount + ); + assertEq(newRecoveryCounter, oldRecoveryCounter + 1); + + // Verify votes for the old recovery counter + uint256 oldCounterVotes = lsp11.getVotesOfGuardianVotedAddress( + recoveryAccount, + oldRecoveryCounter, + votedAddress + ); + assertEq(oldCounterVotes, 2); + + // Verify votes for the new recovery counter are reset + uint256 newCounterVotes = lsp11.getVotesOfGuardianVotedAddress( + recoveryAccount, + newRecoveryCounter, + votedAddress + ); + assertEq(newCounterVotes, 0); + } + + function testVotesMeetThresholdReturnsTrue() public { + address guardian1 = address(0xABC); + address guardian2 = address(0xDEF); + address recoveryAccount = address(this); + address votedAddress = address(0x123); + uint256 threshold = 2; + + // Add guardians and set threshold + lsp11.addGuardian(recoveryAccount, guardian1); + lsp11.addGuardian(recoveryAccount, guardian2); + lsp11.setGuardiansThreshold(recoveryAccount, threshold); + + // Guardians cast their votes + vm.prank(guardian1); + lsp11.voteForRecoverer(recoveryAccount, guardian1, votedAddress); + vm.prank(guardian2); + lsp11.voteForRecoverer(recoveryAccount, guardian2, votedAddress); + + // Check if threshold is met + bool thresholdMet = lsp11.hasReachedThreshold( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + votedAddress + ); + assertTrue(thresholdMet); + } + + function testVotesDoNotMeetThresholdReturnsFalse() public { + address guardian1 = address(0xABC); + address guardian2 = address(0xDEF); + address recoveryAccount = address(this); + address votedAddress = address(0x123); + uint256 threshold = 2; + + // Add a guardian and set threshold + lsp11.addGuardian(recoveryAccount, guardian1); + lsp11.addGuardian(recoveryAccount, guardian2); + lsp11.setGuardiansThreshold(recoveryAccount, threshold); + + // Only one guardian casts a vote + vm.prank(guardian1); + lsp11.voteForRecoverer(recoveryAccount, guardian1, votedAddress); + + // Check if threshold is met + bool thresholdMet = lsp11.hasReachedThreshold( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + votedAddress + ); + assertFalse(thresholdMet); + } + + function testGuardianCannotVoteTwiceForSameAddress() public { + address guardian = address(0xABC); + address recoveryAccount = address(this); + address votedAddress = address(0xDEF); + + // Add a guardian + lsp11.addGuardian(recoveryAccount, guardian); + + // Guardian casts a vote + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, votedAddress); + + // Expect a revert when the same guardian tries to vote for the same address again + vm.expectRevert(); + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, votedAddress); + } + + function testRemovedGuardianCannotChangeVote() public { + address guardian = address(0xABC); + address recoveryAccount = address(this); + address firstVotedAddress = address(0xDEF); + address secondVotedAddress = address(0x123); + + // Add a guardian and cast a vote + lsp11.addGuardian(recoveryAccount, guardian); + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, firstVotedAddress); + + // Remove the guardian + lsp11.removeGuardian(recoveryAccount, guardian); + + // Expect a revert when the removed guardian tries to change their vote + vm.expectRevert(); + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, secondVotedAddress); + } + + function testVoteInvalidationAfterCounterIncrement() public { + address guardian = address(0xABC); + address recoveryAccount = address(this); + address votedAddress = address(0xDEF); + + // Add a guardian and cast a vote + lsp11.addGuardian(recoveryAccount, guardian); + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, votedAddress); + + // Increment the recovery counter, simulating a reset or progression in the recovery process + lsp11.cancelRecoveryProcess(recoveryAccount); + + // Check if the vote made before the increment is still considered valid + address currentVotedAddress = lsp11.getAddressVotedByGuardian( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + guardian + ); + + // Assert that the vote is no longer valid for the new counter + assertEq( + currentVotedAddress, + address(0), + "Vote should be invalidated after recovery counter increment" + ); + } + + function testDefaultRecoveryDelayIs40Minutes() public { + address testAccount = address(this); + + // Fetch the current recovery delay for the test account + uint256 currentRecoveryDelay = lsp11.getRecoveryDelayOf(testAccount); + + // Define the expected default recovery delay (40 minutes in seconds) + uint256 expectedDefaultRecoveryDelay = 40 * 60; + + // Assert that the current recovery delay is equal to the expected default delay + assertEq( + currentRecoveryDelay, + expectedDefaultRecoveryDelay, + "The default recovery delay should be 40 minutes" + ); + } + + function testRecoveryDisallowedWithNoGuardians() public { + address recoveryAccount = address(this); + + lsp11.setRecoveryDelay(address(this), 0); + + // Attempt recovery process with no guardians set + vm.expectRevert(); + vm.prank(address(0xABC)); + lsp11.recoverAccess(recoveryAccount, address(0xABC), 0x0, 0x0, ""); + } + + function testRecoveryDelaySetupAndBehavior() public { + address recoveryAccount = address(this); + uint256 recoveryDelay = 100; // Set a recovery delay + + // Set recovery delay + lsp11.setRecoveryDelay(recoveryAccount, recoveryDelay); + assertEq(lsp11.getRecoveryDelayOf(recoveryAccount), recoveryDelay); + + // Attempt recovery before delay period + vm.expectRevert(); + vm.prank(address(0xABC)); + lsp11.recoverAccess(recoveryAccount, address(0xABC), 0x0, 0x0, ""); + } + + function testDefaultRecoveryDelaySetupAndBehavior() public { + address recoveryAccount = address(this); + + assertEq(lsp11.getRecoveryDelayOf(recoveryAccount), 40 minutes); + + // Attempt recovery before delay period + vm.expectRevert(); + vm.prank(address(0xABC)); + lsp11.recoverAccess(recoveryAccount, address(0xABC), 0x0, 0x0, ""); + } + + function testCannotCommitForADifferentAddress() public { + address recoveryAccount = address(this); + + vm.expectRevert(); + vm.prank(address(0x123)); + lsp11.commitPlainSecret(recoveryAccount, address(0xABC), 0x0); + } + + function testBehaviorWithZeroGuardiansThreshold() public { + address recoveryAccount = address(this); + + lsp11.setRecoveryDelay(address(this), 0); + + assertEq(lsp11.getGuardiansThresholdOf(recoveryAccount), 0); + + // Attempt recovery process + vm.expectRevert(); + vm.prank(address(0xABC)); + lsp11.recoverAccess(recoveryAccount, address(0xABC), 0x0, 0x0, ""); + } + + function testCommitPlainSecretWithIncorrectRecoverer() public { + address recoveryAccount = address(this); + address fakeRecoverer = address(0xABC); // Fake recoverer + address realRecoverer = address(0xDEF); // Real recoverer + bytes32 secret = keccak256(abi.encode(recoveryAccount, "secret")); + bytes32 commitment = keccak256(abi.encode(realRecoverer, secret)); + + // Expect a revert due to incorrect recoverer + vm.expectRevert(); + lsp11.commitPlainSecret(recoveryAccount, fakeRecoverer, commitment); + } + + function testSuccessfulCommitPlainSecret() public { + address recoveryAccount = address(this); + address recoverer = address(0xABC); // Valid recoverer + bytes32 secret = keccak256(abi.encode(recoveryAccount, "secret")); + bytes32 commitment = keccak256(abi.encode(recoverer, secret)); + + // Commit plain secret + vm.prank(recoverer); // Simulate call from the recoverer + lsp11.commitPlainSecret(recoveryAccount, recoverer, commitment); + + // Validate that the commitment was correctly set + (bytes32 returnedCommitment, uint256 timestamp) = lsp11 + .getCommitmentInfoOf( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount), + recoverer + ); + assertEq(returnedCommitment, commitment); + assertEq(timestamp, block.timestamp); + } + + function testCommitPlainSecretRelayCallWithInvalidSignature() public { + address recoveryAccount = address(this); + address recoverer = address(0xABC); + bytes32 commitment = 0x0; // Example commitment + bytes memory invalidSignature = new bytes(1); // Invalid signature + + // Expect revert due to invalid signature + vm.expectRevert(); + lsp11.commitPlainSecretRelayCall( + recoveryAccount, + recoverer, + commitment, + invalidSignature + ); + } + + function testCommitPlainSecretRelayCallWithDifferentRecoveryCounter() + public + { + (address recoverer, uint256 recovererPK) = makeAddrAndKey("recoverer"); + + address recoveryAccount = address(this); + bytes32 commitment = 0x0; // Example commitment + uint256 wrongRecoveryCounter = lsp11.getRecoveryCounterOf( + recoveryAccount + ) + 1; // Incorrect recovery counter + + bytes memory encodedMessage = abi.encodePacked( + "lsp11", + recoveryAccount, + wrongRecoveryCounter, + block.chainid, + recoverer, + commitment + ); + bytes32 eip191Hash = ECDSA.toEthSignedMessageHash(encodedMessage); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(recovererPK, eip191Hash); // Signature with wrong recovery counter + bytes memory signature = toBytesSignature(v, r, s); + // Expect revert due to recovery counter mismatch + vm.expectRevert(); + lsp11.commitPlainSecretRelayCall( + recoveryAccount, + recoverer, + commitment, + signature + ); + } + + function testCommitPlainSecretRelayCallWithCorrectConfig() public { + (address recoverer, uint256 recovererPK) = makeAddrAndKey("recoverer"); + + address recoveryAccount = address(this); + uint256 recoveryCounter = lsp11.getRecoveryCounterOf(recoveryAccount); + + bytes memory encodedMessage = abi.encodePacked( + "lsp11", + recoveryAccount, + recoveryCounter, + block.chainid, + recoverer, + bytes32(0x0) + ); + bytes32 eip191Hash = ECDSA.toEthSignedMessageHash(encodedMessage); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(recovererPK, eip191Hash); // Signature with wrong recovery counter + bytes memory signature = toBytesSignature(v, r, s); + // Expect revert due to recovery counter mismatch + // vm.expectRevert(); + lsp11.commitPlainSecretRelayCall( + recoveryAccount, + recoverer, + bytes32(0x0), + signature + ); + + (bytes32 returnedCommitment, ) = lsp11.getCommitmentInfoOf( + recoveryAccount, + recoveryCounter, + recoverer + ); + + assertEq(returnedCommitment, bytes32(0x0)); + } + + function testCommitPlainSecretRelayCallWithDifferentSigner() public { + (address recoverer, ) = makeAddrAndKey("recoverer"); + (, uint256 notRecovererPK) = makeAddrAndKey("notrecoverer"); + + address recoveryAccount = address(this); + bytes32 commitment = 0x0; // Example commitment + uint256 recoveryCounter = lsp11.getRecoveryCounterOf(recoveryAccount); + + bytes memory encodedMessage = abi.encodePacked( + "lsp11", + recoveryAccount, + recoveryCounter, + block.chainid, + recoverer, + commitment + ); + bytes32 eip191Hash = ECDSA.toEthSignedMessageHash(encodedMessage); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(notRecovererPK, eip191Hash); // Signature with wrong recovery counter + bytes memory signature = toBytesSignature(v, r, s); + // Expect revert due to recovery counter mismatch + vm.expectRevert(); + lsp11.commitPlainSecretRelayCall( + recoveryAccount, + recoverer, + commitment, + signature + ); + } + + function testRecoveryFailsIfGuardianThresholdNotMet() public { + address recoveryAccount = address(this); + uint256 threshold = 2; + address guardian1 = address(0xABC); + address guardian2 = address(0x123); + + lsp11.addGuardian(recoveryAccount, guardian1); + lsp11.addGuardian(recoveryAccount, guardian2); + + lsp11.setRecoveryDelay(address(this), 0); + + lsp11.setGuardiansThreshold(recoveryAccount, threshold); + // Add guardian and cast a vote + vm.prank(guardian1); + lsp11.voteForRecoverer(recoveryAccount, guardian1, address(0xDEF)); + + // Attempt recovery with votes below threshold + vm.expectRevert(); + vm.prank(address(0xDEF)); + lsp11.recoverAccess(recoveryAccount, address(0xDEF), 0x0, 0x0, ""); + } + + function testRecoverySucceedsIfGuardianVotesEqualThreshold() public { + address recoveryAccount = address(this); + uint256 threshold = 1; + + // Add guardian and cast a vote + address guardian = address(0xABC); + lsp11.addGuardian(recoveryAccount, guardian); + + lsp11.setRecoveryDelay(address(this), 0); + + lsp11.setGuardiansThreshold(recoveryAccount, threshold); + + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, address(0xDEF)); + + // Attempt recovery with votes equal to threshold + vm.prank(address(0xDEF)); + lsp11.recoverAccess(recoveryAccount, address(0xDEF), 0x0, 0x0, ""); + // Check for successful recovery logic here + + // Check if the recovery counter is incremented + uint256 newRecoveryCounter = lsp11.getRecoveryCounterOf( + recoveryAccount + ); + assertEq(newRecoveryCounter, 1); + } + + function testRecoveryFailsIfThresholdIsZero() public { + address recoveryAccount = address(this); + + // Add guardian + address guardian = address(0xABC); + lsp11.addGuardian(recoveryAccount, guardian); + + lsp11.setRecoveryDelay(address(this), 0); + + // Attempt recovery with zero threshold + vm.expectRevert(); + vm.prank(address(0xDEF)); + lsp11.recoverAccess(recoveryAccount, address(0xDEF), 0x0, 0x0, ""); + } + + function testRecoveryFailWithWrongCommitment() public { + address recoveryAccount = address(this); + uint256 threshold = 1; + + bytes32 secret = keccak256( + abi.encode(recoveryAccount, keccak256(abi.encodePacked("secret"))) + ); + + bytes32 wrongSecret = keccak256( + abi.encode( + recoveryAccount, + keccak256(abi.encodePacked("wrongsecret")) + ) + ); + + lsp11.setRecoverySecretHash(recoveryAccount, secret); + + // Add guardian and cast a vote + address guardian = address(0xABC); + lsp11.addGuardian(recoveryAccount, guardian); + + lsp11.setRecoveryDelay(address(this), 0); + + lsp11.setGuardiansThreshold(recoveryAccount, threshold); + + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, address(0xDEF)); + + bytes32 commitment = keccak256(abi.encode(address(0xDEF), wrongSecret)); + + vm.prank(address(0xDEF)); + lsp11.commitPlainSecret(recoveryAccount, address(0xDEF), commitment); + + vm.warp(block.timestamp + 101); + // Attempt recovery with votes equal to threshold + + vm.expectRevert(); + vm.prank(address(0xDEF)); + lsp11.recoverAccess( + recoveryAccount, + address(0xDEF), + keccak256(abi.encodePacked("secret")), + 0x0, + "" + ); + } + + function testRecoveryFailWithRecoveryingTooEarlyAfterCommit() public { + address recoveryAccount = address(this); + uint256 threshold = 1; + + bytes32 secret = keccak256( + abi.encode(recoveryAccount, keccak256(abi.encodePacked("secret"))) + ); + + lsp11.setRecoverySecretHash(recoveryAccount, secret); + + // Add guardian and cast a vote + address guardian = address(0xABC); + lsp11.addGuardian(recoveryAccount, guardian); + + lsp11.setRecoveryDelay(address(this), 0); + + lsp11.setGuardiansThreshold(recoveryAccount, threshold); + + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, address(0xDEF)); + + bytes32 commitment = keccak256(abi.encode(address(0xDEF), secret)); + + vm.prank(address(0xDEF)); + lsp11.commitPlainSecret(recoveryAccount, address(0xDEF), commitment); + + // Attempt recovery with votes equal to threshold + vm.expectRevert(); + vm.prank(address(0xDEF)); + lsp11.recoverAccess( + recoveryAccount, + address(0xDEF), + keccak256(abi.encodePacked("secret")), + 0x0, + "" + ); + } + + function testRecoveryFailWithCorrectCommitmentWrongSecret() public { + address recoveryAccount = address(this); + uint256 threshold = 1; + + bytes32 secret = keccak256( + abi.encode(recoveryAccount, keccak256(abi.encodePacked("secret"))) + ); + + lsp11.setRecoverySecretHash(recoveryAccount, keccak256(hex"aabbddcc")); + + // Add guardian and cast a vote + address guardian = address(0xABC); + lsp11.addGuardian(recoveryAccount, guardian); + + lsp11.setRecoveryDelay(address(this), 0); + + lsp11.setGuardiansThreshold(recoveryAccount, threshold); + + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, address(0xDEF)); + + bytes32 commitment = keccak256(abi.encode(address(0xDEF), secret)); + + vm.prank(address(0xDEF)); + lsp11.commitPlainSecret(recoveryAccount, address(0xDEF), commitment); + + vm.warp(block.timestamp + 101); + // Attempt recovery with votes equal to threshold + vm.expectRevert(); + vm.prank(address(0xDEF)); + lsp11.recoverAccess( + recoveryAccount, + address(0xDEF), + keccak256(abi.encodePacked("secret")), + 0x0, + "" + ); + } + + function testRecoverySuccessfull() public { + address recoveryAccount = address(this); + uint256 threshold = 1; + + bytes32 secret = keccak256( + abi.encode(recoveryAccount, keccak256(abi.encodePacked("secret"))) + ); + + lsp11.setRecoverySecretHash(recoveryAccount, secret); + + // Add guardian and cast a vote + address guardian = address(0xABC); + lsp11.addGuardian(recoveryAccount, guardian); + + lsp11.setRecoveryDelay(address(this), 0); + + lsp11.setGuardiansThreshold(recoveryAccount, threshold); + + vm.prank(guardian); + lsp11.voteForRecoverer(recoveryAccount, guardian, address(0xDEF)); + + bytes32 commitment = keccak256(abi.encode(address(0xDEF), secret)); + + vm.prank(address(0xDEF)); + lsp11.commitPlainSecret(recoveryAccount, address(0xDEF), commitment); + + vm.warp(block.timestamp + 101); + // Attempt recovery with votes equal to threshold + vm.prank(address(0xDEF)); + lsp11.recoverAccess( + recoveryAccount, + address(0xDEF), + keccak256(abi.encodePacked("secret")), + 0x0, + "" + ); + + // Check if the recovery counter is incremented + uint256 newRecoveryCounter = lsp11.getRecoveryCounterOf( + recoveryAccount + ); + assertEq(newRecoveryCounter, 1); + } + + function testRecoverAccessRelayCallWithInvalidSignature() public { + address recoveryAccount = address(this); + address recoverer = address(0xABC); + bytes32 plainHash = 0x0; + bytes32 newSecretHash = 0x0; + bytes memory calldataToExecute = ""; + bytes memory invalidSignature = "0x1234"; // Example of an invalid signature + + // Expect revert due to invalid signature + vm.expectRevert(); + lsp11.recoverAccessRelayCall( + recoveryAccount, + recoverer, + plainHash, + newSecretHash, + calldataToExecute, + invalidSignature + ); + } + + function toBytesSignature( + uint8 v, + bytes32 r, + bytes32 s + ) internal pure returns (bytes memory signature) { + signature = new bytes(65); + + assembly { + mstore(add(signature, 32), r) + mstore(add(signature, 64), s) + mstore8(add(signature, 96), v) + } + } +} diff --git a/packages/lsp11-contracts/hardhat.config.ts b/packages/lsp11-contracts/hardhat.config.ts new file mode 100755 index 000000000..1f9e172b9 --- /dev/null +++ b/packages/lsp11-contracts/hardhat.config.ts @@ -0,0 +1,128 @@ +import { HardhatUserConfig } from 'hardhat/config'; +import { NetworkUserConfig } from 'hardhat/types'; +import { config as dotenvConfig } from 'dotenv'; +import { resolve } from 'path'; + +/** + * this package includes: + * - @nomiclabs/hardhat-ethers + * - @nomicfoundation/hardhat-chai-matchers + * - @nomicfoundation/hardhat-network-helpers + * - @nomiclabs/hardhat-etherscan + * - hardhat-gas-reporter (is this true? Why do we have it as a separate dependency?) + * - @typechain/hardhat + * - solidity-coverage + */ +import '@nomicfoundation/hardhat-toolbox'; + +// additional hardhat plugins +import 'hardhat-packager'; +import 'hardhat-contract-sizer'; +import 'hardhat-deploy'; + +// custom built hardhat plugins and scripts +// can be imported here (e.g: docs generation, gas benchmark, etc...) + +dotenvConfig({ path: resolve(__dirname, './.env') }); + +function getTestnetChainConfig(): NetworkUserConfig { + const config: NetworkUserConfig = { + live: true, + url: 'https://rpc.testnet.lukso.network', + chainId: 4201, + }; + + if (process.env.CONTRACT_VERIFICATION_TESTNET_PK !== undefined) { + config['accounts'] = [process.env.CONTRACT_VERIFICATION_TESTNET_PK]; + } + + return config; +} + +const config: HardhatUserConfig = { + defaultNetwork: 'hardhat', + networks: { + hardhat: { + live: false, + saveDeployments: false, + allowBlocksWithSameTimestamp: true, + }, + luksoTestnet: getTestnetChainConfig(), + }, + namedAccounts: { + owner: 0, + }, + // uncomment if the contracts from this LSP package must be deployed at deterministic + // // addresses across multiple chains + // deterministicDeployment: { + // luksoTestnet: { + // // Nick Factory. See https://github.com/Arachnid/deterministic-deployment-proxy + // factory: '0x4e59b44847b379578588920ca78fbf26c0b4956c', + // deployer: '0x3fab184622dc19b6109349b94811493bf2a45362', + // funding: '0x0000000000000000000000000000000000000000000000000000000000000000', + // signedTx: + // '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222', + // }, + // }, + etherscan: { + apiKey: 'no-api-key-needed', + customChains: [ + { + network: 'luksoTestnet', + chainId: 4201, + urls: { + apiURL: 'https://api.explorer.execution.testnet.lukso.network/api', + browserURL: 'https://explorer.execution.testnet.lukso.network/', + }, + }, + ], + }, + gasReporter: { + enabled: true, + currency: 'USD', + gasPrice: 21, + excludeContracts: ['Helpers/'], + src: './contracts', + showMethodSig: true, + }, + solidity: { + version: '0.8.17', + settings: { + optimizer: { + enabled: true, + /** + * Optimize for how many times you intend to run the code. + * Lower values will optimize more for initial deployment cost, higher + * values will optimize more for high-frequency usage. + * @see https://docs.soliditylang.org/en/v0.8.6/internals/optimizer.html#opcode-based-optimizer-module + */ + runs: 1000, + }, + outputSelection: { + '*': { + '*': ['storageLayout'], + }, + }, + }, + }, + packager: { + // What contracts to keep the artifacts and the bindings for. + contracts: [], + // Whether to include the TypeChain factories or not. + // If this is enabled, you need to run the TypeChain files through the TypeScript compiler before shipping to the registry. + includeFactories: true, + }, + paths: { + artifacts: 'artifacts', + tests: 'tests', + }, + typechain: { + outDir: 'types', + target: 'ethers-v6', + }, + mocha: { + timeout: 10000000, + }, +}; + +export default config; diff --git a/packages/lsp11-contracts/index.ts b/packages/lsp11-contracts/index.ts new file mode 100644 index 000000000..c94f80f84 --- /dev/null +++ b/packages/lsp11-contracts/index.ts @@ -0,0 +1 @@ +export * from './constants'; diff --git a/packages/lsp11-contracts/package.json b/packages/lsp11-contracts/package.json new file mode 100644 index 000000000..153bc43be --- /dev/null +++ b/packages/lsp11-contracts/package.json @@ -0,0 +1,51 @@ +{ + "name": "@lukso/lsp11-contracts", + "version": "0.0.1", + "description": "Package for the LSP11 Social Recovery standard", + "license": "Apache-2.0", + "author": "", + "main": "./dist/index.cjs", + "module": "./dist/index.mjs", + "typings": "./dist/index.d.ts", + "exports": { + ".": { + "require": "./dist/index.cjs", + "import": "./dist/index.mjs", + "types": "./dist/index.d.ts" + }, + "./artifacts/*": "./artifacts/*", + "./package.json": "./package.json" + }, + "files": [ + "contracts/**/*.sol", + "!contracts/Mocks/**/*.sol", + "artifacts/*.json", + "dist", + "./README.md" + ], + "keywords": [ + "LUKSO", + "LSP", + "Blockchain", + "Standards", + "Smart Contracts", + "Ethereum", + "EVM", + "Solidity" + ], + "scripts": { + "build": "hardhat compile --show-stack-traces", + "build:foundry": "forge build", + "build:js": "unbuild", + "clean": "hardhat clean && rm -Rf dist/", + "format": "prettier --write .", + "lint": "eslint . --ext .ts,.js", + "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", + "test:foundry": "FOUNDRY_PROFILE=lsp11 forge test --no-match-test Skip -vvv", + "test:coverage": "hardhat coverage" + }, + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" + } +} diff --git a/packages/lsp11-contracts/tsconfig.json b/packages/lsp11-contracts/tsconfig.json new file mode 100755 index 000000000..b7a34e03f --- /dev/null +++ b/packages/lsp11-contracts/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "tsconfig/contracts.json", + "include": ["**/*.ts"] +} From 17906ebc0c54351d326e84b027a835b1553fbf73 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Tue, 26 Mar 2024 12:48:16 +0200 Subject: [PATCH 02/94] Add suggested changes to LSP11 --- ...lRecovery.sol => ILSP11SocialRecovery.sol} | 55 +- .../lsp11-contracts/contracts/LSP11Errors.sol | 55 +- ...alRecovery.sol => LSP11SocialRecovery.sol} | 524 +++++++++++++----- .../foundry/LSP11UniversalRecovery.t.sol | 392 ++++++++----- packages/lsp11-contracts/package.json | 1 + 5 files changed, 715 insertions(+), 312 deletions(-) rename packages/lsp11-contracts/contracts/{ILSP11UniversalSocialRecovery.sol => ILSP11SocialRecovery.sol} (89%) rename packages/lsp11-contracts/contracts/{LSP11UniversalSocialRecovery.sol => LSP11SocialRecovery.sol} (62%) diff --git a/packages/lsp11-contracts/contracts/ILSP11UniversalSocialRecovery.sol b/packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol similarity index 89% rename from packages/lsp11-contracts/contracts/ILSP11UniversalSocialRecovery.sol rename to packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol index 3049002c9..ebe1bfe68 100644 --- a/packages/lsp11-contracts/contracts/ILSP11UniversalSocialRecovery.sol +++ b/packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol @@ -2,12 +2,10 @@ pragma solidity ^0.8.9; /** - * @title ILSP11UniversalSocialRecovery + * @title ILSP11SocialRecovery * @notice Contract providing a mechanism for account recovery through a designated set of guardians. - * @dev Guardians can be regular Ethereum addresses or secret guardians represented by a salted hash of their address. - * The contract allows for voting mechanisms where guardians can vote for a recovery address. Once the threshold is met, the recovery process can be initiated. */ -interface ILSP11UniversalSocialRecovery { +interface ILSP11SocialRecovery { /** * @notice Event emitted when a guardian is added for an account. * @param account The account for which the guardian is being added. @@ -39,7 +37,7 @@ interface ILSP11UniversalSocialRecovery { /** * @notice Event emitted when the recovery delay associated with an account is changed. * @param account The account for which the recovery delay is being changed. - * @param recoveryDelay The new recovery delay for the account. + * @param recoveryDelay The new recovery delay for the account in seconds. */ event RecoveryDelayChanged(address account, uint256 recoveryDelay); @@ -65,13 +63,13 @@ interface ILSP11UniversalSocialRecovery { event RecoveryCancelled(address account, uint256 previousRecoveryCounter); /** - * @notice Event emitted when an address commits a plain secret to recover an account. - * @param account The account for which the plain secret is being committed. + * @notice Event emitted when an address commits a secret hash to recover an account. + * @param account The account for which the secret hash is being committed. * @param recoveryCounter The recovery counter at the time of the commitment. * @param committedBy The address who made the commitment. - * @param commitment The commitment associated with the plain secret. + * @param commitment The commitment associated with the secret hash. */ - event PlainSecretCommitted( + event SecretHashCommitted( address account, uint256 recoveryCounter, address committedBy, @@ -83,11 +81,13 @@ interface ILSP11UniversalSocialRecovery { * @param account The account for which the recovery process was successful. * @param recoveryCounter The recovery counter at the time of successful recovery. * @param guardianVotedAddress The address voted by guardians for the successful recovery. + * @param calldataExecuted The calldata executed on the account recovered. */ event RecoveryProcessSuccessful( address account, uint256 recoveryCounter, - address guardianVotedAddress + address guardianVotedAddress, + bytes calldataExecuted ); /** @@ -131,7 +131,9 @@ interface ILSP11UniversalSocialRecovery { * @param account The account for which the recovery delay is queried. * @return The recovery delay associated with the given account. */ - function getRecoveryDelayOf(address account) external view returns (uint256); + function getRecoveryDelayOf( + address account + ) external view returns (uint256); /** * @notice Get the successful recovery counter for a specific account. @@ -149,7 +151,7 @@ interface ILSP11UniversalSocialRecovery { * @param guardian The guardian whose vote is queried. * @return The address voted for recovery by the specified guardian for the given account and recovery counter. */ - function getAddressVotedByGuardian( + function getVotedAddressByGuardian( address account, uint256 recoveryCounter, address guardian @@ -245,10 +247,7 @@ interface ILSP11UniversalSocialRecovery { * @dev This function allows the account to set a new recovery delay for their account. * Emits a `RecoveryDelayChanged` event upon successful secret hash modification. */ - function setRecoveryDelay( - address account, - uint256 recoveryDelay - ) external; + function setRecoveryDelay(address account, uint256 recoveryDelay) external; /** * @notice Allows a guardian to vote for an address to be recovered. @@ -258,29 +257,29 @@ interface ILSP11UniversalSocialRecovery { * If the guardian has already voted for the provided address, the function will revert. * Emits a `GuardianVotedFor` event upon successful vote. */ - function voteForRecoverer( - address guardian, + function voteForRecovery( address account, + address guardian, address guardianVotedAddress ) external; /** - * @notice Commits a plain secret for an address to be recovered. - * @param account The account for which the plain secret is being committed. - * @param commitment The commitment associated with the plain secret. - * @dev This function allows an address to commit a plain secret for the recovery process. + * @notice Commits a secret hash for an address to be recovered. + * @param account The account for which the secret hash is being committed. + * @param commitment The commitment associated with the secret hash. + * @dev This function allows an address to commit a secret hash for the recovery process. * If the guardian has not voted for the provided address, the function will revert. */ - function commitPlainSecret( - address recoverer, + function commitToRecover( address account, + address votedAddress, bytes32 commitment ) external; /** * @notice Initiates the account recovery process. * @param account The account for which the recovery is being initiated. - * @param plainHash The plain hash associated with the recovery process. + * @param secretHash The hash associated with the recovery process. * @param newSecretHash The new secret hash to be set for the account. * @param calldataToExecute The calldata to be executed during the recovery process. * @dev This function initiates the account recovery process and executes the provided calldata. @@ -288,12 +287,12 @@ interface ILSP11UniversalSocialRecovery { * Emits a `RecoveryProcessSuccessful` event upon successful recovery process. */ function recoverAccess( - address recoverer, + address votedAddress, address account, - bytes32 plainHash, + bytes32 secretHash, bytes32 newSecretHash, bytes calldata calldataToExecute - ) external payable; + ) external payable returns (bytes memory); /** * @notice Cancels the ongoing recovery process for the account by increasing the recovery counter. diff --git a/packages/lsp11-contracts/contracts/LSP11Errors.sol b/packages/lsp11-contracts/contracts/LSP11Errors.sol index bdb9a5e99..c8a1ec7c0 100644 --- a/packages/lsp11-contracts/contracts/LSP11Errors.sol +++ b/packages/lsp11-contracts/contracts/LSP11Errors.sol @@ -37,10 +37,10 @@ error BatchCallsFailed(uint256 iteration); /** * @dev The caller is not the expected recoverer. - * @param recoverer Expected recoverer address. + * @param votedAddress Expected voted address. * @param caller Address of the caller. */ -error CallerIsNotRecoverer(address recoverer, address caller); +error CallerIsNotVotedAddress(address votedAddress, address caller); /** * @dev The specified threshold exceeds the number of guardians. @@ -129,6 +129,53 @@ error InvalidSecretHash(address account, bytes32 secretHash); */ error CannotRecoverAfterDirectCommit(address account, address committer); -error InvalidSignature(); +/** + * @notice The relay call failed because an invalid nonce was provided for the address `signer` that signed the execute relay call. + * Invalid nonce: `invalidNonce`, signature of signer: `signature`. + * + * @dev Reverts when the `signer` address retrieved from the `signature` has an invalid nonce: `invalidNonce`. + * + * @param signer The address of the signer. + * @param invalidNonce The nonce retrieved for the `signer` address. + * @param signature The signature used to retrieve the `signer` address. + */ +error InvalidRelayNonce(address signer, uint256 invalidNonce, bytes signature); + +/** + * @dev Thrown when an attempt to recover is made before a specified delay period. + * @param account The account address. + * @param delay The delay of the account. + */ +error CannotRecoverBeforeDelay(address account, uint256 delay); -error CannotRecoverBeforeDelay(address, uint256); +/** + * @dev Thrown when the signer is not the voted address for a particular operation. + * @param votedAddress The address passed as a parameter as voted address. + * @param recoveredAddress The recovered address from the signature. + */ +error SignerIsNotVotedAddress(address votedAddress, address recoveredAddress); + +/** + * @dev Thrown when a relay call is not supported. + * @param functionSelector The unsupported function selector. + */ +error RelayCallNotSupported(bytes4 functionSelector); + +/** + * @dev Thrown when the total value sent in an LSP11 batch call is insufficient. + * @param totalValues The total value required. + * @param msgValue The value actually sent in the message. + */ +error LSP11BatchInsufficientValueSent(uint256 totalValues, uint256 msgValue); + +/** + * @dev Thrown when the total value sent in an LSP11 batch call exceeds the required amount. + * @param totalValues The total value required. + * @param msgValue The value actually sent in the message. + */ +error LSP11BatchExcessiveValueSent(uint256 totalValues, uint256 msgValue); + +/** + * @dev Thrown when there's a length mismatch in batch execute relay call parameters. + */ +error BatchExecuteRelayCallParamsLengthMismatch(); diff --git a/packages/lsp11-contracts/contracts/LSP11UniversalSocialRecovery.sol b/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol similarity index 62% rename from packages/lsp11-contracts/contracts/LSP11UniversalSocialRecovery.sol rename to packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol index b74b0ec5c..85d762c32 100644 --- a/packages/lsp11-contracts/contracts/LSP11UniversalSocialRecovery.sol +++ b/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol @@ -2,9 +2,7 @@ pragma solidity ^0.8.9; // Interfaces -import { - ILSP11UniversalSocialRecovery -} from "./ILSP11UniversalSocialRecovery.sol"; +import {ILSP11SocialRecovery} from "./ILSP11SocialRecovery.sol"; // Libraries import { @@ -12,7 +10,12 @@ import { } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; - +import { + ILSP25ExecuteRelayCall +} from "@lukso/lsp25-contracts/contracts/ILSP25ExecuteRelayCall.sol"; +import { + LSP25MultiChannelNonce +} from "@lukso/lsp25-contracts/contracts/LSP25MultiChannelNonce.sol"; // Constants // solhint-disable no-global-import import "./LSP11Constants.sol"; @@ -22,24 +25,29 @@ import "./LSP11Constants.sol"; import "./LSP11Errors.sol"; /** - * @title LSP11UniversalSocialRecovery + * @title LSP11SocialRecovery * @notice Contract providing a mechanism for account recovery through a designated set of guardians. - * @dev Guardians can be regular Ethereum addresses or secret guardians represented by a salted hash of their address. - * The contract allows for voting mechanisms where guardians can vote for a recovery address. Once the threshold is met, the recovery process can be initiated. */ -contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { +contract LSP11SocialRecovery is + ILSP11SocialRecovery, + ILSP25ExecuteRelayCall, + LSP25MultiChannelNonce +{ using EnumerableSet for EnumerableSet.AddressSet; + using ECDSA for *; - /// @notice The default recovery delay set to 40 minutes. - uint256 constant DEFAULT_RECOVERY_DELAY = 40 minutes; + /// @dev The default recovery delay set to 40 minutes. + uint256 private constant _DEFAULT_RECOVERY_DELAY = 40 minutes; /** * @dev Stores the hash of a commitment along with a timestamp. + * The commitment is the keccak256 hash of the address to be recovered and + * the secret hash abi-encoded. */ struct CommitmentInfo { - /// @notice The keccak256 hash of the commitment. + /// @dev The keccak256 hash of the commitment. bytes32 commitment; - /// @notice The timestamp when the commitment was made. + /// @dev The timestamp when the commitment was made. uint256 timestamp; } @@ -74,7 +82,7 @@ contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { mapping(address => uint256) internal _recoveryCounterOf; /** - * @dev This mapping stores the address voted for recovery by guardians for each account in a specific recovery counter. + * @dev This mapping stores the voted address for recovery by guardians for each account in a specific recovery counter. */ mapping(address => mapping(uint256 => mapping(address => address))) internal _guardiansVotedFor; @@ -161,6 +169,82 @@ contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { } } + /** + * @inheritdoc ILSP25ExecuteRelayCall + */ + function executeRelayCall( + bytes calldata signature, + uint256 nonce, + uint256 validityTimestamps, + bytes calldata payload + ) public payable returns (bytes memory) { + return + _executeRelayCall( + signature, + nonce, + validityTimestamps, + msg.value, + payload + ); + } + + /** + * @inheritdoc ILSP25ExecuteRelayCall + */ + function executeRelayCallBatch( + bytes[] calldata signatures, + uint256[] calldata nonces, + uint256[] calldata validityTimestamps, + uint256[] calldata values, + bytes[] calldata payloads + ) public payable virtual override returns (bytes[] memory) { + if ( + signatures.length != nonces.length || + nonces.length != validityTimestamps.length || + validityTimestamps.length != values.length || + values.length != payloads.length + ) { + revert BatchExecuteRelayCallParamsLengthMismatch(); + } + + bytes[] memory results = new bytes[](payloads.length); + uint256 totalValues; + + for (uint256 ii; ii < payloads.length; ) { + if ((totalValues += values[ii]) > msg.value) { + revert LSP11BatchInsufficientValueSent(totalValues, msg.value); + } + + results[ii] = _executeRelayCall( + signatures[ii], + nonces[ii], + validityTimestamps[ii], + values[ii], + payloads[ii] + ); + + unchecked { + ++ii; + } + } + + if (totalValues < msg.value) { + revert LSP11BatchExcessiveValueSent(totalValues, msg.value); + } + + return results; + } + + /** + * @inheritdoc ILSP25ExecuteRelayCall + */ + function getNonce( + address from, + uint128 channelId + ) external view override returns (uint256) { + return _getNonce(from, channelId); + } + /** * @notice Get the array of addresses representing guardians associated with an account. * @param account The account for which guardians are queried. @@ -211,7 +295,7 @@ contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { * @return The recovery delay associated with the given account. */ function getRecoveryDelayOf(address account) public view returns (uint256) { - if (!_defaultRecoveryRemoved[account]) return DEFAULT_RECOVERY_DELAY; + if (!_defaultRecoveryRemoved[account]) return _DEFAULT_RECOVERY_DELAY; return _recoveryDelayOf[account]; } @@ -233,7 +317,7 @@ contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { * @param guardian The guardian whose vote is queried. * @return The address voted for recovery by the specified guardian for the given account and recovery counter. */ - function getAddressVotedByGuardian( + function getVotedAddressByGuardian( address account, uint256 recoveryCounter, address guardian @@ -366,7 +450,8 @@ contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { * @param account The address of the account to which the recovery secret hash will be set. * @param newRecoverSecretHash The new recovery secret hash to be set for the calling account. * @dev This function allows the account holder to set a new recovery secret hash for their account. - * If the provided secret hash is zero, the function will revert. + * In this implementation, the secret hash MUST be set salted with the account address, using + * keccak256(abi.encode(account, secretHash)). * Emits a `SecretHashChanged` event upon successful secret hash modification. */ function setRecoverySecretHash( @@ -380,7 +465,7 @@ contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { /** * @notice Sets the recovery delay for the calling account. * @param account The address of the account to which the recovery delay will be set. - * @param recoveryDelay The new recovery delay to be set for the calling account. + * @param recoveryDelay The new recovery delay in seconds to be set for the calling account. * @dev This function allows the account to set a new recovery delay for their account. * Emits a `RecoveryDelayChanged` event upon successful secret hash modification. */ @@ -397,14 +482,14 @@ contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { } /** - * @notice Allows a guardian to vote for an address to be recovered. + * @notice Allows a guardian to vote for an address for a recovery process * @param account The account for which the vote is being cast. * @param guardianVotedAddress The address voted by the guardian for recovery. * @dev This function allows a guardian to vote for an address to be recovered in a recovery process. * If the guardian has already voted for the provided address, the function will revert. * Emits a `GuardianVotedFor` event upon successful vote. */ - function voteForRecoverer( + function voteForRecovery( address account, address guardian, address guardianVotedAddress @@ -484,212 +569,356 @@ contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { } /** - * @notice Commits a plain secret for an address to be recovered. - * @param account The account for which the plain secret is being committed. - * @param commitment The commitment associated with the plain secret. - * @dev This function allows an address to commit a plain secret for the recovery process. + * @notice Commits a secret hash for an address to be recovered. + * @param account The account for which the secret hash is being committed. + * @param commitment The commitment associated with the secret hash. + * @dev This function allows an address to commit a secret hash for the recovery process. * If the guardian has not voted for the provided address, the function will revert. + * The commitment in this implementation is `keccak256(abi.encode(votedAddress, secretHash)`. */ - function commitPlainSecret( + function commitToRecover( address account, - address recoverer, + address votedAddress, bytes32 commitment ) public { - if (recoverer != msg.sender) - revert CallerIsNotRecoverer(recoverer, msg.sender); + if (votedAddress != msg.sender) + revert CallerIsNotVotedAddress(votedAddress, msg.sender); uint256 recoveryCounter = _recoveryCounterOf[account]; - CommitmentInfo memory _commitment = CommitmentInfo( - commitment, - block.timestamp - ); - _commitmentInfoOf[account][recoveryCounter][recoverer] = _commitment; - - emit PlainSecretCommitted( - account, - recoveryCounter, - recoverer, - commitment - ); + _commitToRecover(account, recoveryCounter, votedAddress, commitment); } /** - * @notice Commits a plain secret for an address to be recovered. - * @param account The account for which the plain secret is being committed. - * @param commitment The commitment associated with the plain secret. - * @dev This function allows an address to commit a plain secret for the recovery process. - * If the guardian has not voted for the provided address, the function will revert. + * @notice Initiates the account recovery process. + * @param account The account for which the recovery is being initiated. + * @param secretHash The secret hash associated with the recovery process unsalted with the account address. + * @param newSecretHash The new secret hash to be set for the account. + * @param calldataToExecute The calldata to be executed during the recovery process. + * @dev This function initiates the account recovery process and executes the provided calldata. + * If the new secret hash is zero or the number of votes is less than the guardian threshold, the function will revert. + * Emits a `RecoveryProcessSuccessful` event upon successful recovery process. */ - function commitPlainSecretRelayCall( + function recoverAccess( address account, - address recoverer, - bytes32 commitment, - bytes memory signature - ) public { - // retreive current recovery counter - uint256 accountRecoveryCounter = _recoveryCounterOf[account]; - - bytes memory lsp11EncodedMessage = abi.encodePacked( - "lsp11", - account, - accountRecoveryCounter, - block.chainid, - recoverer, - commitment - ); - - bytes32 eip191Hash = ECDSA.toEthSignedMessageHash(lsp11EncodedMessage); - - address recoveredAddress = ECDSA.recover(eip191Hash, signature); + address votedAddress, + bytes32 secretHash, + bytes32 newSecretHash, + bytes calldata calldataToExecute + ) public payable returns (bytes memory) { + if (votedAddress != msg.sender) + revert CallerIsNotVotedAddress(votedAddress, msg.sender); - if (recoverer != recoveredAddress) revert InvalidSignature(); + // retrieve current recovery counter + uint256 accountRecoveryCounter = _recoveryCounterOf[account]; - uint256 recoveryCounter = _recoveryCounterOf[account]; + return + _recoverAccess( + account, + accountRecoveryCounter, + votedAddress, + secretHash, + newSecretHash, + msg.value, + calldataToExecute + ); + } + /** + * @dev Internal function to commit a new recovery process. It stores a new commitment for a recovery process. + * @param account The account for which recovery is being committed. + * @param recoveryCounter The current recovery counter for the account. + * @param votedAddress The address that is being proposed for recovery by the guardian. + * @param commitment The commitment hash representing the recovery process. + */ + function _commitToRecover( + address account, + uint256 recoveryCounter, + address votedAddress, + bytes32 commitment + ) internal { CommitmentInfo memory _commitment = CommitmentInfo( commitment, block.timestamp ); - _commitmentInfoOf[account][recoveryCounter][recoverer] = _commitment; + _commitmentInfoOf[account][recoveryCounter][votedAddress] = _commitment; - emit PlainSecretCommitted( + emit SecretHashCommitted( account, recoveryCounter, - recoverer, + votedAddress, commitment ); } /** - * @notice Initiates the account recovery process. - * @param account The account for which the recovery is being initiated. - * @param plainHash The plain hash associated with the recovery process. - * @param newSecretHash The new secret hash to be set for the account. - * @param calldataToExecute The calldata to be executed during the recovery process. - * @dev This function initiates the account recovery process and executes the provided calldata. - * If the new secret hash is zero or the number of votes is less than the guardian threshold, the function will revert. - * Emits a `RecoveryProcessSuccessful` event upon successful recovery process. + * @dev Internal function to execute relay calls for `commitToRecover` and `recoverAccess`. + * @param signature The signature of the relay call. + * @param nonce The nonce for replay protection. + * @param validityTimestamps Timestamps defining the validity period of the call. + * @param msgValue The message value (in ether). + * @param payload The payload of the call. + * @return result Returns the bytes memory result of the executed call. + */ + function _executeRelayCall( + bytes calldata signature, + uint256 nonce, + uint256 validityTimestamps, + uint256 msgValue, + bytes calldata payload + ) internal returns (bytes memory result) { + bytes4 functionSelector = bytes4(payload); + if (functionSelector == this.commitToRecover.selector) { + _verifyCanCommitToRecover( + signature, + nonce, + validityTimestamps, + msgValue, + payload + ); + } else if (functionSelector == this.recoverAccess.selector) { + return + _verifyCanRecoverAccess( + signature, + nonce, + validityTimestamps, + msgValue, + payload + ); + } else { + revert RelayCallNotSupported(functionSelector); + } + } + + /** + * @dev Internal function to verify the signature and execute the `commitToRecover` function. + * @param signature The signature to verify. + * @param nonce The nonce used for replay protection. + * @param validityTimestamps Timestamps for the validity of the signature. + * @param msgValue The message value. + * @param commitToRecoverPayload The payload specific to the `commitToRecover` function. */ - function recoverAccess( - address account, - address recoverer, - bytes32 plainHash, - bytes32 newSecretHash, - bytes calldata calldataToExecute - ) public payable { - if (recoverer != msg.sender) - revert CallerIsNotRecoverer(recoverer, msg.sender); + function _verifyCanCommitToRecover( + bytes memory signature, + uint256 nonce, + uint256 validityTimestamps, + uint256 msgValue, + bytes calldata commitToRecoverPayload + ) internal { + (address account, address votedAddress, bytes32 commitment) = abi + .decode(commitToRecoverPayload[4:], (address, address, bytes32)); - // retreive current recovery counter - uint256 accountRecoveryCounter = _recoveryCounterOf[account]; + uint256 recoveryCounter = _recoveryCounterOf[account]; - _recoverAccess( - account, - accountRecoveryCounter, - recoverer, - plainHash, - newSecretHash, - calldataToExecute + _sigChecks( + signature, + nonce, + validityTimestamps, + msgValue, + recoveryCounter, + commitToRecoverPayload, + votedAddress ); + + _commitToRecover(account, recoveryCounter, votedAddress, commitment); } - function recoverAccessRelayCall( - address account, - address recoverer, - bytes32 plainHash, - bytes32 newSecretHash, - bytes calldata calldataToExecute, - bytes calldata signature - ) public payable { - // retreive current recovery counter - uint256 accountRecoveryCounter = _recoveryCounterOf[account]; + /** + * @dev Internal function to verify the signature and execute the `recoverAccess` function. + * @param signature The signature to verify. + * @param nonce The nonce used for replay protection. + * @param validityTimestamp The timestamp for the validity of the signature. + * @param msgValue The message value. + * @param recoverAccessPayload The payload specific to the `recoverAccess` function. + */ + function _verifyCanRecoverAccess( + bytes memory signature, + uint256 nonce, + uint256 validityTimestamp, + uint256 msgValue, + bytes calldata recoverAccessPayload + ) internal returns (bytes memory) { + ( + address account, + address votedAddress, + bytes32 secretHash, + bytes32 newSecretHash, + bytes memory calldataToExecute + ) = abi.decode( + recoverAccessPayload[4:], + (address, address, bytes32, bytes32, bytes) + ); - bytes memory lsp11EncodedMessage = abi.encodePacked( - "lsp11", - account, - accountRecoveryCounter, - block.chainid, - msg.value, - recoverer, - plainHash, - newSecretHash, - calldataToExecute + uint256 recoveryCounter = _recoveryCounterOf[account]; + + _sigChecks( + signature, + nonce, + validityTimestamp, + msgValue, + recoveryCounter, + recoverAccessPayload, + votedAddress + ); + + return + _recoverAccess( + account, + recoveryCounter, + votedAddress, + secretHash, + newSecretHash, + msgValue, + calldataToExecute + ); + } + + /** + * @dev Internal function to perform signature and nonce checks, and to verify the validity timestamp. + * @param signature The signature to check. + * @param nonce The nonce for replay protection. + * @param validityTimestamp The validity timestamp for the signature. + * @param msgValue The message value. + * @param recoveryCounter The recovery counter. + * @param payload The payload of the call. + * @param votedAddress The address voted for recovery. + */ + function _sigChecks( + bytes memory signature, + uint256 nonce, + uint256 validityTimestamp, + uint256 msgValue, + uint256 recoveryCounter, + bytes memory payload, + address votedAddress + ) internal { + address recoveredAddress = _recoverSignerFromLSP11Signature( + signature, + nonce, + validityTimestamp, + msgValue, + recoveryCounter, + payload ); - bytes32 eip191Hash = ECDSA.toEthSignedMessageHash(lsp11EncodedMessage); + if (!_isValidNonce(recoveredAddress, nonce)) { + revert InvalidRelayNonce(recoveredAddress, nonce, signature); + } - address recoveredAddress = ECDSA.recover(eip191Hash, signature); + // increase nonce after successful verification + _nonceStore[recoveredAddress][nonce >> 128]++; - if (recoverer != recoveredAddress) revert InvalidSignature(); + LSP25MultiChannelNonce._verifyValidityTimestamps(validityTimestamp); - _recoverAccess( - account, - accountRecoveryCounter, - recoverer, - plainHash, - newSecretHash, - calldataToExecute + if (votedAddress != recoveredAddress) + revert SignerIsNotVotedAddress(votedAddress, recoveredAddress); + } + + /** + * @dev Internal function to recover the signer from a LSP11 signature. + * @param signature The signature to recover from. + * @param nonce The nonce for the signature. + * @param validityTimestamps The validity timestamps for the signature. + * @param msgValue The message value. + * @param recoveryCounter The recovery counter. + * @param callData The call data. + * @return The address of the signer. + */ + function _recoverSignerFromLSP11Signature( + bytes memory signature, + uint256 nonce, + uint256 validityTimestamps, + uint256 msgValue, + uint256 recoveryCounter, + bytes memory callData + ) internal view returns (address) { + bytes memory lsp25EncodedMessage = abi.encodePacked( + LSP11_VERSION, + block.chainid, + nonce, + validityTimestamps, + msgValue, + recoveryCounter, + callData ); + + bytes32 eip191Hash = address(this).toDataWithIntendedValidatorHash( + lsp25EncodedMessage + ); + + return eip191Hash.recover(signature); } + /** + * @dev Internal function to recover access to an account. + * @param account The account to recover. + * @param recoveryCounter The recovery counter. + * @param votedAddress The address voted by the guardian. + * @param secretHash The hash of the secret. + * @param newSecretHash The new secret hash for the account. + * @param msgValue The message value. + * @param calldataToExecute The call data to be executed as part of the recovery. + */ function _recoverAccess( address account, uint256 recoveryCounter, - address recoverer, - bytes32 plainHash, + address votedAddress, + bytes32 secretHash, bytes32 newSecretHash, - bytes calldata calldataToExecute - ) internal { + uint256 msgValue, + bytes memory calldataToExecute + ) internal returns (bytes memory) { if ( block.timestamp < _firstRecoveryTimestamp[account][recoveryCounter] + getRecoveryDelayOf(account) ) revert CannotRecoverBeforeDelay(account, getRecoveryDelayOf(account)); - // retreive current secret hash + // retrieve current secret hash bytes32 _secretHash = _secretHashOf[account]; - // retreive current guardians threshold + // retrieve current guardians threshold uint256 guardiansThresholdOfAccount = _guardiansThresholdOf[account]; // if there is no guardians, disallow recovering if (guardiansThresholdOfAccount == 0) revert AccountNotSetupYet(); - // retreive number of votes caller have + // retrieve number of votes caller have uint256 votesOfGuardianVotedAddress_ = _votesOfguardianVotedAddress[ account - ][recoveryCounter][recoverer]; + ][recoveryCounter][votedAddress]; // votes validation // if the threshold is 0, and the caller does not have votes // will rely on the hash if (votesOfGuardianVotedAddress_ < guardiansThresholdOfAccount) - revert CallerVotesHaveNotReachedThreshold(account, recoverer); + revert CallerVotesHaveNotReachedThreshold(account, votedAddress); // if there is a secret require a commitment first if (_secretHash != bytes32(0)) { - bytes32 saltedHash = keccak256(abi.encode(account, plainHash)); - bytes32 commitment = keccak256(abi.encode(recoverer, saltedHash)); + bytes32 saltedHash = keccak256(abi.encode(account, secretHash)); + bytes32 commitment = keccak256( + abi.encode(votedAddress, saltedHash) + ); // Check that the commitment is valid if ( commitment != - _commitmentInfoOf[account][recoveryCounter][recoverer] + _commitmentInfoOf[account][recoveryCounter][votedAddress] .commitment - ) revert InvalidCommitment(account, recoverer); + ) revert InvalidCommitment(account, votedAddress); // Check that the commitment is not too early if ( - _commitmentInfoOf[account][recoveryCounter][recoverer] + _commitmentInfoOf[account][recoveryCounter][votedAddress] .timestamp + - 100 > + 60 > block.timestamp - ) revert CannotRecoverAfterDirectCommit(account, recoverer); + ) revert CannotRecoverAfterDirectCommit(account, votedAddress); // Check that the secret hash is valid if (saltedHash != _secretHash) - revert InvalidSecretHash(account, plainHash); + revert InvalidSecretHash(account, secretHash); } _recoveryCounterOf[account]++; @@ -697,7 +926,7 @@ contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { emit SecretHashChanged(account, newSecretHash); (bool success, bytes memory returnedData) = account.call{ - value: msg.value + value: msgValue }(calldataToExecute); Address.verifyCallResult( @@ -706,6 +935,13 @@ contract LSP11UniversalSocialRecovery is ILSP11UniversalSocialRecovery { "LSP11: Failed to call function on account" ); - emit RecoveryProcessSuccessful(account, recoveryCounter, recoverer); + emit RecoveryProcessSuccessful( + account, + recoveryCounter, + votedAddress, + calldataToExecute + ); + + return returnedData; } } diff --git a/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol b/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol index 39cf7db4c..8a981c746 100644 --- a/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol +++ b/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol @@ -7,19 +7,18 @@ import "forge-std/console.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; -import { - LSP11UniversalSocialRecovery -} from "../contracts/LSP11UniversalSocialRecovery.sol"; +import {LSP11SocialRecovery} from "../contracts/LSP11SocialRecovery.sol"; +import "../contracts/LSP11Errors.sol"; contract LSP11AccountFunctionalities is Test { - LSP11UniversalSocialRecovery public lsp11; + LSP11SocialRecovery public lsp11; fallback() external payable {} receive() external payable {} function setUp() public { - lsp11 = new LSP11UniversalSocialRecovery(); + lsp11 = new LSP11SocialRecovery(); } function testAddGuardian() public { @@ -246,28 +245,28 @@ contract LSP11AccountFunctionalities is Test { // Prepare calldata for addGuardian bytes memory addGuardianData = abi.encodeWithSelector( - LSP11UniversalSocialRecovery.addGuardian.selector, + LSP11SocialRecovery.addGuardian.selector, address(this), newGuardian ); // Prepare calldata for setGuardiansThreshold bytes memory setThresholdData = abi.encodeWithSelector( - LSP11UniversalSocialRecovery.setGuardiansThreshold.selector, + LSP11SocialRecovery.setGuardiansThreshold.selector, address(this), newThreshold ); // Prepare calldata for setRecoverySecretHash bytes memory setSecretData = abi.encodeWithSelector( - LSP11UniversalSocialRecovery.setRecoverySecretHash.selector, + LSP11SocialRecovery.setRecoverySecretHash.selector, address(this), newSecretHash ); // Prepare calldata for setRecoveryDelay bytes memory setDelayData = abi.encodeWithSelector( - LSP11UniversalSocialRecovery.setRecoveryDelay.selector, + LSP11SocialRecovery.setRecoveryDelay.selector, address(this), newRecoveryDelay ); @@ -299,28 +298,28 @@ contract LSP11AccountFunctionalities is Test { // Prepare calldata for addGuardian bytes memory addGuardianData = abi.encodeWithSelector( - LSP11UniversalSocialRecovery.addGuardian.selector, + LSP11SocialRecovery.addGuardian.selector, address(this), newGuardian ); // Prepare calldata for setGuardiansThreshold bytes memory setThresholdData = abi.encodeWithSelector( - LSP11UniversalSocialRecovery.setGuardiansThreshold.selector, + LSP11SocialRecovery.setGuardiansThreshold.selector, address(this), newThreshold ); // Prepare calldata for setRecoverySecretHash bytes memory setSecretData = abi.encodeWithSelector( - LSP11UniversalSocialRecovery.setRecoverySecretHash.selector, + LSP11SocialRecovery.setRecoverySecretHash.selector, address(this), newSecretHash ); // Prepare calldata for setRecoveryDelay bytes memory setDelayData = abi.encodeWithSelector( - LSP11UniversalSocialRecovery.setRecoveryDelay.selector, + LSP11SocialRecovery.setRecoveryDelay.selector, address(this), newRecoveryDelay ); @@ -347,7 +346,7 @@ contract LSP11AccountFunctionalities is Test { // Expect a revert when nonGuardian tries to vote vm.expectRevert(); - lsp11.voteForRecoverer( + lsp11.voteForRecovery( recoveryAccount, nonGuardian, guardianVotedAddress @@ -364,10 +363,10 @@ contract LSP11AccountFunctionalities is Test { // Simulate the guardian casting a vote vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, guardianVotedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian, guardianVotedAddress); // Verify the vote - address votedAddress = lsp11.getAddressVotedByGuardian( + address votedAddress = lsp11.getVotedAddressByGuardian( recoveryAccount, lsp11.getRecoveryCounterOf(recoveryAccount), guardian @@ -395,15 +394,15 @@ contract LSP11AccountFunctionalities is Test { // Guardian1 casts a vote vm.prank(guardian1); - lsp11.voteForRecoverer(recoveryAccount, guardian1, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian1, votedAddress); // Guardian2 casts a vote vm.prank(guardian2); - lsp11.voteForRecoverer(recoveryAccount, guardian2, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian2, votedAddress); // Verify votes for each guardian assertEq( - lsp11.getAddressVotedByGuardian( + lsp11.getVotedAddressByGuardian( recoveryAccount, lsp11.getRecoveryCounterOf(recoveryAccount), guardian1 @@ -411,7 +410,7 @@ contract LSP11AccountFunctionalities is Test { votedAddress ); assertEq( - lsp11.getAddressVotedByGuardian( + lsp11.getVotedAddressByGuardian( recoveryAccount, lsp11.getRecoveryCounterOf(recoveryAccount), guardian2 @@ -439,14 +438,14 @@ contract LSP11AccountFunctionalities is Test { // Guardian casts a vote for the first address vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, firstVotedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian, firstVotedAddress); // Guardian changes vote to the second address vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, secondVotedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian, secondVotedAddress); // Verify the updated vote - address currentVotedAddress = lsp11.getAddressVotedByGuardian( + address currentVotedAddress = lsp11.getVotedAddressByGuardian( recoveryAccount, lsp11.getRecoveryCounterOf(recoveryAccount), guardian @@ -478,14 +477,14 @@ contract LSP11AccountFunctionalities is Test { // Guardian casts a vote vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian, votedAddress); // Guardian resets their vote by voting for address(0) vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, address(0)); + lsp11.voteForRecovery(recoveryAccount, guardian, address(0)); // Verify the vote is reset - address currentVotedAddress = lsp11.getAddressVotedByGuardian( + address currentVotedAddress = lsp11.getVotedAddressByGuardian( recoveryAccount, lsp11.getRecoveryCounterOf(recoveryAccount), guardian @@ -521,9 +520,9 @@ contract LSP11AccountFunctionalities is Test { // Guardians cast their votes vm.prank(guardian1); - lsp11.voteForRecoverer(recoveryAccount, guardian1, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian1, votedAddress); vm.prank(guardian2); - lsp11.voteForRecoverer(recoveryAccount, guardian2, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian2, votedAddress); uint256 oldRecoveryCounter = lsp11.getRecoveryCounterOf( recoveryAccount @@ -568,9 +567,9 @@ contract LSP11AccountFunctionalities is Test { // Guardians cast their votes vm.prank(guardian1); - lsp11.voteForRecoverer(recoveryAccount, guardian1, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian1, votedAddress); vm.prank(guardian2); - lsp11.voteForRecoverer(recoveryAccount, guardian2, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian2, votedAddress); // Check if threshold is met bool thresholdMet = lsp11.hasReachedThreshold( @@ -595,7 +594,7 @@ contract LSP11AccountFunctionalities is Test { // Only one guardian casts a vote vm.prank(guardian1); - lsp11.voteForRecoverer(recoveryAccount, guardian1, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian1, votedAddress); // Check if threshold is met bool thresholdMet = lsp11.hasReachedThreshold( @@ -616,12 +615,12 @@ contract LSP11AccountFunctionalities is Test { // Guardian casts a vote vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian, votedAddress); // Expect a revert when the same guardian tries to vote for the same address again vm.expectRevert(); vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian, votedAddress); } function testRemovedGuardianCannotChangeVote() public { @@ -633,7 +632,7 @@ contract LSP11AccountFunctionalities is Test { // Add a guardian and cast a vote lsp11.addGuardian(recoveryAccount, guardian); vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, firstVotedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian, firstVotedAddress); // Remove the guardian lsp11.removeGuardian(recoveryAccount, guardian); @@ -641,7 +640,7 @@ contract LSP11AccountFunctionalities is Test { // Expect a revert when the removed guardian tries to change their vote vm.expectRevert(); vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, secondVotedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian, secondVotedAddress); } function testVoteInvalidationAfterCounterIncrement() public { @@ -652,13 +651,13 @@ contract LSP11AccountFunctionalities is Test { // Add a guardian and cast a vote lsp11.addGuardian(recoveryAccount, guardian); vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, votedAddress); + lsp11.voteForRecovery(recoveryAccount, guardian, votedAddress); // Increment the recovery counter, simulating a reset or progression in the recovery process lsp11.cancelRecoveryProcess(recoveryAccount); // Check if the vote made before the increment is still considered valid - address currentVotedAddress = lsp11.getAddressVotedByGuardian( + address currentVotedAddress = lsp11.getVotedAddressByGuardian( recoveryAccount, lsp11.getRecoveryCounterOf(recoveryAccount), guardian @@ -730,7 +729,7 @@ contract LSP11AccountFunctionalities is Test { vm.expectRevert(); vm.prank(address(0x123)); - lsp11.commitPlainSecret(recoveryAccount, address(0xABC), 0x0); + lsp11.commitToRecover(recoveryAccount, address(0xABC), 0x0); } function testBehaviorWithZeroGuardiansThreshold() public { @@ -746,59 +745,61 @@ contract LSP11AccountFunctionalities is Test { lsp11.recoverAccess(recoveryAccount, address(0xABC), 0x0, 0x0, ""); } - function testCommitPlainSecretWithIncorrectRecoverer() public { + function testcommitToRecoverWithIncorrectVotedAddress() public { address recoveryAccount = address(this); - address fakeRecoverer = address(0xABC); // Fake recoverer - address realRecoverer = address(0xDEF); // Real recoverer + address fakeVotedAddress = address(0xABC); // Fake votedAddress + address realVotedAddress = address(0xDEF); // Real votedAddress bytes32 secret = keccak256(abi.encode(recoveryAccount, "secret")); - bytes32 commitment = keccak256(abi.encode(realRecoverer, secret)); + bytes32 commitment = keccak256(abi.encode(realVotedAddress, secret)); - // Expect a revert due to incorrect recoverer + // Expect a revert due to incorrect votedAddress vm.expectRevert(); - lsp11.commitPlainSecret(recoveryAccount, fakeRecoverer, commitment); + lsp11.commitToRecover(recoveryAccount, fakeVotedAddress, commitment); } - function testSuccessfulCommitPlainSecret() public { + function testSuccessfulcommitToRecover() public { address recoveryAccount = address(this); - address recoverer = address(0xABC); // Valid recoverer + address votedAddress = address(0xABC); // Valid votedAddress bytes32 secret = keccak256(abi.encode(recoveryAccount, "secret")); - bytes32 commitment = keccak256(abi.encode(recoverer, secret)); + bytes32 commitment = keccak256(abi.encode(votedAddress, secret)); // Commit plain secret - vm.prank(recoverer); // Simulate call from the recoverer - lsp11.commitPlainSecret(recoveryAccount, recoverer, commitment); + vm.prank(votedAddress); // Simulate call from the votedAddress + lsp11.commitToRecover(recoveryAccount, votedAddress, commitment); // Validate that the commitment was correctly set (bytes32 returnedCommitment, uint256 timestamp) = lsp11 .getCommitmentInfoOf( recoveryAccount, lsp11.getRecoveryCounterOf(recoveryAccount), - recoverer + votedAddress ); assertEq(returnedCommitment, commitment); assertEq(timestamp, block.timestamp); } - function testCommitPlainSecretRelayCallWithInvalidSignature() public { + function testcommitToRecoverRelayCallWithInvalidSignature() public { address recoveryAccount = address(this); - address recoverer = address(0xABC); + address votedAddess = address(0xABC); bytes32 commitment = 0x0; // Example commitment bytes memory invalidSignature = new bytes(1); // Invalid signature - // Expect revert due to invalid signature - vm.expectRevert(); - lsp11.commitPlainSecretRelayCall( + bytes memory commitPayload = abi.encodeWithSelector( + lsp11.commitToRecover.selector, recoveryAccount, - recoverer, - commitment, - invalidSignature + votedAddess, + commitment ); + + // Expect revert due to invalid signature + vm.expectRevert("ECDSA: invalid signature length"); + lsp11.executeRelayCall(invalidSignature, 0, 0, commitPayload); } - function testCommitPlainSecretRelayCallWithDifferentRecoveryCounter() - public - { - (address recoverer, uint256 recovererPK) = makeAddrAndKey("recoverer"); + function testcommitToRecoverRelayCallWithDifferentRecoveryCounter() public { + (address votedAddess, uint256 votedAddressPK) = makeAddrAndKey( + "votedAddress" + ); address recoveryAccount = address(this); bytes32 commitment = 0x0; // Example commitment @@ -806,89 +807,123 @@ contract LSP11AccountFunctionalities is Test { recoveryAccount ) + 1; // Incorrect recovery counter - bytes memory encodedMessage = abi.encodePacked( - "lsp11", + bytes memory commitPayload = abi.encodeWithSelector( + lsp11.commitToRecover.selector, recoveryAccount, - wrongRecoveryCounter, - block.chainid, - recoverer, + votedAddess, commitment ); - bytes32 eip191Hash = ECDSA.toEthSignedMessageHash(encodedMessage); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(recovererPK, eip191Hash); // Signature with wrong recovery counter + + bytes memory encodedMessage = abi.encodePacked( + uint256(11), + block.chainid, + uint256(0), + uint256(0), + uint256(0), + wrongRecoveryCounter, + commitPayload + ); + + bytes32 eip191Hash = ECDSA.toDataWithIntendedValidatorHash( + address(lsp11), + encodedMessage + ); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(votedAddressPK, eip191Hash); // Signature with wrong recovery counter bytes memory signature = toBytesSignature(v, r, s); // Expect revert due to recovery counter mismatch vm.expectRevert(); - lsp11.commitPlainSecretRelayCall( - recoveryAccount, - recoverer, - commitment, - signature - ); + lsp11.executeRelayCall(signature, 0, 0, commitPayload); } - function testCommitPlainSecretRelayCallWithCorrectConfig() public { - (address recoverer, uint256 recovererPK) = makeAddrAndKey("recoverer"); + function testcommitToRecoverRelayCallWithCorrectConfig() public { + (address votedAddress, uint256 votedAddressPK) = makeAddrAndKey( + "votedAddress" + ); - address recoveryAccount = address(this); - uint256 recoveryCounter = lsp11.getRecoveryCounterOf(recoveryAccount); + bytes32 commitment = 0x2b58178172d258515ef1d9e7c467f6f6a09510e863ef5ad383dbfc50721183df; // Example commitment + uint256 recoveryCounter = lsp11.getRecoveryCounterOf(address(this)); + + bytes memory commitPayload = abi.encodeWithSelector( + lsp11.commitToRecover.selector, + address(this), + votedAddress, + commitment + ); bytes memory encodedMessage = abi.encodePacked( - "lsp11", - recoveryAccount, - recoveryCounter, + uint256(11), block.chainid, - recoverer, - bytes32(0x0) + uint256(0), + uint256(0), + uint256(0), + recoveryCounter, + commitPayload + ); + bytes32 eip191Hash = ECDSA.toDataWithIntendedValidatorHash( + address(lsp11), + encodedMessage ); - bytes32 eip191Hash = ECDSA.toEthSignedMessageHash(encodedMessage); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(recovererPK, eip191Hash); // Signature with wrong recovery counter + (uint8 v, bytes32 r, bytes32 s) = vm.sign(votedAddressPK, eip191Hash); // Signature with wrong recovery counter bytes memory signature = toBytesSignature(v, r, s); // Expect revert due to recovery counter mismatch // vm.expectRevert(); - lsp11.commitPlainSecretRelayCall( - recoveryAccount, - recoverer, - bytes32(0x0), - signature - ); + lsp11.executeRelayCall(signature, 0, 0, commitPayload); (bytes32 returnedCommitment, ) = lsp11.getCommitmentInfoOf( - recoveryAccount, + address(this), recoveryCounter, - recoverer + votedAddress ); - assertEq(returnedCommitment, bytes32(0x0)); + assertEq(returnedCommitment, commitment); } - function testCommitPlainSecretRelayCallWithDifferentSigner() public { - (address recoverer, ) = makeAddrAndKey("recoverer"); - (, uint256 notRecovererPK) = makeAddrAndKey("notrecoverer"); + function testcommitToRecoverRelayCallWithDifferentSigner() public { + (address votedAddress, ) = makeAddrAndKey("votedAddress"); + (address notVotedAddress, uint256 notVotedAddressPK) = makeAddrAndKey( + "notvotedAddress" + ); address recoveryAccount = address(this); - bytes32 commitment = 0x0; // Example commitment + bytes32 commitment = 0x2b58178172d258515ef1d9e7c467f6f6a09510e863ef5ad383dbfc50721183df; // Example commitment + uint256 recoveryCounter = lsp11.getRecoveryCounterOf(recoveryAccount); + bytes memory commitPayload = abi.encodeWithSelector( + lsp11.commitToRecover.selector, + address(this), + votedAddress, + commitment + ); + bytes memory encodedMessage = abi.encodePacked( - "lsp11", - recoveryAccount, - recoveryCounter, + uint256(11), block.chainid, - recoverer, - commitment + uint256(0), + uint256(0), + uint256(0), + recoveryCounter, + commitPayload + ); + bytes32 eip191Hash = ECDSA.toDataWithIntendedValidatorHash( + address(lsp11), + encodedMessage ); - bytes32 eip191Hash = ECDSA.toEthSignedMessageHash(encodedMessage); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(notRecovererPK, eip191Hash); // Signature with wrong recovery counter + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + notVotedAddressPK, + eip191Hash + ); // Signature with wrong recovery counter bytes memory signature = toBytesSignature(v, r, s); // Expect revert due to recovery counter mismatch - vm.expectRevert(); - lsp11.commitPlainSecretRelayCall( - recoveryAccount, - recoverer, - commitment, - signature + vm.expectRevert( + abi.encodeWithSelector( + SignerIsNotVotedAddress.selector, + votedAddress, + notVotedAddress + ) ); + lsp11.executeRelayCall(signature, 0, 0, commitPayload); } function testRecoveryFailsIfGuardianThresholdNotMet() public { @@ -905,7 +940,7 @@ contract LSP11AccountFunctionalities is Test { lsp11.setGuardiansThreshold(recoveryAccount, threshold); // Add guardian and cast a vote vm.prank(guardian1); - lsp11.voteForRecoverer(recoveryAccount, guardian1, address(0xDEF)); + lsp11.voteForRecovery(recoveryAccount, guardian1, address(0xDEF)); // Attempt recovery with votes below threshold vm.expectRevert(); @@ -926,7 +961,7 @@ contract LSP11AccountFunctionalities is Test { lsp11.setGuardiansThreshold(recoveryAccount, threshold); vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, address(0xDEF)); + lsp11.voteForRecovery(recoveryAccount, guardian, address(0xDEF)); // Attempt recovery with votes equal to threshold vm.prank(address(0xDEF)); @@ -981,12 +1016,12 @@ contract LSP11AccountFunctionalities is Test { lsp11.setGuardiansThreshold(recoveryAccount, threshold); vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, address(0xDEF)); + lsp11.voteForRecovery(recoveryAccount, guardian, address(0xDEF)); bytes32 commitment = keccak256(abi.encode(address(0xDEF), wrongSecret)); vm.prank(address(0xDEF)); - lsp11.commitPlainSecret(recoveryAccount, address(0xDEF), commitment); + lsp11.commitToRecover(recoveryAccount, address(0xDEF), commitment); vm.warp(block.timestamp + 101); // Attempt recovery with votes equal to threshold @@ -1021,12 +1056,12 @@ contract LSP11AccountFunctionalities is Test { lsp11.setGuardiansThreshold(recoveryAccount, threshold); vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, address(0xDEF)); + lsp11.voteForRecovery(recoveryAccount, guardian, address(0xDEF)); bytes32 commitment = keccak256(abi.encode(address(0xDEF), secret)); vm.prank(address(0xDEF)); - lsp11.commitPlainSecret(recoveryAccount, address(0xDEF), commitment); + lsp11.commitToRecover(recoveryAccount, address(0xDEF), commitment); // Attempt recovery with votes equal to threshold vm.expectRevert(); @@ -1059,12 +1094,12 @@ contract LSP11AccountFunctionalities is Test { lsp11.setGuardiansThreshold(recoveryAccount, threshold); vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, address(0xDEF)); + lsp11.voteForRecovery(recoveryAccount, guardian, address(0xDEF)); bytes32 commitment = keccak256(abi.encode(address(0xDEF), secret)); vm.prank(address(0xDEF)); - lsp11.commitPlainSecret(recoveryAccount, address(0xDEF), commitment); + lsp11.commitToRecover(recoveryAccount, address(0xDEF), commitment); vm.warp(block.timestamp + 101); // Attempt recovery with votes equal to threshold @@ -1098,12 +1133,12 @@ contract LSP11AccountFunctionalities is Test { lsp11.setGuardiansThreshold(recoveryAccount, threshold); vm.prank(guardian); - lsp11.voteForRecoverer(recoveryAccount, guardian, address(0xDEF)); + lsp11.voteForRecovery(recoveryAccount, guardian, address(0xDEF)); bytes32 commitment = keccak256(abi.encode(address(0xDEF), secret)); vm.prank(address(0xDEF)); - lsp11.commitPlainSecret(recoveryAccount, address(0xDEF), commitment); + lsp11.commitToRecover(recoveryAccount, address(0xDEF), commitment); vm.warp(block.timestamp + 101); // Attempt recovery with votes equal to threshold @@ -1124,23 +1159,108 @@ contract LSP11AccountFunctionalities is Test { } function testRecoverAccessRelayCallWithInvalidSignature() public { + (address votedAddress, ) = makeAddrAndKey("votedAddress"); + (address notVotedAddress, uint256 notVotedAddressPK) = makeAddrAndKey( + "notVotedAddress" + ); + address guardian = address(0x123); + address recoveryAccount = address(this); - address recoverer = address(0xABC); - bytes32 plainHash = 0x0; - bytes32 newSecretHash = 0x0; - bytes memory calldataToExecute = ""; - bytes memory invalidSignature = "0x1234"; // Example of an invalid signature + lsp11.addGuardian(recoveryAccount, guardian); + lsp11.setRecoveryDelay(recoveryAccount, 0); - // Expect revert due to invalid signature - vm.expectRevert(); - lsp11.recoverAccessRelayCall( - recoveryAccount, - recoverer, - plainHash, - newSecretHash, - calldataToExecute, - invalidSignature + vm.prank(guardian); + lsp11.voteForRecovery(recoveryAccount, guardian, votedAddress); + + uint256 recoveryCounter = lsp11.getRecoveryCounterOf(recoveryAccount); + + bytes memory recoverPayload = abi.encodeWithSelector( + lsp11.recoverAccess.selector, + address(this), + votedAddress, + bytes32(0), + bytes32(0), + "" + ); + + bytes memory encodedMessage = abi.encodePacked( + uint256(11), + block.chainid, + uint256(0), + uint256(0), + uint256(0), + recoveryCounter, + recoverPayload + ); + bytes32 eip191Hash = ECDSA.toDataWithIntendedValidatorHash( + address(lsp11), + encodedMessage + ); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign( + notVotedAddressPK, + eip191Hash + ); // Signature with wrong recovery counter + bytes memory signature = toBytesSignature(v, r, s); + // Expect revert due to recovery counter mismatch + vm.expectRevert( + abi.encodeWithSelector( + SignerIsNotVotedAddress.selector, + votedAddress, + notVotedAddress + ) + ); + lsp11.executeRelayCall(signature, 0, 0, recoverPayload); + } + + function testRecoverAccessRelayCallWithValidSignature() public { + (address votedAddress, uint256 votedAddressPK) = makeAddrAndKey( + "votedAddress" ); + address guardian = address(0x123); + + address recoveryAccount = address(this); + lsp11.addGuardian(recoveryAccount, guardian); + lsp11.setRecoveryDelay(recoveryAccount, 0); + lsp11.setGuardiansThreshold(recoveryAccount, 1); + + vm.prank(guardian); + lsp11.voteForRecovery(recoveryAccount, guardian, votedAddress); + + uint256 recoveryCounter = lsp11.getRecoveryCounterOf(recoveryAccount); + + bytes memory recoverPayload = abi.encodeWithSelector( + lsp11.recoverAccess.selector, + address(this), + votedAddress, + bytes32(0), + bytes32(0), + "" + ); + + bytes memory encodedMessage = abi.encodePacked( + uint256(11), + block.chainid, + uint256(0), + uint256(0), + uint256(0), + recoveryCounter, + recoverPayload + ); + bytes32 eip191Hash = ECDSA.toDataWithIntendedValidatorHash( + address(lsp11), + encodedMessage + ); + + (uint8 v, bytes32 r, bytes32 s) = vm.sign(votedAddressPK, eip191Hash); // Signature with wrong recovery counter + bytes memory signature = toBytesSignature(v, r, s); + lsp11.executeRelayCall(signature, 0, 0, recoverPayload); + + // Check if the recovery counter is incremented + uint256 newRecoveryCounter = lsp11.getRecoveryCounterOf( + recoveryAccount + ); + assertEq(newRecoveryCounter, 1); } function toBytesSignature( diff --git a/packages/lsp11-contracts/package.json b/packages/lsp11-contracts/package.json index 153bc43be..51c726b3c 100644 --- a/packages/lsp11-contracts/package.json +++ b/packages/lsp11-contracts/package.json @@ -46,6 +46,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp25-contracts": "*", "@openzeppelin/contracts": "^4.9.3" } } From 2aaf59ae1333e4ee2377dac7ed0584191b072a2e Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Tue, 26 Mar 2024 12:58:07 +0200 Subject: [PATCH 03/94] build: add lsp11 package-lick --- package-lock.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/package-lock.json b/package-lock.json index 39e4e2e0c..9addcf93c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1969,6 +1969,10 @@ "resolved": "packages/lsp10-contracts", "link": true }, + "node_modules/@lukso/lsp11-contracts": { + "resolved": "packages/lsp11-contracts", + "link": true + }, "node_modules/@lukso/lsp12-contracts": { "resolved": "packages/lsp12-contracts", "link": true @@ -22607,6 +22611,15 @@ "solidity-bytes-utils": "0.8.0" } }, + "packages/lsp11-contracts": { + "version": "0.0.1", + "license": "Apache-2.0", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp25-contracts": "*", + "@openzeppelin/contracts": "^4.9.3" + } + }, "packages/lsp12-contracts": { "name": "@lukso/lsp12-contracts", "version": "0.15.0-rc.5", From 5c91caa804933fc82cc575d76a921c4ace56edc8 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Tue, 26 Mar 2024 13:04:18 +0200 Subject: [PATCH 04/94] chore: resolve linter --- packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol b/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol index 85d762c32..4a8b79cf7 100644 --- a/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol +++ b/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol @@ -501,6 +501,7 @@ contract LSP11SocialRecovery is ]; if (recoveryTimestamp == 0) { + // solhint-disable not-rely-on-time _firstRecoveryTimestamp[account][accountRecoveryCounter] = block .timestamp; } @@ -637,6 +638,7 @@ contract LSP11SocialRecovery is address votedAddress, bytes32 commitment ) internal { + // solhint-disable not-rely-on-time CommitmentInfo memory _commitment = CommitmentInfo( commitment, block.timestamp @@ -869,6 +871,7 @@ contract LSP11SocialRecovery is bytes memory calldataToExecute ) internal returns (bytes memory) { if ( + // solhint-disable not-rely-on-time block.timestamp < _firstRecoveryTimestamp[account][recoveryCounter] + getRecoveryDelayOf(account) @@ -909,6 +912,7 @@ contract LSP11SocialRecovery is ) revert InvalidCommitment(account, votedAddress); // Check that the commitment is not too early + // solhint-disable not-rely-on-time if ( _commitmentInfoOf[account][recoveryCounter][votedAddress] .timestamp + From 9e3d6252b2922acda30f6bf6954136c86fcc5542 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Wed, 3 Apr 2024 02:33:17 +0300 Subject: [PATCH 05/94] refactor: Add suggested changes --- packages/lsp11-contracts/README.md | 8 +- .../contracts/ILSP11SocialRecovery.sol | 44 ++++++---- .../contracts/LSP11Constants.sol | 4 +- .../lsp11-contracts/contracts/LSP11Errors.sol | 10 +-- .../contracts/LSP11SocialRecovery.sol | 88 +++++++++---------- .../foundry/LSP11UniversalRecovery.t.sol | 43 ++++----- packages/lsp11-contracts/hardhat.config.ts | 2 +- packages/lsp11-contracts/package.json | 8 +- release-please-config.json | 10 +++ 9 files changed, 121 insertions(+), 96 deletions(-) diff --git a/packages/lsp11-contracts/README.md b/packages/lsp11-contracts/README.md index 4c358cd52..37b671262 100755 --- a/packages/lsp11-contracts/README.md +++ b/packages/lsp11-contracts/README.md @@ -1,3 +1,9 @@ # LSP11 Social Recovery -Package for the LSP11 Social Recovery standard. +Package for the [LSP11 Social Recovery](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-11-BasicSocialRecovery.md) standard. + +## Installation + +```bash +npm install @lukso/lsp11-contracts +``` diff --git a/packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol b/packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol index ebe1bfe68..bca307a67 100644 --- a/packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol +++ b/packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: UNLICENSED +// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.9; /** @@ -11,35 +11,44 @@ interface ILSP11SocialRecovery { * @param account The account for which the guardian is being added. * @param guardian The address of the new guardian being added. */ - event GuardianAdded(address account, address guardian); + event GuardianAdded(address indexed account, address indexed guardian); /** * @notice Event emitted when a guardian is removed for an account. * @param account The account from which the guardian is being removed. * @param guardian The address of the guardian being removed. */ - event GuardianRemoved(address account, address guardian); + event GuardianRemoved(address indexed account, address indexed guardian); /** * @notice Event emitted when the guardian threshold for an account is changed. * @param account The account for which the guardian threshold is being changed. * @param guardianThreshold The new guardian threshold for the account. */ - event GuardiansThresholdChanged(address account, uint256 guardianThreshold); + event GuardiansThresholdChanged( + address indexed account, + uint256 indexed guardianThreshold + ); /** * @notice Event emitted when the secret hash associated with an account is changed. * @param account The account for which the secret hash is being changed. * @param secretHash The new secret hash for the account. */ - event SecretHashChanged(address account, bytes32 secretHash); + event SecretHashChanged( + address indexed account, + bytes32 indexed secretHash + ); /** * @notice Event emitted when the recovery delay associated with an account is changed. * @param account The account for which the recovery delay is being changed. * @param recoveryDelay The new recovery delay for the account in seconds. */ - event RecoveryDelayChanged(address account, uint256 recoveryDelay); + event RecoveryDelayChanged( + address indexed account, + uint256 indexed recoveryDelay + ); /** * @notice Event emitted when a guardian votes for an address to be recovered. @@ -49,10 +58,10 @@ interface ILSP11SocialRecovery { * @param guardianVotedAddress The address voted by the guardian for recovery. */ event GuardianVotedFor( - address account, + address indexed account, uint256 recoveryCounter, - address guardian, - address guardianVotedAddress + address indexed guardian, + address indexed guardianVotedAddress ); /** @@ -60,7 +69,10 @@ interface ILSP11SocialRecovery { * @param account The account for which the recovery process was cancelled. * @param previousRecoveryCounter The recovery counter before cancellation. */ - event RecoveryCancelled(address account, uint256 previousRecoveryCounter); + event RecoveryCancelled( + address indexed account, + uint256 indexed previousRecoveryCounter + ); /** * @notice Event emitted when an address commits a secret hash to recover an account. @@ -70,10 +82,10 @@ interface ILSP11SocialRecovery { * @param commitment The commitment associated with the secret hash. */ event SecretHashCommitted( - address account, + address indexed account, uint256 recoveryCounter, - address committedBy, - bytes32 commitment + address indexed committedBy, + bytes32 indexed commitment ); /** @@ -84,9 +96,9 @@ interface ILSP11SocialRecovery { * @param calldataExecuted The calldata executed on the account recovered. */ event RecoveryProcessSuccessful( - address account, - uint256 recoveryCounter, - address guardianVotedAddress, + address indexed account, + uint256 indexed recoveryCounter, + address indexed guardianVotedAddress, bytes calldataExecuted ); diff --git a/packages/lsp11-contracts/contracts/LSP11Constants.sol b/packages/lsp11-contracts/contracts/LSP11Constants.sol index e823de28a..ccc0159c8 100644 --- a/packages/lsp11-contracts/contracts/LSP11Constants.sol +++ b/packages/lsp11-contracts/contracts/LSP11Constants.sol @@ -1,8 +1,8 @@ -// SPDX-License-Identifier: UNLICENSED +// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.9; // --- ERC165 interface ids -bytes4 constant _INTERFACEID_LSP11 = 0xcc80e8f6; +bytes4 constant _INTERFACEID_LSP11 = 0xabad0bd7; // version number used to validate signed relayed call uint256 constant LSP11_VERSION = 11; diff --git a/packages/lsp11-contracts/contracts/LSP11Errors.sol b/packages/lsp11-contracts/contracts/LSP11Errors.sol index c8a1ec7c0..a33c43954 100644 --- a/packages/lsp11-contracts/contracts/LSP11Errors.sol +++ b/packages/lsp11-contracts/contracts/LSP11Errors.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: UNLICENSED +// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.9; /** @@ -16,7 +16,7 @@ error GuardianAlreadyExists(address account, address guardian); error GuardianNotFound(address account, address guardian); /** - * @dev The caller is not a guardian for the account. + * @dev The caller is not a guardian address provided. * @param guardian Expected guardian address. * @param caller Address of the caller. */ @@ -83,11 +83,11 @@ error CallerVotesHaveNotReachedThreshold(address account, address recoverer); error AccountNotSetupYet(); /** - * @dev The caller is not a guardian for the account. + * @dev The address provided as a guardian is not registered as a guardian for the account. * @param account The account in question. - * @param caller Address of the caller. + * @param nonGuardian Address of a non-guardian . */ -error CallerIsNotAGuardianOfTheAccount(address account, address caller); +error NotAGuardianOfTheAccount(address account, address nonGuardian); /** * @dev A guardian cannot vote for the same address twice. diff --git a/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol b/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol index 4a8b79cf7..db5663c8f 100644 --- a/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol +++ b/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: UNLICENSED +// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.9; // Interfaces @@ -16,9 +16,11 @@ import { import { LSP25MultiChannelNonce } from "@lukso/lsp25-contracts/contracts/LSP25MultiChannelNonce.sol"; +import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; + // Constants // solhint-disable no-global-import -import "./LSP11Constants.sol"; +import {_INTERFACEID_LSP11, LSP11_VERSION} from "./LSP11Constants.sol"; // Errors // solhint-disable no-global-import @@ -29,6 +31,7 @@ import "./LSP11Errors.sol"; * @notice Contract providing a mechanism for account recovery through a designated set of guardians. */ contract LSP11SocialRecovery is + ERC165, ILSP11SocialRecovery, ILSP25ExecuteRelayCall, LSP25MultiChannelNonce @@ -37,7 +40,10 @@ contract LSP11SocialRecovery is using ECDSA for *; /// @dev The default recovery delay set to 40 minutes. - uint256 private constant _DEFAULT_RECOVERY_DELAY = 40 minutes; + uint256 public constant DEFAULT_RECOVERY_DELAY = 40 minutes; + + /// @dev The delay between the commitment and the recovery process. + uint256 public constant COMMITMEMT_DELAY = 1 minutes; /** * @dev Stores the hash of a commitment along with a timestamp. @@ -45,9 +51,7 @@ contract LSP11SocialRecovery is * the secret hash abi-encoded. */ struct CommitmentInfo { - /// @dev The keccak256 hash of the commitment. bytes32 commitment; - /// @dev The timestamp when the commitment was made. uint256 timestamp; } @@ -115,7 +119,7 @@ contract LSP11SocialRecovery is revert CallerIsNotGuardian(guardian, msg.sender); if (!(_guardiansOf[account].contains(guardian))) - revert CallerIsNotAGuardianOfTheAccount(account, guardian); + revert NotAGuardianOfTheAccount(account, guardian); _; } @@ -245,6 +249,15 @@ contract LSP11SocialRecovery is return _getNonce(from, channelId); } + function supportsInterface( + bytes4 interfaceId + ) public view override returns (bool) { + return + interfaceId == _INTERFACEID_LSP11 || + interfaceId == type(ILSP25ExecuteRelayCall).interfaceId || + super.supportsInterface(interfaceId); + } + /** * @notice Get the array of addresses representing guardians associated with an account. * @param account The account for which guardians are queried. @@ -295,7 +308,7 @@ contract LSP11SocialRecovery is * @return The recovery delay associated with the given account. */ function getRecoveryDelayOf(address account) public view returns (uint256) { - if (!_defaultRecoveryRemoved[account]) return _DEFAULT_RECOVERY_DELAY; + if (!_defaultRecoveryRemoved[account]) return DEFAULT_RECOVERY_DELAY; return _recoveryDelayOf[account]; } @@ -394,10 +407,8 @@ contract LSP11SocialRecovery is address account, address newGuardian ) public virtual accountIsCaller(account) { - if (_guardiansOf[account].contains(newGuardian)) - revert GuardianAlreadyExists(account, newGuardian); - - _guardiansOf[account].add(newGuardian); + bool guardianAdded = _guardiansOf[account].add(newGuardian); + if (!guardianAdded) revert GuardianAlreadyExists(account, newGuardian); emit GuardianAdded(account, newGuardian); } @@ -494,20 +505,17 @@ contract LSP11SocialRecovery is address guardian, address guardianVotedAddress ) public virtual onlyGuardians(account, guardian) { - uint256 accountRecoveryCounter = _recoveryCounterOf[account]; + uint256 counter = _recoveryCounterOf[account]; - uint256 recoveryTimestamp = _firstRecoveryTimestamp[account][ - accountRecoveryCounter - ]; + uint256 recoveryTimestamp = _firstRecoveryTimestamp[account][counter]; if (recoveryTimestamp == 0) { // solhint-disable not-rely-on-time - _firstRecoveryTimestamp[account][accountRecoveryCounter] = block - .timestamp; + _firstRecoveryTimestamp[account][counter] = block.timestamp; } address previousVotedForAddressByGuardian = _guardiansVotedFor[account][ - accountRecoveryCounter + counter ][guardian]; // Cannot vote to the same person twice @@ -520,10 +528,10 @@ contract LSP11SocialRecovery is // If didn't vote before or reset if (previousVotedForAddressByGuardian == address(0)) { - _guardiansVotedFor[account][accountRecoveryCounter][ + _guardiansVotedFor[account][counter][ guardian ] = guardianVotedAddress; - _votesOfguardianVotedAddress[account][accountRecoveryCounter][ + _votesOfguardianVotedAddress[account][counter][ guardianVotedAddress ]++; } @@ -532,27 +540,22 @@ contract LSP11SocialRecovery is guardianVotedAddress != previousVotedForAddressByGuardian && previousVotedForAddressByGuardian != address(0) ) { - _guardiansVotedFor[account][accountRecoveryCounter][ + _guardiansVotedFor[account][counter][ guardian ] = guardianVotedAddress; - _votesOfguardianVotedAddress[account][accountRecoveryCounter][ + _votesOfguardianVotedAddress[account][counter][ previousVotedForAddressByGuardian ]--; // If the voted address for is address(0) the intention is to reset, not vote for address 0 if (guardianVotedAddress != address(0)) { - _votesOfguardianVotedAddress[account][accountRecoveryCounter][ + _votesOfguardianVotedAddress[account][counter][ guardianVotedAddress ]++; } } - emit GuardianVotedFor( - account, - accountRecoveryCounter, - guardian, - guardianVotedAddress - ); + emit GuardianVotedFor(account, counter, guardian, guardianVotedAddress); } /** @@ -564,8 +567,7 @@ contract LSP11SocialRecovery is function cancelRecoveryProcess( address account ) public accountIsCaller(account) { - uint256 previousRecoveryCounter = _recoveryCounterOf[account]; - _recoveryCounterOf[account]++; + uint256 previousRecoveryCounter = _recoveryCounterOf[account]++; emit RecoveryCancelled(account, previousRecoveryCounter); } @@ -878,7 +880,7 @@ contract LSP11SocialRecovery is ) revert CannotRecoverBeforeDelay(account, getRecoveryDelayOf(account)); // retrieve current secret hash - bytes32 _secretHash = _secretHashOf[account]; + bytes32 currentSecretHash = _secretHashOf[account]; // retrieve current guardians threshold uint256 guardiansThresholdOfAccount = _guardiansThresholdOf[account]; @@ -891,14 +893,12 @@ contract LSP11SocialRecovery is account ][recoveryCounter][votedAddress]; - // votes validation - // if the threshold is 0, and the caller does not have votes - // will rely on the hash + // if the threshold is 0, and the caller does not have votes will rely on the hash if (votesOfGuardianVotedAddress_ < guardiansThresholdOfAccount) revert CallerVotesHaveNotReachedThreshold(account, votedAddress); // if there is a secret require a commitment first - if (_secretHash != bytes32(0)) { + if (currentSecretHash != bytes32(0)) { bytes32 saltedHash = keccak256(abi.encode(account, secretHash)); bytes32 commitment = keccak256( abi.encode(votedAddress, saltedHash) @@ -921,7 +921,7 @@ contract LSP11SocialRecovery is ) revert CannotRecoverAfterDirectCommit(account, votedAddress); // Check that the secret hash is valid - if (saltedHash != _secretHash) + if (saltedHash != currentSecretHash) revert InvalidSecretHash(account, secretHash); } @@ -929,6 +929,13 @@ contract LSP11SocialRecovery is _secretHashOf[account] = newSecretHash; emit SecretHashChanged(account, newSecretHash); + emit RecoveryProcessSuccessful( + account, + recoveryCounter, + votedAddress, + calldataToExecute + ); + (bool success, bytes memory returnedData) = account.call{ value: msgValue }(calldataToExecute); @@ -939,13 +946,6 @@ contract LSP11SocialRecovery is "LSP11: Failed to call function on account" ); - emit RecoveryProcessSuccessful( - account, - recoveryCounter, - votedAddress, - calldataToExecute - ); - return returnedData; } } diff --git a/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol b/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol index 8a981c746..e8789f692 100644 --- a/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol +++ b/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol @@ -8,7 +8,12 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; import {LSP11SocialRecovery} from "../contracts/LSP11SocialRecovery.sol"; +import {ILSP11SocialRecovery} from "../contracts/ILSP11SocialRecovery.sol"; +import { + ILSP25ExecuteRelayCall +} from "@lukso/lsp25-contracts/contracts/ILSP25ExecuteRelayCall.sol"; import "../contracts/LSP11Errors.sol"; +import {_INTERFACEID_LSP11} from "../contracts/LSP11Constants.sol"; contract LSP11AccountFunctionalities is Test { LSP11SocialRecovery public lsp11; @@ -24,10 +29,6 @@ contract LSP11AccountFunctionalities is Test { function testAddGuardian() public { address newGuardian = address(0xABC); - // // Expect GuardianAdded event - // vm.expectEmit(true, true, true, true); - // emit GuardianAdded(address(this), newGuardian); - // Call addGuardian lsp11.addGuardian(address(this), newGuardian); @@ -73,10 +74,6 @@ contract LSP11AccountFunctionalities is Test { // Add a guardian first lsp11.addGuardian(address(this), existingGuardian); - // Expect GuardianRemoved event - // vm.expectEmit(true, true, true, true); - // emit GuardianRemoved(address(this), existingGuardian); - // Remove the guardian lsp11.removeGuardian(address(this), existingGuardian); @@ -123,10 +120,6 @@ contract LSP11AccountFunctionalities is Test { address guardian1 = address(0xABC); address guardian2 = address(0xDEF); - // Expect GuardiansThresholdChanged event - // vm.expectEmit(true, true, true, true); - // emit GuardiansThresholdChanged(address(this), newThreshold); - // Add two guardians lsp11.addGuardian(address(this), guardian1); lsp11.addGuardian(address(this), guardian2); @@ -166,10 +159,6 @@ contract LSP11AccountFunctionalities is Test { function testAddSecretHash() public { bytes32 newSecretHash = keccak256("newSecret"); - // Expect SecretHashChanged event - // vm.expectEmit(true, true, true, true); - // emit SecretHashChanged(address(this), newSecretHash); - // Set the secret hash lsp11.setRecoverySecretHash(address(this), newSecretHash); @@ -181,10 +170,6 @@ contract LSP11AccountFunctionalities is Test { function testAddRecoveryDelay() public { uint256 newRecoveryDelay = 3600; // Example delay of 1 hour - // Expect RecoveryDelayChanged event - // vm.expectEmit(true, true, true, true); - // emit RecoveryDelayChanged(address(this), newRecoveryDelay); - // Set the recovery delay lsp11.setRecoveryDelay(address(this), newRecoveryDelay); @@ -217,10 +202,6 @@ contract LSP11AccountFunctionalities is Test { // First, check the initial recovery counter value uint256 initialCounter = lsp11.getRecoveryCounterOf(address(this)); - // Expect RecoveryCancelled event - // vm.expectEmit(true, true, true, true); - // emit RecoveryCancelled(address(this), initialCounter); - // Call cancelRecoveryProcess lsp11.cancelRecoveryProcess(address(this)); @@ -1263,6 +1244,20 @@ contract LSP11AccountFunctionalities is Test { assertEq(newRecoveryCounter, 1); } + function testLSP11InterfaceIdConstruction() public { + bytes4 lsp11InterfaceId = type(ILSP11SocialRecovery).interfaceId ^ + type(ILSP25ExecuteRelayCall).interfaceId; + assertEq( + abi.encodePacked(lsp11InterfaceId), + abi.encodePacked(_INTERFACEID_LSP11) + ); + } + + function testLSP11SupportsInterfaceId() public { + bool isSupported = lsp11.supportsInterface(_INTERFACEID_LSP11); + assertTrue(isSupported); + } + function toBytesSignature( uint8 v, bytes32 r, diff --git a/packages/lsp11-contracts/hardhat.config.ts b/packages/lsp11-contracts/hardhat.config.ts index 1f9e172b9..9af67f78f 100755 --- a/packages/lsp11-contracts/hardhat.config.ts +++ b/packages/lsp11-contracts/hardhat.config.ts @@ -107,7 +107,7 @@ const config: HardhatUserConfig = { }, packager: { // What contracts to keep the artifacts and the bindings for. - contracts: [], + contracts: ['ILSP11SocialRecovery', 'LSP11SocialRecovery'], // Whether to include the TypeChain factories or not. // If this is enabled, you need to run the TypeChain files through the TypeScript compiler before shipping to the registry. includeFactories: true, diff --git a/packages/lsp11-contracts/package.json b/packages/lsp11-contracts/package.json index 51c726b3c..a39a8d9e3 100644 --- a/packages/lsp11-contracts/package.json +++ b/packages/lsp11-contracts/package.json @@ -1,6 +1,6 @@ { "name": "@lukso/lsp11-contracts", - "version": "0.0.1", + "version": "0.1.0", "description": "Package for the LSP11 Social Recovery standard", "license": "Apache-2.0", "author": "", @@ -36,17 +36,19 @@ "scripts": { "build": "hardhat compile --show-stack-traces", "build:foundry": "forge build", + "build:types": "npx wagmi generate", "build:js": "unbuild", "clean": "hardhat clean && rm -Rf dist/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", "test:foundry": "FOUNDRY_PROFILE=lsp11 forge test --no-match-test Skip -vvv", - "test:coverage": "hardhat coverage" + "test:coverage": "hardhat coverage", + "package": "hardhat prepare-package" }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp25-contracts": "*", + "@lukso/lsp25-contracts": "~0.15.0-rc.4", "@openzeppelin/contracts": "^4.9.3" } } diff --git a/release-please-config.json b/release-please-config.json index 03817b931..a28a28d23 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -205,6 +205,16 @@ "draft": false, "prerelease-type": "rc" }, + "packages/lsp11-contracts": { + "component": "lsp11-contracts", + "package-name": "@lukso/lsp11-contracts", + "include-component-in-tag": true, + "release-type": "node", + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": false, + "draft": false, + "prerelease-type": "rc" + }, "packages/lsp25-contracts": { "component": "lsp25-contracts", "package-name": "@lukso/lsp25-contracts", From 60f98b8c27b34b939ff7c5664a40ca13ee94d34a Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Wed, 3 Apr 2024 02:35:49 +0300 Subject: [PATCH 06/94] build: update package-lock.json --- package-lock.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9addcf93c..f05a20a37 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22612,11 +22612,20 @@ } }, "packages/lsp11-contracts": { - "version": "0.0.1", + "name": "@lukso/lsp11-contracts", + "version": "0.1.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp25-contracts": "*", + "@lukso/lsp25-contracts": "~0.15.0-rc.4", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp11-contracts/node_modules/@lukso/lsp25-contracts": { + "version": "0.15.0-rc.4", + "resolved": "https://registry.npmjs.org/@lukso/lsp25-contracts/-/lsp25-contracts-0.15.0-rc.4.tgz", + "integrity": "sha512-Wk7wmpkri1INyfmhlLW0e7TzU9fqVa1Ok+3OIlrYtsCjv2zebDNryPTRb2erfySwCISOYRfKGRApzLeMpmWvnQ==", + "dependencies": { "@openzeppelin/contracts": "^4.9.3" } }, From 7ea78b7883c41e4879f2cafc871e1931b2ac55a0 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Sun, 28 Apr 2024 22:03:38 +0300 Subject: [PATCH 07/94] refactor: add to LSP11 `getFirstRecoveryTimestampOf` --- packages/lsp11-contracts/constants.ts | 2 +- .../contracts/ILSP11SocialRecovery.sol | 11 ++++ .../contracts/LSP11Constants.sol | 2 +- .../contracts/LSP11SocialRecovery.sol | 13 +++++ .../foundry/LSP11UniversalRecovery.t.sol | 53 +++++++++++++++++++ 5 files changed, 79 insertions(+), 2 deletions(-) diff --git a/packages/lsp11-contracts/constants.ts b/packages/lsp11-contracts/constants.ts index 3a26fc4d9..569d9a43c 100644 --- a/packages/lsp11-contracts/constants.ts +++ b/packages/lsp11-contracts/constants.ts @@ -1,3 +1,3 @@ // ERC165 Interface ID // ---------- -export const INTERFACE_ID_LSP11 = '0x00000000'; +export const INTERFACE_ID_LSP11 = '0x23a45ef0'; diff --git a/packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol b/packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol index bca307a67..3f968fb18 100644 --- a/packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol +++ b/packages/lsp11-contracts/contracts/ILSP11SocialRecovery.sol @@ -156,6 +156,17 @@ interface ILSP11SocialRecovery { address account ) external view returns (uint256); + /** + * @notice Get the timestamp of the first recovery timestamp of the vote for a specific account and recovery counter. + * @param account The account for which the vote is queried. + * @param recoveryCounter The recovery counter for which the vote is queried. + * @return The timestamp of the first recovery timestamp of the vote for a specific account and recovery counter. + */ + function getFirstRecoveryTimestampOf( + address account, + uint256 recoveryCounter + ) external view returns (uint256); + /** * @notice Get the address voted for recovery by a guardian for a specific account and recovery counter. * @param account The account for which the vote is queried. diff --git a/packages/lsp11-contracts/contracts/LSP11Constants.sol b/packages/lsp11-contracts/contracts/LSP11Constants.sol index ccc0159c8..070b73fb7 100644 --- a/packages/lsp11-contracts/contracts/LSP11Constants.sol +++ b/packages/lsp11-contracts/contracts/LSP11Constants.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.9; // --- ERC165 interface ids -bytes4 constant _INTERFACEID_LSP11 = 0xabad0bd7; +bytes4 constant _INTERFACEID_LSP11 = 0x23a45ef0; // version number used to validate signed relayed call uint256 constant LSP11_VERSION = 11; diff --git a/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol b/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol index db5663c8f..a1381a256 100644 --- a/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol +++ b/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol @@ -323,6 +323,19 @@ contract LSP11SocialRecovery is return _recoveryCounterOf[account]; } + /** + * @notice Get the timestamp of the first recovery timestamp of the vote for a specific account and recovery counter. + * @param account The account for which the vote is queried. + * @param recoveryCounter The recovery counter for which the vote is queried. + * @return The timestamp of the first recovery timestamp of the vote for a specific account and recovery counter. + */ + function getFirstRecoveryTimestampOf( + address account, + uint256 recoveryCounter + ) public view returns (uint256) { + return _firstRecoveryTimestamp[account][recoveryCounter]; + } + /** * @notice Get the address voted for recovery by a guardian for a specific account and recovery counter. * @param account The account for which the vote is queried. diff --git a/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol b/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol index e8789f692..27961915c 100644 --- a/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol +++ b/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol @@ -363,6 +363,59 @@ contract LSP11AccountFunctionalities is Test { assertEq(voteCount, 1); } + function testGuardianFirstRecoveryTimestamp() public { + address guardian = address(0xABC); + address recoveryAccount = address(this); // The account for which recovery is being attempted + address guardianVotedAddress = address(0xDEF); + + // Add guardian + lsp11.addGuardian(recoveryAccount, guardian); + + // Simulate the guardian casting a vote + vm.prank(guardian); + lsp11.voteForRecovery(recoveryAccount, guardian, guardianVotedAddress); + + // Verify the vote + uint256 timestamp = lsp11.getFirstRecoveryTimestampOf( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount) + ); + + assertEq(block.timestamp, timestamp); + } + + function testSeveralGuardianVotesWontChangeFirstRecoveryTimestamp() public { + address guardian1 = address(0xABC); + address guardian2 = address(0xCDE); + address recoveryAccount = address(this); // The account for which recovery is being attempted + address guardianVotedAddress = address(0xDEF); + + // Add guardian + lsp11.addGuardian(recoveryAccount, guardian1); + lsp11.addGuardian(recoveryAccount, guardian2); + + // Simulate the guardian casting a vote + uint256 firstVoteTimestamp = block.timestamp; + vm.prank(guardian1); + lsp11.voteForRecovery(recoveryAccount, guardian1, guardianVotedAddress); + + vm.warp(firstVoteTimestamp + 100); + + uint256 secondVoteTimestamp = block.timestamp; + vm.prank(guardian2); + lsp11.voteForRecovery(recoveryAccount, guardian2, guardianVotedAddress); + + // Verify the vote + uint256 FirstTimestampFetched = lsp11.getFirstRecoveryTimestampOf( + recoveryAccount, + lsp11.getRecoveryCounterOf(recoveryAccount) + ); + + assertEq(firstVoteTimestamp, FirstTimestampFetched); + assertEq(block.timestamp, secondVoteTimestamp); + assertTrue(block.timestamp > firstVoteTimestamp); + } + function testTwoGuardiansVoteAndStateCheck() public { address guardian1 = address(0xABC); address guardian2 = address(0xDEF); From dc637df9b531fd9064e094eca466ca440004c86e Mon Sep 17 00:00:00 2001 From: Dominik Zborowski Date: Thu, 16 May 2024 10:29:52 +0200 Subject: [PATCH 08/94] feat: Allow contract assets as TS type --- packages/lsp3-contracts/constants.ts | 11 ++++++++--- packages/lsp4-contracts/constants.ts | 29 ++++++++++++++-------------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/packages/lsp3-contracts/constants.ts b/packages/lsp3-contracts/constants.ts index 9e82c3ec7..eeb1c21cf 100644 --- a/packages/lsp3-contracts/constants.ts +++ b/packages/lsp3-contracts/constants.ts @@ -26,11 +26,11 @@ export type LinkMetadata = { url: string; }; -export type AssetMetadata = AssetFile | DigitalAsset; +export type AssetMetadata = FileAsset | ContractAsset; -export type AssetFile = { - url: string; +export type FileAsset = { verification?: Verification; + url: string; fileType?: string; }; @@ -39,6 +39,11 @@ export type DigitalAsset = { tokenId?: string; }; +export type ContractAsset = { + address: string; + tokenId?: string; +}; + export const LSP3SupportedStandard = { key: '0xeafec4d89fa9619884b600005ef83ad9559033e6e941db7d7c495acdce616347', value: '0x5ef83ad9', diff --git a/packages/lsp4-contracts/constants.ts b/packages/lsp4-contracts/constants.ts index 05a44e7a9..db79d69f1 100644 --- a/packages/lsp4-contracts/constants.ts +++ b/packages/lsp4-contracts/constants.ts @@ -14,6 +14,11 @@ export type LSP4DigitalAssetMetadata = { attributes?: AttributeMetadata[]; }; +export type LinkMetadata = { + title: string; + url: string; +}; + export type ImageMetadata = { width: number; height: number; @@ -21,30 +26,24 @@ export type ImageMetadata = { url: string; }; -export type LinkMetadata = { - title: string; +export type AssetMetadata = FileAsset | ContractAsset; + +export type FileAsset = { + verification?: Verification; url: string; }; +export type ContractAsset = { + address: string; + tokenId?: string; +}; + export type AttributeMetadata = { key: string; value: string; type: string | number | boolean; }; -export type AssetMetadata = AssetFile | DigitalAsset; - -export type AssetFile = { - url: string; - verification?: Verification; - fileType?: string; -}; - -export type DigitalAsset = { - address: string; - tokenId?: string; -}; - export const LSP4SupportedStandard = { key: '0xeafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c', value: '0xa4d96624', From a7c23f4c240d8d24011e7b2e4d7b9e1f075429fc Mon Sep 17 00:00:00 2001 From: b00ste Date: Wed, 5 Jun 2024 14:25:44 +0300 Subject: [PATCH 09/94] docs: fix broken links for solidity implementation --- .../contracts/LSP0ERC725Account.md | 1940 ++++++++++++++ .../contracts/LSP14Ownable2Step.md | 533 ++++ .../contracts/LSP16UniversalFactory.md | 435 ++++ .../contracts/LSP17Extendable.md | 125 + .../contracts/LSP17Extension.md | 117 + .../LSP1UniversalReceiverDelegateUP.md | 278 ++ .../LSP1UniversalReceiverDelegateVault.md | 235 ++ .../contracts/LSP20CallVerification.md | 61 + .../contracts/IPostDeploymentModule.md | 53 + .../contracts/LSP23LinkedContractsFactory.md | 403 +++ .../contracts/LSP25MultiChannelNonce.md | 147 ++ .../contracts/LSP4DigitalAssetMetadata.md | 574 +++++ .../contracts/LSP6KeyManager.md | 1969 ++++++++++++++ .../contracts/LSP7DigitalAsset.md | 1916 ++++++++++++++ .../contracts/extensions/LSP7Burnable.md | 1941 ++++++++++++++ .../contracts/extensions/LSP7CappedSupply.md | 1957 ++++++++++++++ .../contracts/presets/LSP7Mintable.md | 1980 ++++++++++++++ .../contracts/LSP8IdentifiableDigitalAsset.md | 2204 ++++++++++++++++ .../contracts/extensions/LSP8Burnable.md | 2230 ++++++++++++++++ .../contracts/extensions/LSP8CappedSupply.md | 2246 ++++++++++++++++ .../contracts/extensions/LSP8Enumerable.md | 2232 ++++++++++++++++ .../contracts/presets/LSP8Mintable.md | 2295 +++++++++++++++++ .../LSP9Vault/contracts/LSP9Vault.md | 1807 +++++++++++++ .../contracts/UniversalProfile.md | 1869 ++++++++++++++ .../contracts/LSP10Utils.md | 113 + .../contracts/LSP17Utils.md | 38 + .../contracts/LSP1Utils.md | 104 + .../contracts/LSP2Utils.md | 439 ++++ .../LSP5ReceivedAssets/contracts/LSP5Utils.md | 115 + .../LSP6KeyManager/contracts/LSP6Utils.md | 254 ++ .../dodoc/postProcessingContracts.sh | 163 ++ 31 files changed, 30773 insertions(+) create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/contracts/LSP0ERC725Account.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP14Ownable2Step/contracts/LSP14Ownable2Step.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP16UniversalFactory/contracts/LSP16UniversalFactory.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extendable.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extension.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateUP.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateVault.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP20CallVerification/contracts/LSP20CallVerification.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/IPostDeploymentModule.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/LSP23LinkedContractsFactory.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP25ExecuteRelayCall/contracts/LSP25MultiChannelNonce.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP4DigitalAssetMetadata/contracts/LSP4DigitalAssetMetadata.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/LSP7DigitalAsset.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7Burnable.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7CappedSupply.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/LSP8IdentifiableDigitalAsset.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Burnable.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8CappedSupply.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Enumerable.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/presets/LSP8Mintable.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/LSP9Vault/contracts/LSP9Vault.md create mode 100644 packages/lsp-smart-contracts/docs/contracts/UniversalProfile/contracts/UniversalProfile.md create mode 100644 packages/lsp-smart-contracts/docs/libraries/LSP10ReceivedVaults/contracts/LSP10Utils.md create mode 100644 packages/lsp-smart-contracts/docs/libraries/LSP17ContractExtension/contracts/LSP17Utils.md create mode 100644 packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/contracts/LSP1Utils.md create mode 100644 packages/lsp-smart-contracts/docs/libraries/LSP2ERC725YJSONSchema/contracts/LSP2Utils.md create mode 100644 packages/lsp-smart-contracts/docs/libraries/LSP5ReceivedAssets/contracts/LSP5Utils.md create mode 100644 packages/lsp-smart-contracts/docs/libraries/LSP6KeyManager/contracts/LSP6Utils.md diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/contracts/LSP0ERC725Account.md b/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/contracts/LSP0ERC725Account.md new file mode 100644 index 000000000..8ba13d64b --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/contracts/LSP0ERC725Account.md @@ -0,0 +1,1940 @@ + + + +# LSP0ERC725Account + +:::info Standard Specifications + +[`LSP-0-ERC725Account`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md) + +::: +:::info Solidity implementation + +[`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) + +::: + +> Deployable Implementation of [LSP-0-ERC725Account] Standard. + +A smart contract account including basic functionalities such as: + +- Detecting supported standards using [ERC-165] + +- Executing several operation on other addresses including creating contracts using [ERC-725X] + +- A generic data key-value store using [ERC-725Y] + +- Validating signatures using [ERC-1271] + +- Receiving notification and react on them using [LSP-1-UniversalReceiver] + +- Safer ownership management through 2-steps transfer using [LSP-14-Ownable2Step] + +- Extending the account with new functions and interfaceIds of future standards using [LSP-17-ContractExtension] + +- Verifying calls on the owner to make it easier to interact with the account directly using [LSP-20-CallVerification] + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### constructor + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#constructor) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) + +::: + +```solidity +constructor(address initialOwner); +``` + +_Deploying a LSP0ERC725Account contract with owner set to address `initialOwner`._ + +Set `initialOwner` as the contract owner. + +- The `constructor` also allows funding the contract on deployment. + +- The `initialOwner` will then be allowed to call protected functions marked with the `onlyOwner` modifier. + +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) event when funding the contract on deployment. +- [`OwnershipTransferred`](#ownershiptransferred) event when `initialOwner` is set as the contract [`owner`](#owner). + +
+ +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | -------------------------- | +| `initialOwner` | `address` | The owner of the contract. | + +
+ +### fallback + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#fallback) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) + +::: + +:::info + +Whenever the call is associated with native tokens, the function will delegate the handling of native tokens internally to the [`universalReceiver`](#universalreceiver) function +passing `_TYPEID_LSP0_VALUE_RECEIVED` as typeId and the calldata as received data, except when the native token will be sent directly to the extension. + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens with some calldata. + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), return. + +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens and extension function selector is not found or not payable. + +
+ +
+ +### receive + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#receive) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) + +::: + +:::info + +This function internally delegates the handling of native tokens to the [`universalReceiver`](#universalreceiver) function +passing `_TYPEID_LSP0_VALUE_RECEIVED` as typeId and an empty bytes array as received data. + +::: + +```solidity +receive() external payable; +``` + +Executed: + +- When receiving some native tokens without any additional data. + +- On empty calls to the contract. + +
+ +**Emitted events:** + +- Emits a [`UniversalReceiver`](#universalreceiver) event when the `universalReceiver` logic is executed upon receiving native tokens. + +
+ +
+ +### RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#renounce_ownership_confirmation_delay) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY()` +- Function selector: `0xead3fbdf` + +::: + +```solidity +function RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY() + external + view + returns (uint256); +``` + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `uint256` | - | + +
+ +### RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#renounce_ownership_confirmation_period) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD()` +- Function selector: `0x01bfba61` + +::: + +```solidity +function RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD() + external + view + returns (uint256); +``` + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `uint256` | - | + +
+ +### VERSION + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#version) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `VERSION()` +- Function selector: `0xffa1ad74` + +::: + +```solidity +function VERSION() external view returns (string); +``` + +_Contract version._ + +#### Returns + +| Name | Type | Description | +| ---- | :------: | ----------- | +| `0` | `string` | - | + +
+ +### acceptOwnership + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#acceptownership) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `acceptOwnership()` +- Function selector: `0x79ba5097` + +::: + +```solidity +function acceptOwnership() external nonpayable; +``` + +_`msg.sender` is accepting ownership of contract: `address(this)`._ + +Transfer ownership of the contract from the current [`owner()`](#owner) to the [`pendingOwner()`](#pendingowner). Once this function is called: + +- The current [`owner()`](#owner) will lose access to the functions restricted to the [`owner()`](#owner) only. + +- The [`pendingOwner()`](#pendingowner) will gain access to the functions restricted to the [`owner()`](#owner) only. + +
+ +**Requirements:** + +- Only the [`pendingOwner`](#pendingowner) can call this function. +- When notifying the previous owner via LSP1, the typeId used must be the `keccak256(...)` hash of [LSP0OwnershipTransferred_SenderNotification]. +- When notifying the new owner via LSP1, the typeId used must be the `keccak256(...)` hash of [LSP0OwnershipTransferred_RecipientNotification]. + +
+ +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#batchcalls) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### execute + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#execute) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `execute(uint256,address,uint256,bytes)` +- Function selector: `0x44c028fe` + +::: + +```solidity +function execute( + uint256 operationType, + address target, + uint256 value, + bytes data +) external payable returns (bytes); +``` + +_Calling address `target` using `operationType`, transferring `value` wei and data: `data`._ + +Generic executor function to: + +- send native tokens to any address. + +- interact with any contract by passing an abi-encoded function call in the `data` parameter. + +- deploy a contract by providing its creation bytecode in the `data` parameter. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. +- If a `value` is provided, the contract must have at least this amount in its balance to execute successfully. +- If the operation type is `CREATE` (1) or `CREATE2` (2), `target` must be `address(0)`. +- If the operation type is `STATICCALL` (3) or `DELEGATECALL` (4), `value` transfer is disallowed and must be 0. + +
+ +
+ +**Emitted events:** + +- [`Executed`](#executed) event for each call that uses under `operationType`: `CALL` (0), `STATICCALL` (3) and `DELEGATECALL` (4). +- [`ContractCreated`](#contractcreated) event, when a contract is created under `operationType`: `CREATE` (1) and `CREATE2` (2). +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens. + +
+ +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------------------------------------------------------------------------------------------------- | +| `operationType` | `uint256` | The operation type used: CALL = 0; CREATE = 1; CREATE2 = 2; STATICCALL = 3; DELEGATECALL = 4 | +| `target` | `address` | The address of the EOA or smart contract. (unused if a contract is created via operation type 1 or 2) | +| `value` | `uint256` | The amount of native tokens to transfer (in Wei) | +| `data` | `bytes` | The call data, or the creation bytecode of the contract to deploy if `operationType` is `1` or `2`. | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ----------- | +| `0` | `bytes` | - | + +
+ +### executeBatch + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#executebatch) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `executeBatch(uint256[],address[],uint256[],bytes[])` +- Function selector: `0x31858452` + +::: + +:::caution Warning + +- The `msg.value` should not be trusted for any method called within the batch with `operationType`: `DELEGATECALL` (4). + +::: + +```solidity +function executeBatch( + uint256[] operationsType, + address[] targets, + uint256[] values, + bytes[] datas +) external payable returns (bytes[]); +``` + +_Calling multiple addresses `targets` using `operationsType`, transferring `values` wei and data: `datas`._ + +Batch executor function that behaves the same as [`execute`](#execute) but allowing multiple operations in the same transaction. + +
+ +**Requirements:** + +- The length of the parameters provided must be equal. +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. +- If a `value` is provided, the contract must have at least this amount in its balance to execute successfully. +- If the operation type is `CREATE` (1) or `CREATE2` (2), `target` must be `address(0)`. +- If the operation type is `STATICCALL` (3) or `DELEGATECALL` (4), `value` transfer is disallowed and must be 0. + +
+ +
+ +**Emitted events:** + +- [`Executed`](#executed) event for each call that uses under `operationType`: `CALL` (0), `STATICCALL` (3) and `DELEGATECALL` (4). (each iteration) +- [`ContractCreated`](#contractcreated) event, when a contract is created under `operationType`: `CREATE` (1) and `CREATE2` (2) (each iteration) +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------------- | :---------: | --------------------------------------------------------------------------------------------------------------- | +| `operationsType` | `uint256[]` | The list of operations type used: `CALL = 0`; `CREATE = 1`; `CREATE2 = 2`; `STATICCALL = 3`; `DELEGATECALL = 4` | +| `targets` | `address[]` | The list of addresses to call. `targets` will be unused if a contract is created (operation types 1 and 2). | +| `values` | `uint256[]` | The list of native token amounts to transfer (in Wei). | +| `datas` | `bytes[]` | The list of calldata, or the creation bytecode of the contract to deploy if `operationType` is `1` or `2`. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `bytes[]` | - | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#getdata) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#getdatabatch) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### isValidSignature + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#isvalidsignature) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `isValidSignature(bytes32,bytes)` +- Function selector: `0x1626ba7e` + +::: + +:::caution Warning + +This function does not enforce by default the inclusion of the address of this contract in the signature digest. It is recommended that protocols or applications using this contract include the targeted address (= this contract) in the data to sign. To ensure that a signature is valid for a specific LSP0ERC725Account and prevent signatures from the same EOA to be replayed across different LSP0ERC725Accounts. + +::: + +```solidity +function isValidSignature( + bytes32 dataHash, + bytes signature +) external view returns (bytes4 returnedStatus); +``` + +_Achieves the goal of [EIP-1271] by validating signatures of smart contracts according to their own logic._ + +Handles two cases: + +1. If the owner is an EOA, recovers an address from the hash and the signature provided: + +- Returns the `_ERC1271_SUCCESSVALUE` if the address recovered is the same as the owner, indicating that it was a valid signature. + +- If the address is different, it returns the `_ERC1271_FAILVALUE` indicating that the signature is not valid. + +2. If the owner is a smart contract, it forwards the call of [`isValidSignature()`](#isvalidsignature) to the owner contract: + +- If the contract fails or returns the `_ERC1271_FAILVALUE`, the [`isValidSignature()`](#isvalidsignature) on the account returns the `_ERC1271_FAILVALUE`, indicating that the signature is not valid. + +- If the [`isValidSignature()`](#isvalidsignature) on the owner returned the `_ERC1271_SUCCESSVALUE`, the [`isValidSignature()`](#isvalidsignature) on the account returns the `_ERC1271_SUCCESSVALUE`, indicating that it's a valid signature. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------------------------ | +| `dataHash` | `bytes32` | The hash of the data to be validated. | +| `signature` | `bytes` | A signature that can validate the previous parameter (Hash). | + +#### Returns + +| Name | Type | Description | +| ---------------- | :------: | ----------------------------------------------------------------- | +| `returnedStatus` | `bytes4` | A `bytes4` value that indicates if the signature is valid or not. | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#owner) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### pendingOwner + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#pendingowner) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `pendingOwner()` +- Function selector: `0xe30c3978` + +::: + +:::info + +If no ownership transfer is in progress, the pendingOwner will be `address(0).`. + +::: + +```solidity +function pendingOwner() external view returns (address); +``` + +The address that ownership of the contract is transferred to. This address may use [`acceptOwnership()`](#acceptownership) to gain ownership of the contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#renounceownership) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +:::danger + +Leaves the contract without an owner. Once ownership of the contract has been renounced, any functions that are restricted to be called by the owner or an address allowed by the owner will be permanently inaccessible, making these functions not callable anymore and unusable. + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +_`msg.sender` is renouncing ownership of contract `address(this)`._ + +Renounce ownership of the contract in a 2-step process. + +1. The first call will initiate the process of renouncing ownership. + +2. The second call is used as a confirmation and will leave the contract without an owner. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. + +
+ +
+ +### setData + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#setdata) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. + +
+ +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens. +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#setdatabatch) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. + +
+ +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens. +- [`DataChanged`](#datachanged) event. (on each iteration of setting data) + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#supportsinterface) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +_Checking if this contract supports the interface defined by the `bytes4` interface ID `interfaceId`._ + +Achieves the goal of [ERC-165] to detect supported interfaces and [LSP-17-ContractExtension] by checking if the interfaceId being queried is supported on another linked extension. If the contract doesn't support the `interfaceId`, it forwards the call to the `supportsInterface` extension according to [LSP-17-ContractExtension], and checks if the extension implements the interface defined by `interfaceId`. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ------------------------------------------------------ | +| `interfaceId` | `bytes4` | The interface ID to check if the contract supports it. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | --------------------------------------------------------------------------------------------- | +| `0` | `bool` | `true` if this contract implements the interface defined by `interfaceId`, `false` otherwise. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#transferownership) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address pendingNewOwner) external nonpayable; +``` + +_Transfer ownership initiated by `newOwner`._ + +Initiate the process of transferring ownership of the contract by setting the new owner as the pending owner. If the new owner is a contract that supports + implements LSP1, this will also attempt to notify the new owner that ownership has been transferred to them by calling the [`universalReceiver()`](#universalreceiver) function on the `newOwner` contract. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. +- When notifying the new owner via LSP1, the `typeId` used must be the `keccak256(...)` hash of [LSP0OwnershipTransferStarted]. +- Pending owner cannot accept ownership in the same tx via the LSP1 hook. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------------- | :-------: | ----------- | +| `pendingNewOwner` | `address` | - | + +
+ +### universalReceiver + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#universalreceiver) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Function signature: `universalReceiver(bytes32,bytes)` +- Function selector: `0x6bb56a14` + +::: + +```solidity +function universalReceiver( + bytes32 typeId, + bytes receivedData +) external payable returns (bytes returnedValues); +``` + +_Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`._ + +Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. The function performs the following steps: + +1. Query the [ERC-725Y] storage with the data key [_LSP1_UNIVERSAL_RECEIVER_DELEGATE_KEY]. + +- If there is an address stored under the data key, check if this address supports the LSP1 interfaceId. + +- If yes, call this address with the typeId and data (params), along with additional calldata consisting of 20 bytes of `msg.sender` and 32 bytes of `msg.value`. If not, continue the execution of the function. + +2. Query the [ERC-725Y] storage with the data key [_LSP1_UNIVERSAL_RECEIVER_DELEGATE_PREFIX] + `bytes32(typeId)`. (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is an address stored under the data key, check if this address supports the LSP1 interfaceId. + +- If yes, call this address with the typeId and data (params), along with additional calldata consisting of 20 bytes of `msg.sender` and 32 bytes of `msg.value`. If not, continue the execution of the function. This function delegates internally the handling of native tokens to the [`universalReceiver`](#universalreceiver) function itself passing `_TYPEID_LSP0_VALUE_RECEIVED` as typeId and the calldata as received data. + +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) when receiving native tokens. +- [`UniversalReceiver`](#universalreceiver) event with the function parameters, call options, and the response of the UniversalReceiverDelegates (URD) contract that was called. + +
+ +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | -------------------------- | +| `typeId` | `bytes32` | The type of call received. | +| `receivedData` | `bytes` | The data received. | + +#### Returns + +| Name | Type | Description | +| ---------------- | :-----: | ------------------------------------------------------------------------------------------------------- | +| `returnedValues` | `bytes` | The ABI encoded return value of the LSP1UniversalReceiverDelegate call and the LSP1TypeIdDelegate call. | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_execute + +```solidity +function _execute( + uint256 operationType, + address target, + uint256 value, + bytes data +) internal nonpayable returns (bytes); +``` + +check the `operationType` provided and perform the associated low-level opcode after checking for requirements (see [`execute`](#execute)). + +
+ +### \_executeBatch + +```solidity +function _executeBatch( + uint256[] operationsType, + address[] targets, + uint256[] values, + bytes[] datas +) internal nonpayable returns (bytes[]); +``` + +check each `operationType` provided in the batch and perform the associated low-level opcode after checking for requirements (see [`executeBatch`](#executebatch)). + +
+ +### \_executeCall + +```solidity +function _executeCall( + address target, + uint256 value, + bytes data +) internal nonpayable returns (bytes result); +``` + +Perform low-level call (operation type = 0) + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------- | +| `target` | `address` | The address on which call is executed | +| `value` | `uint256` | The value to be sent with the call | +| `data` | `bytes` | The data to be sent with the call | + +#### Returns + +| Name | Type | Description | +| -------- | :-----: | ---------------------- | +| `result` | `bytes` | The data from the call | + +
+ +### \_executeStaticCall + +```solidity +function _executeStaticCall( + address target, + bytes data +) internal nonpayable returns (bytes result); +``` + +Perform low-level staticcall (operation type = 3) + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------- | +| `target` | `address` | The address on which staticcall is executed | +| `data` | `bytes` | The data to be sent with the staticcall | + +#### Returns + +| Name | Type | Description | +| -------- | :-----: | ------------------------------------- | +| `result` | `bytes` | The data returned from the staticcall | + +
+ +### \_executeDelegateCall + +:::caution Warning + +The `msg.value` should not be trusted for any method called with `operationType`: `DELEGATECALL` (4). + +::: + +```solidity +function _executeDelegateCall( + address target, + bytes data +) internal nonpayable returns (bytes result); +``` + +Perform low-level delegatecall (operation type = 4) + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | --------------------------------------------- | +| `target` | `address` | The address on which delegatecall is executed | +| `data` | `bytes` | The data to be sent with the delegatecall | + +#### Returns + +| Name | Type | Description | +| -------- | :-----: | --------------------------------------- | +| `result` | `bytes` | The data returned from the delegatecall | + +
+ +### \_deployCreate + +```solidity +function _deployCreate( + uint256 value, + bytes creationCode +) internal nonpayable returns (bytes newContract); +``` + +Deploy a contract using the `CREATE` opcode (operation type = 1) + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ---------------------------------------------------------------------------------- | +| `value` | `uint256` | The value to be sent to the contract created | +| `creationCode` | `bytes` | The contract creation bytecode to deploy appended with the constructor argument(s) | + +#### Returns + +| Name | Type | Description | +| ------------- | :-----: | -------------------------------------------- | +| `newContract` | `bytes` | The address of the contract created as bytes | + +
+ +### \_deployCreate2 + +```solidity +function _deployCreate2( + uint256 value, + bytes creationCode +) internal nonpayable returns (bytes newContract); +``` + +Deploy a contract using the `CREATE2` opcode (operation type = 2) + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ----------------------------------------------------------------------------------------------------- | +| `value` | `uint256` | The value to be sent to the contract created | +| `creationCode` | `bytes` | The contract creation bytecode to deploy appended with the constructor argument(s) and a bytes32 salt | + +#### Returns + +| Name | Type | Description | +| ------------- | :-----: | -------------------------------------------- | +| `newContract` | `bytes` | The address of the contract created as bytes | + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +Write a `dataValue` to the underlying ERC725Y storage, represented as a mapping of +`bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event emitted after a successful `setData` call. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to write the associated `bytes` value to the store. | +| `dataValue` | `bytes` | The `bytes` value to associate with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_transferOwnership + +```solidity +function _transferOwnership(address newOwner) internal nonpayable; +``` + +Set the pending owner of the contract and cancel any renounce ownership process that was previously started. + +
+ +**Requirements:** + +- `newOwner` cannot be the address of the contract itself. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------- | +| `newOwner` | `address` | The address of the new pending owner. | + +
+ +### \_acceptOwnership + +```solidity +function _acceptOwnership() internal nonpayable; +``` + +Set the pending owner of the contract as the new owner. + +
+ +### \_renounceOwnership + +```solidity +function _renounceOwnership() internal nonpayable; +``` + +Initiate or confirm the process of renouncing ownership after a specific delay of blocks have passed. + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address and the boolean indicating whether to forward the value received to the extension, stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +- If the stored value is 20 bytes, return false for the boolean + +
+ +### \_fallbackLSP17Extendable + +:::tip Hint + +If you would like to forward the `msg.value` to the extension contract, you should store an additional `0x01` byte after the address of the extension under the corresponding LSP17 data key. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the `address(0)` will be returned. +Forwards the value sent with the call to the extension if the function selector is mapped to a payable extension. +Reverts if there is no extension for the function being called, except for the `bytes4(0)` function selector, which passes even if there is no extension for it. +If there is an extension for the function selector being called, it calls the extension with the +`CALL` opcode, passing the `msg.data` appended with the 20 bytes of the [`msg.sender`](#msg.sender) and 32 bytes of the `msg.value`. + +
+ +### \_verifyCall + +```solidity +function _verifyCall( + address logicVerifier +) internal nonpayable returns (bool verifyAfter); +``` + +Calls [`lsp20VerifyCall`](#lsp20verifycall) function on the logicVerifier. + +
+ +### \_verifyCallResult + +```solidity +function _verifyCallResult( + address logicVerifier, + bytes callResult +) internal nonpayable; +``` + +Calls [`lsp20VerifyCallResult`](#lsp20verifycallresult) function on the logicVerifier. + +
+ +### \_revertWithLSP20DefaultError + +```solidity +function _revertWithLSP20DefaultError( + bool postCall, + bytes returnedData +) internal pure; +``` + +
+ +## Events + +### ContractCreated + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#contractcreated) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Event signature: `ContractCreated(uint256,address,uint256,bytes32)` +- Event topic hash: `0xa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c3` + +::: + +```solidity +event ContractCreated( + uint256 indexed operationType, + address indexed contractAddress, + uint256 value, + bytes32 indexed salt +); +``` + +_Deployed new contract at address `contractAddress` and funded with `value` wei (deployed using opcode: `operationType`)._ + +Emitted when a new contract was created and deployed. + +#### Parameters + +| Name | Type | Description | +| ------------------------------- | :-------: | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `operationType` **`indexed`** | `uint256` | The opcode used to deploy the contract (`CREATE` or `CREATE2`). | +| `contractAddress` **`indexed`** | `address` | The created contract address. | +| `value` | `uint256` | The amount of native tokens (in Wei) sent to fund the created contract on deployment. | +| `salt` **`indexed`** | `bytes32` | The salt used to deterministically deploy the contract (`CREATE2` only). If `CREATE` opcode is used, the salt value will be `bytes32(0)`. | + +
+ +### DataChanged + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#datachanged) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### Executed + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#executed) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Event signature: `Executed(uint256,address,uint256,bytes4)` +- Event topic hash: `0x4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e` + +::: + +```solidity +event Executed( + uint256 indexed operationType, + address indexed target, + uint256 value, + bytes4 indexed selector +); +``` + +_Called address `target` using `operationType` with `value` wei and `data`._ + +Emitted when calling an address `target` (EOA or contract) with `value`. + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ---------------------------------------------------------------------------------------------------- | +| `operationType` **`indexed`** | `uint256` | The low-level call opcode used to call the `target` address (`CALL`, `STATICALL` or `DELEGATECALL`). | +| `target` **`indexed`** | `address` | The address to call. `target` will be unused if a contract is created (operation types 1 and 2). | +| `value` | `uint256` | The amount of native tokens transferred along the call (in Wei). | +| `selector` **`indexed`** | `bytes4` | The first 4 bytes (= function selector) of the data sent with the call. | + +
+ +### OwnershipRenounced + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#ownershiprenounced) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Event signature: `OwnershipRenounced()` +- Event topic hash: `0xd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce` + +::: + +```solidity +event OwnershipRenounced(); +``` + +_Successfully renounced ownership of the contract. This contract is now owned by anyone, it's owner is `address(0)`._ + +Emitted when the ownership of the contract has been renounced. + +
+ +### OwnershipTransferStarted + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#ownershiptransferstarted) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Event signature: `OwnershipTransferStarted(address,address)` +- Event topic hash: `0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700` + +::: + +```solidity +event OwnershipTransferStarted( + address indexed previousOwner, + address indexed newOwner +); +``` + +_The transfer of ownership of the contract was initiated. Pending new owner set to: `newOwner`._ + +Emitted when [`transferOwnership(..)`](#transferownership) was called and the first step of transferring ownership completed successfully which leads to [`pendingOwner`](#pendingowner) being updated. + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ---------------------------------- | +| `previousOwner` **`indexed`** | `address` | The address of the previous owner. | +| `newOwner` **`indexed`** | `address` | The address of the new owner. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#ownershiptransferred) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### RenounceOwnershipStarted + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#renounceownershipstarted) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Event signature: `RenounceOwnershipStarted()` +- Event topic hash: `0x81b7f830f1f0084db6497c486cbe6974c86488dcc4e3738eab94ab6d6b1653e7` + +::: + +```solidity +event RenounceOwnershipStarted(); +``` + +_Ownership renouncement initiated._ + +Emitted when starting the [`renounceOwnership(..)`](#renounceownership) 2-step process. + +
+ +### UniversalReceiver + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#universalreceiver) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Event signature: `UniversalReceiver(address,uint256,bytes32,bytes,bytes)` +- Event topic hash: `0x9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c2` + +::: + +```solidity +event UniversalReceiver( + address indexed from, + uint256 indexed value, + bytes32 indexed typeId, + bytes receivedData, + bytes returnedValue +); +``` + +\*Address `from` called the `universalReceiver(...)` function while sending `value` LYX. Notification type (typeId): `typeId` + +- Data received: `receivedData`.\* + +Emitted when the [`universalReceiver`](#universalreceiver) function was called with a specific `typeId` and some `receivedData` + +#### Parameters + +| Name | Type | Description | +| ---------------------- | :-------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` **`indexed`** | `address` | The address of the EOA or smart contract that called the [`universalReceiver(...)`](#universalreceiver) function. | +| `value` **`indexed`** | `uint256` | The amount sent to the [`universalReceiver(...)`](#universalreceiver) function. | +| `typeId` **`indexed`** | `bytes32` | A `bytes32` unique identifier (= _"hook"_)that describe the type of notification, information or transaction received by the contract. Can be related to a specific standard or a hook. | +| `receivedData` | `bytes` | Any arbitrary data that was sent to the [`universalReceiver(...)`](#universalreceiver) function. | +| `returnedValue` | `bytes` | The value returned by the [`universalReceiver(...)`](#universalreceiver) function. | + +
+ +## Errors + +### ERC725X_ContractDeploymentFailed + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725x_contractdeploymentfailed) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725X_ContractDeploymentFailed()` +- Error hash: `0x0b07489b` + +::: + +```solidity +error ERC725X_ContractDeploymentFailed(); +``` + +Reverts when contract deployment failed via [`execute`](#execute) or [`executeBatch`](#executebatch) functions, This error can occur using either operation type 1 (`CREATE`) or 2 (`CREATE2`). + +
+ +### ERC725X_CreateOperationsRequireEmptyRecipientAddress + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725x_createoperationsrequireemptyrecipientaddress) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725X_CreateOperationsRequireEmptyRecipientAddress()` +- Error hash: `0x3041824a` + +::: + +```solidity +error ERC725X_CreateOperationsRequireEmptyRecipientAddress(); +``` + +Reverts when passing a `to` address that is not `address(0)` (= address zero) while deploying a contract via [`execute`](#execute) or [`executeBatch`](#executebatch) functions. This error can occur using either operation type 1 (`CREATE`) or 2 (`CREATE2`). + +
+ +### ERC725X_ExecuteParametersEmptyArray + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725x_executeparametersemptyarray) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725X_ExecuteParametersEmptyArray()` +- Error hash: `0xe9ad2b5f` + +::: + +```solidity +error ERC725X_ExecuteParametersEmptyArray(); +``` + +Reverts when one of the array parameter provided to the [`executeBatch`](#executebatch) function is an empty array. + +
+ +### ERC725X_ExecuteParametersLengthMismatch + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725x_executeparameterslengthmismatch) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725X_ExecuteParametersLengthMismatch()` +- Error hash: `0x3ff55f4d` + +::: + +```solidity +error ERC725X_ExecuteParametersLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `operationTypes`, `targets` addresses, `values`, and `datas` array parameters provided when calling the [`executeBatch`](#executebatch) function. + +
+ +### ERC725X_InsufficientBalance + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725x_insufficientbalance) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725X_InsufficientBalance(uint256,uint256)` +- Error hash: `0x0df9a8f8` + +::: + +```solidity +error ERC725X_InsufficientBalance(uint256 balance, uint256 value); +``` + +Reverts when trying to send more native tokens `value` than available in current `balance`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------- | +| `balance` | `uint256` | The balance of native tokens of the ERC725X smart contract. | +| `value` | `uint256` | The amount of native tokens sent via `ERC725X.execute(...)`/`ERC725X.executeBatch(...)` that is greater than the contract's `balance`. | + +
+ +### ERC725X_MsgValueDisallowedInDelegateCall + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725x_msgvaluedisallowedindelegatecall) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725X_MsgValueDisallowedInDelegateCall()` +- Error hash: `0x5ac83135` + +::: + +```solidity +error ERC725X_MsgValueDisallowedInDelegateCall(); +``` + +Reverts when trying to send native tokens (`value` / `values[]` parameter of [`execute`](#execute) or [`executeBatch`](#executebatch) functions) while making a `delegatecall` (`operationType == 4`). Sending native tokens via `staticcall` is not allowed because `msg.value` is persisting. + +
+ +### ERC725X_MsgValueDisallowedInStaticCall + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725x_msgvaluedisallowedinstaticcall) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725X_MsgValueDisallowedInStaticCall()` +- Error hash: `0x72f2bc6a` + +::: + +```solidity +error ERC725X_MsgValueDisallowedInStaticCall(); +``` + +Reverts when trying to send native tokens (`value` / `values[]` parameter of [`execute`](#execute) or [`executeBatch`](#executebatch) functions) while making a `staticcall` (`operationType == 3`). Sending native tokens via `staticcall` is not allowed because it is a state changing operation. + +
+ +### ERC725X_NoContractBytecodeProvided + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725x_nocontractbytecodeprovided) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725X_NoContractBytecodeProvided()` +- Error hash: `0xb81cd8d9` + +::: + +```solidity +error ERC725X_NoContractBytecodeProvided(); +``` + +Reverts when no contract bytecode was provided as parameter when trying to deploy a contract via [`execute`](#execute) or [`executeBatch`](#executebatch). This error can occur using either operation type 1 (`CREATE`) or 2 (`CREATE2`). + +
+ +### ERC725X_UnknownOperationType + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725x_unknownoperationtype) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725X_UnknownOperationType(uint256)` +- Error hash: `0x7583b3bc` + +::: + +```solidity +error ERC725X_UnknownOperationType(uint256 operationTypeProvided); +``` + +Reverts when the `operationTypeProvided` is none of the default operation types available. (CALL = 0; CREATE = 1; CREATE2 = 2; STATICCALL = 3; DELEGATECALL = 4) + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | ------------------------------------------------------------------------------------------------------ | +| `operationTypeProvided` | `uint256` | The unrecognised operation type number provided to `ERC725X.execute(...)`/`ERC725X.executeBatch(...)`. | + +
+ +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### LSP14CallerNotPendingOwner + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#lsp14callernotpendingowner) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `LSP14CallerNotPendingOwner(address)` +- Error hash: `0x451e4528` + +::: + +```solidity +error LSP14CallerNotPendingOwner(address caller); +``` + +Reverts when the `caller` that is trying to accept ownership of the contract is not the pending owner. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------- | +| `caller` | `address` | The address that tried to accept ownership. | + +
+ +### LSP14CannotTransferOwnershipToSelf + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#lsp14cannottransferownershiptoself) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `LSP14CannotTransferOwnershipToSelf()` +- Error hash: `0xe052a6f8` + +::: + +```solidity +error LSP14CannotTransferOwnershipToSelf(); +``` + +_Cannot transfer ownership to the address of the contract itself._ + +Reverts when trying to transfer ownership to the `address(this)`. + +
+ +### LSP14MustAcceptOwnershipInSeparateTransaction + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#lsp14mustacceptownershipinseparatetransaction) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `LSP14MustAcceptOwnershipInSeparateTransaction()` +- Error hash: `0x5758dd07` + +::: + +```solidity +error LSP14MustAcceptOwnershipInSeparateTransaction(); +``` + +_Cannot accept ownership in the same transaction with [`transferOwnership(...)`](#transferownership)._ + +Reverts when pending owner accept ownership in the same transaction of transferring ownership. + +
+ +### LSP14NotInRenounceOwnershipInterval + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#lsp14notinrenounceownershipinterval) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `LSP14NotInRenounceOwnershipInterval(uint256,uint256)` +- Error hash: `0x1b080942` + +::: + +```solidity +error LSP14NotInRenounceOwnershipInterval( + uint256 renounceOwnershipStart, + uint256 renounceOwnershipEnd +); +``` + +_Cannot confirm ownership renouncement yet. The ownership renouncement is allowed from: `renounceOwnershipStart` until: `renounceOwnershipEnd`._ + +Reverts when trying to renounce ownership before the initial confirmation delay. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ----------------------------------------------------------------------- | +| `renounceOwnershipStart` | `uint256` | The start timestamp when one can confirm the renouncement of ownership. | +| `renounceOwnershipEnd` | `uint256` | The end timestamp when one can confirm the renouncement of ownership. | + +
+ +### LSP20CallVerificationFailed + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#lsp20callverificationfailed) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `LSP20CallVerificationFailed(bool,bytes4)` +- Error hash: `0x9d6741e3` + +::: + +```solidity +error LSP20CallVerificationFailed(bool postCall, bytes4 returnedStatus); +``` + +reverts when the call to the owner does not return the LSP20 success value + +#### Parameters + +| Name | Type | Description | +| ---------------- | :------: | ------------------------------------------------------- | +| `postCall` | `bool` | True if the execution call was done, False otherwise | +| `returnedStatus` | `bytes4` | The bytes4 decoded data returned by the logic verifier. | + +
+ +### LSP20CallingVerifierFailed + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#lsp20callingverifierfailed) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `LSP20CallingVerifierFailed(bool)` +- Error hash: `0x8c6a8ae3` + +::: + +```solidity +error LSP20CallingVerifierFailed(bool postCall); +``` + +reverts when the call to the owner fail with no revert reason + +#### Parameters + +| Name | Type | Description | +| ---------- | :----: | ---------------------------------------------------- | +| `postCall` | `bool` | True if the execution call was done, False otherwise | + +
+ +### LSP20EOACannotVerifyCall + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#lsp20eoacannotverifycall) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `LSP20EOACannotVerifyCall(address)` +- Error hash: `0x0c392301` + +::: + +```solidity +error LSP20EOACannotVerifyCall(address logicVerifier); +``` + +Reverts when the logic verifier is an Externally Owned Account (EOA) that cannot return the LSP20 success value. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | --------------------------------- | +| `logicVerifier` | `address` | The address of the logic verifier | + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-0-ERC725Account**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP0ERC725Account.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP14Ownable2Step/contracts/LSP14Ownable2Step.md b/packages/lsp-smart-contracts/docs/contracts/LSP14Ownable2Step/contracts/LSP14Ownable2Step.md new file mode 100644 index 000000000..40475d06c --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP14Ownable2Step/contracts/LSP14Ownable2Step.md @@ -0,0 +1,533 @@ + + + +# LSP14Ownable2Step + +:::info Standard Specifications + +[`LSP-14-Ownable2Step`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md) + +::: +:::info Solidity implementation + +[`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) + +::: + +> LSP14Ownable2Step + +This contract is a modified version of the [`OwnableUnset.sol`] implementation, where transferring and renouncing ownership works as a 2-step process. This can be used as a confirmation mechanism to prevent potential mistakes when transferring ownership of the contract, where the control of the contract could be lost forever. (_e.g: providing the wrong address as a parameter to the function, transferring ownership to an EOA for which the user lost its private key, etc..._) + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#renounce_ownership_confirmation_delay) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Function signature: `RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY()` +- Function selector: `0xead3fbdf` + +::: + +```solidity +function RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY() + external + view + returns (uint256); +``` + +The number of block that MUST pass before one is able to confirm renouncing ownership. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------- | +| `0` | `uint256` | Number of blocks. | + +
+ +### RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#renounce_ownership_confirmation_period) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Function signature: `RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD()` +- Function selector: `0x01bfba61` + +::: + +```solidity +function RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD() + external + view + returns (uint256); +``` + +The number of blocks during which one can renounce ownership. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------- | +| `0` | `uint256` | Number of blocks. | + +
+ +### acceptOwnership + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#acceptownership) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Function signature: `acceptOwnership()` +- Function selector: `0x79ba5097` + +::: + +```solidity +function acceptOwnership() external nonpayable; +``` + +_`msg.sender` is accepting ownership of contract: `address(this)`._ + +Transfer ownership of the contract from the current [`owner()`](#owner) to the [`pendingOwner()`](#pendingowner). Once this function is called: + +- The current [`owner()`](#owner) will lose access to the functions restricted to the [`owner()`](#owner) only. + +- The [`pendingOwner()`](#pendingowner) will gain access to the functions restricted to the [`owner()`](#owner) only. + +
+ +**Requirements:** + +- This function can only be called by the [`pendingOwner()`](#pendingowner). + +
+ +
+ +### owner + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#owner) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### pendingOwner + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#pendingowner) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Function signature: `pendingOwner()` +- Function selector: `0xe30c3978` + +::: + +:::info + +If no ownership transfer is in progress, the pendingOwner will be `address(0).`. + +::: + +```solidity +function pendingOwner() external view returns (address); +``` + +The address that ownership of the contract is transferred to. This address may use [`acceptOwnership()`](#acceptownership) to gain ownership of the contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#renounceownership) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +:::danger + +Leaves the contract without an owner. Once ownership of the contract has been renounced, any function that is restricted to be called only by the owner will be permanently inaccessible, making these functions not callable anymore and unusable. + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +_`msg.sender` is renouncing ownership of contract `address(this)`._ + +Renounce ownership of the contract in a 2-step process. + +1. The first call will initiate the process of renouncing ownership. + +2. The second call is used as a confirmation and will leave the contract without an owner. + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#transferownership) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +_Transfer ownership initiated by `newOwner`._ + +Initiate the process of transferring ownership of the contract by setting the new owner as the pending owner. If the new owner is a contract that supports + implements LSP1, this will also attempt to notify the new owner that ownership has been transferred to them by calling the [`universalReceiver()`](#universalreceiver) function on the `newOwner` contract. + +
+ +**Requirements:** + +- `newOwner` cannot accept ownership of the contract in the same transaction. (For instance, via a callback from its [`universalReceiver(...)`](#universalreceiver) function). + +
+ +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------------------------- | +| `newOwner` | `address` | The address of the new owner. | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_transferOwnership + +```solidity +function _transferOwnership(address newOwner) internal nonpayable; +``` + +Set the pending owner of the contract and cancel any renounce ownership process that was previously started. + +
+ +**Requirements:** + +- `newOwner` cannot be the address of the contract itself. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------- | +| `newOwner` | `address` | The address of the new pending owner. | + +
+ +### \_acceptOwnership + +```solidity +function _acceptOwnership() internal nonpayable; +``` + +Set the pending owner of the contract as the new owner. + +
+ +### \_renounceOwnership + +```solidity +function _renounceOwnership() internal nonpayable; +``` + +Initiate or confirm the process of renouncing ownership after a specific delay of blocks have passed. + +
+ +## Events + +### OwnershipRenounced + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#ownershiprenounced) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Event signature: `OwnershipRenounced()` +- Event topic hash: `0xd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce` + +::: + +```solidity +event OwnershipRenounced(); +``` + +_Successfully renounced ownership of the contract. This contract is now owned by anyone, it's owner is `address(0)`._ + +Emitted when the ownership of the contract has been renounced. + +
+ +### OwnershipTransferStarted + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#ownershiptransferstarted) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Event signature: `OwnershipTransferStarted(address,address)` +- Event topic hash: `0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700` + +::: + +```solidity +event OwnershipTransferStarted( + address indexed previousOwner, + address indexed newOwner +); +``` + +_The transfer of ownership of the contract was initiated. Pending new owner set to: `newOwner`._ + +Emitted when [`transferOwnership(..)`](#transferownership) was called and the first step of transferring ownership completed successfully which leads to [`pendingOwner`](#pendingowner) being updated. + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ---------------------------------- | +| `previousOwner` **`indexed`** | `address` | The address of the previous owner. | +| `newOwner` **`indexed`** | `address` | The address of the new owner. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#ownershiptransferred) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### RenounceOwnershipStarted + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#renounceownershipstarted) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Event signature: `RenounceOwnershipStarted()` +- Event topic hash: `0x81b7f830f1f0084db6497c486cbe6974c86488dcc4e3738eab94ab6d6b1653e7` + +::: + +```solidity +event RenounceOwnershipStarted(); +``` + +_Ownership renouncement initiated._ + +Emitted when starting the [`renounceOwnership(..)`](#renounceownership) 2-step process. + +
+ +## Errors + +### LSP14CallerNotPendingOwner + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#lsp14callernotpendingowner) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Error signature: `LSP14CallerNotPendingOwner(address)` +- Error hash: `0x451e4528` + +::: + +```solidity +error LSP14CallerNotPendingOwner(address caller); +``` + +Reverts when the `caller` that is trying to accept ownership of the contract is not the pending owner. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------- | +| `caller` | `address` | The address that tried to accept ownership. | + +
+ +### LSP14CannotTransferOwnershipToSelf + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#lsp14cannottransferownershiptoself) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Error signature: `LSP14CannotTransferOwnershipToSelf()` +- Error hash: `0xe052a6f8` + +::: + +```solidity +error LSP14CannotTransferOwnershipToSelf(); +``` + +_Cannot transfer ownership to the address of the contract itself._ + +Reverts when trying to transfer ownership to the `address(this)`. + +
+ +### LSP14MustAcceptOwnershipInSeparateTransaction + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#lsp14mustacceptownershipinseparatetransaction) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Error signature: `LSP14MustAcceptOwnershipInSeparateTransaction()` +- Error hash: `0x5758dd07` + +::: + +```solidity +error LSP14MustAcceptOwnershipInSeparateTransaction(); +``` + +_Cannot accept ownership in the same transaction with [`transferOwnership(...)`](#transferownership)._ + +Reverts when pending owner accept ownership in the same transaction of transferring ownership. + +
+ +### LSP14NotInRenounceOwnershipInterval + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#lsp14notinrenounceownershipinterval) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Error signature: `LSP14NotInRenounceOwnershipInterval(uint256,uint256)` +- Error hash: `0x1b080942` + +::: + +```solidity +error LSP14NotInRenounceOwnershipInterval( + uint256 renounceOwnershipStart, + uint256 renounceOwnershipEnd +); +``` + +_Cannot confirm ownership renouncement yet. The ownership renouncement is allowed from: `renounceOwnershipStart` until: `renounceOwnershipEnd`._ + +Reverts when trying to renounce ownership before the initial confirmation delay. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ----------------------------------------------------------------------- | +| `renounceOwnershipStart` | `uint256` | The start timestamp when one can confirm the renouncement of ownership. | +| `renounceOwnershipEnd` | `uint256` | The end timestamp when one can confirm the renouncement of ownership. | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-14-Ownable2Step**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-14-Ownable2Step.md#ownablecallernottheowner) +- Solidity implementation: [`LSP14Ownable2Step.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP16UniversalFactory/contracts/LSP16UniversalFactory.md b/packages/lsp-smart-contracts/docs/contracts/LSP16UniversalFactory/contracts/LSP16UniversalFactory.md new file mode 100644 index 000000000..6e0bee380 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP16UniversalFactory/contracts/LSP16UniversalFactory.md @@ -0,0 +1,435 @@ + + + +# LSP16UniversalFactory + +:::info Standard Specifications + +[`LSP-16-UniversalFactory`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md) + +::: +:::info Solidity implementation + +[`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) + +::: + +> LSP16 Universal Factory + +Factory contract to deploy different types of contracts using the CREATE2 opcode standardized as LSP16 + +- UniversalFactory: https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md The UniversalFactory will be deployed using Nick's Factory (0x4e59b44847b379578588920ca78fbf26c0b4956c) The deployed address can be found in the LSP16 specification. Please refer to the LSP16 Specification to obtain the exact creation bytecode and salt that should be used to produce the address of the UniversalFactory on different chains. This factory contract is designed to deploy contracts at the same address on multiple chains. The UniversalFactory can deploy 2 types of contracts: + +- non-initializable (normal deployment) + +- initializable (external call after deployment, e.g: proxy contracts) The `providedSalt` parameter given by the deployer is not used directly as the salt by the CREATE2 opcode. Instead, it is used along with these parameters: + +- `initializable` boolean + +- `initializeCalldata` (when the contract is initializable and `initializable` is set to `true`). These three parameters are concatenated together and hashed to generate the final salt for CREATE2. See [`generateSalt`](#generatesalt) function for more details. The constructor and `initializeCalldata` SHOULD NOT include any network-specific parameters (e.g: chain-id, a local token contract address), otherwise the deployed contract will not be recreated at the same address across different networks, thus defeating the purpose of the UniversalFactory. One way to solve this problem is to set an EOA owner in the `initializeCalldata`/constructor that can later call functions that set these parameters as variables in the contract. The UniversalFactory must be deployed at the same address on different chains to successfully deploy contracts at the same address across different chains. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### computeAddress + +:::note References + +- Specification details: [**LSP-16-UniversalFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md#computeaddress) +- Solidity implementation: [`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) +- Function signature: `computeAddress(bytes32,bytes32,bool,bytes)` +- Function selector: `0x3b315680` + +::: + +```solidity +function computeAddress( + bytes32 creationBytecodeHash, + bytes32 providedSalt, + bool initializable, + bytes initializeCalldata +) external view returns (address); +``` + +Computes the address of a contract to be deployed using CREATE2, based on the input parameters. Any change in one of these parameters will result in a different address. When the `initializable` boolean is set to `false`, `initializeCalldata` will not affect the function output. + +#### Parameters + +| Name | Type | Description | +| ---------------------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `creationBytecodeHash` | `bytes32` | The keccak256 hash of the creation bytecode to be deployed | +| `providedSalt` | `bytes32` | The salt provided by the deployer, which will be used to generate the final salt that will be used by the `CREATE2` opcode for contract deployment | +| `initializable` | `bool` | A boolean that indicates whether an external call should be made to initialize the contract after deployment | +| `initializeCalldata` | `bytes` | The calldata to be executed on the created contract if `initializable` is set to `true` | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------------- | +| `0` | `address` | The address where the contract will be deployed | + +
+ +### computeERC1167Address + +:::note References + +- Specification details: [**LSP-16-UniversalFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md#computeerc1167address) +- Solidity implementation: [`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) +- Function signature: `computeERC1167Address(address,bytes32,bool,bytes)` +- Function selector: `0xe888edcb` + +::: + +```solidity +function computeERC1167Address( + address implementationContract, + bytes32 providedSalt, + bool initializable, + bytes initializeCalldata +) external view returns (address); +``` + +Computes the address of an ERC1167 proxy contract based on the input parameters. Any change in one of these parameters will result in a different address. When the `initializable` boolean is set to `false`, `initializeCalldata` will not affect the function output. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `implementationContract` | `address` | The contract to create a clone of according to ERC1167 | +| `providedSalt` | `bytes32` | The salt provided by the deployer, which will be used to generate the final salt that will be used by the `CREATE2` opcode for contract deployment | +| `initializable` | `bool` | A boolean that indicates whether an external call should be made to initialize the proxy contract after deployment | +| `initializeCalldata` | `bytes` | The calldata to be executed on the created contract if `initializable` is set to `true` | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------------- | +| `0` | `address` | The address where the ERC1167 proxy contract will be deployed | + +
+ +### deployCreate2 + +:::note References + +- Specification details: [**LSP-16-UniversalFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md#deploycreate2) +- Solidity implementation: [`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) +- Function signature: `deployCreate2(bytes,bytes32)` +- Function selector: `0x26736355` + +::: + +```solidity +function deployCreate2( + bytes creationBytecode, + bytes32 providedSalt +) external payable returns (address); +``` + +_Deploys a smart contract._ + +Deploys a contract using the CREATE2 opcode. The address where the contract will be deployed can be known in advance via the [`computeAddress`](#computeaddress) function. This function deploys contracts without initialization (external call after deployment). The `providedSalt` parameter is not used directly as the salt by the CREATE2 opcode. Instead, it is hashed with keccak256: `keccak256(abi.encodePacked(false, providedSalt))`. See [`generateSalt`](#generatesalt) function for more details. Using the same `creationBytecode` and `providedSalt` multiple times will revert, as the contract cannot be deployed twice at the same address. If the constructor of the contract to deploy is payable, value can be sent to this function to fund the created contract. However, sending value to this function while the constructor is not payable will result in a revert. + +#### Parameters + +| Name | Type | Description | +| ------------------ | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `creationBytecode` | `bytes` | The creation bytecode of the contract to be deployed | +| `providedSalt` | `bytes32` | The salt provided by the deployer, which will be used to generate the final salt that will be used by the `CREATE2` opcode for contract deployment | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------ | +| `0` | `address` | The address of the deployed contract | + +
+ +### deployCreate2AndInitialize + +:::note References + +- Specification details: [**LSP-16-UniversalFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md#deploycreate2andinitialize) +- Solidity implementation: [`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) +- Function signature: `deployCreate2AndInitialize(bytes,bytes32,bytes,uint256,uint256)` +- Function selector: `0xcdbd473a` + +::: + +```solidity +function deployCreate2AndInitialize( + bytes creationBytecode, + bytes32 providedSalt, + bytes initializeCalldata, + uint256 constructorMsgValue, + uint256 initializeCalldataMsgValue +) external payable returns (address); +``` + +_Deploys a smart contract and initializes it._ + +Deploys a contract using the CREATE2 opcode. The address where the contract will be deployed can be known in advance via the [`computeAddress`](#computeaddress) function. This function deploys contracts with initialization (external call after deployment). The `providedSalt` parameter is not used directly as the salt by the CREATE2 opcode. Instead, it is hashed with keccak256: `keccak256(abi.encodePacked(true, initializeCalldata, providedSalt))`. See [`generateSalt`](#generatesalt) function for more details. Using the same `creationBytecode`, `providedSalt` and `initializeCalldata` multiple times will revert, as the contract cannot be deployed twice at the same address. If the constructor or the initialize function of the contract to deploy is payable, value can be sent along with the deployment/initialization to fund the created contract. However, sending value to this function while the constructor/initialize function is not payable will result in a revert. Will revert if the `msg.value` sent to the function is not equal to the sum of `constructorMsgValue` and `initializeCalldataMsgValue`. + +#### Parameters + +| Name | Type | Description | +| ---------------------------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `creationBytecode` | `bytes` | The creation bytecode of the contract to be deployed | +| `providedSalt` | `bytes32` | The salt provided by the deployer, which will be used to generate the final salt that will be used by the `CREATE2` opcode for contract deployment | +| `initializeCalldata` | `bytes` | The calldata to be executed on the created contract | +| `constructorMsgValue` | `uint256` | The value sent to the contract during deployment | +| `initializeCalldataMsgValue` | `uint256` | The value sent to the contract during initialization | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------ | +| `0` | `address` | The address of the deployed contract | + +
+ +### deployERC1167Proxy + +:::note References + +- Specification details: [**LSP-16-UniversalFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md#deployerc1167proxy) +- Solidity implementation: [`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) +- Function signature: `deployERC1167Proxy(address,bytes32)` +- Function selector: `0x49d8abed` + +::: + +```solidity +function deployERC1167Proxy( + address implementationContract, + bytes32 providedSalt +) external nonpayable returns (address); +``` + +_Deploys a proxy smart contract._ + +Deploys an ERC1167 minimal proxy contract using the CREATE2 opcode. The address where the contract will be deployed can be known in advance via the [`computeERC1167Address`](#computeerc1167address) function. This function deploys contracts without initialization (external call after deployment). The `providedSalt` parameter is not used directly as the salt by the CREATE2 opcode. Instead, it is hashed with keccak256: `keccak256(abi.encodePacked(false, providedSalt))`. See [`generateSalt`](#generatesalt) function for more details. Using the same `implementationContract` and `providedSalt` multiple times will revert, as the contract cannot be deployed twice at the same address. Sending value to the contract created is not possible since the constructor of the ERC1167 minimal proxy is not payable. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `implementationContract` | `address` | The contract address to use as the base implementation behind the proxy that will be deployed | +| `providedSalt` | `bytes32` | The salt provided by the deployer, which will be used to generate the final salt that will be used by the `CREATE2` opcode for contract deployment | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------- | +| `0` | `address` | The address of the minimal proxy deployed | + +
+ +### deployERC1167ProxyAndInitialize + +:::note References + +- Specification details: [**LSP-16-UniversalFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md#deployerc1167proxyandinitialize) +- Solidity implementation: [`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) +- Function signature: `deployERC1167ProxyAndInitialize(address,bytes32,bytes)` +- Function selector: `0x5340165f` + +::: + +```solidity +function deployERC1167ProxyAndInitialize( + address implementationContract, + bytes32 providedSalt, + bytes initializeCalldata +) external payable returns (address); +``` + +_Deploys a proxy smart contract and initializes it._ + +Deploys an ERC1167 minimal proxy contract using the CREATE2 opcode. The address where the contract will be deployed can be known in advance via the [`computeERC1167Address`](#computeerc1167address) function. This function deploys contracts with initialization (external call after deployment). The `providedSalt` parameter is not used directly as the salt by the CREATE2 opcode. Instead, it is hashed with keccak256: `keccak256(abi.encodePacked(true, initializeCalldata, providedSalt))`. See [`generateSalt`](#generatesalt) function for more details. Using the same `implementationContract`, `providedSalt` and `initializeCalldata` multiple times will revert, as the contract cannot be deployed twice at the same address. If the initialize function of the contract to deploy is payable, value can be sent along to fund the created contract while initializing. However, sending value to this function while the initialize function is not payable will result in a revert. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `implementationContract` | `address` | The contract address to use as the base implementation behind the proxy that will be deployed | +| `providedSalt` | `bytes32` | The salt provided by the deployer, which will be used to generate the final salt that will be used by the `CREATE2` opcode for contract deployment | +| `initializeCalldata` | `bytes` | The calldata to be executed on the created contract | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------- | +| `0` | `address` | The address of the minimal proxy deployed | + +
+ +### generateSalt + +:::note References + +- Specification details: [**LSP-16-UniversalFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md#generatesalt) +- Solidity implementation: [`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) +- Function signature: `generateSalt(bytes32,bool,bytes)` +- Function selector: `0x1a17ccbf` + +::: + +```solidity +function generateSalt( + bytes32 providedSalt, + bool initializable, + bytes initializeCalldata +) external pure returns (bytes32); +``` + +Generates the salt used to deploy the contract by hashing the following parameters (concatenated together) with keccak256: + +1. the `providedSalt` + +2. the `initializable` boolean + +3. the `initializeCalldata`, only if the contract is initializable (the `initializable` boolean is set to `true`) + +- The `providedSalt` parameter is not used directly as the salt by the CREATE2 opcode. Instead, it is used along with these parameters: + +1. `initializable` boolean + +2. `initializeCalldata` (when the contract is initializable and `initializable` is set to `true`). + +- This approach ensures that in order to reproduce an initializable contract at the same address on another chain, not only the `providedSalt` is required to be the same, but also the initialize parameters within the `initializeCalldata` must also be the same. This maintains consistent deployment behaviour. Users are required to initialize contracts with the same parameters across different chains to ensure contracts are deployed at the same address across different chains. + +1. Example (for initializable contracts) + +- For an existing contract A on chain 1 owned by X, to replicate the same contract at the same address with the same owner X on chain 2, the salt used to generate the address should include the initializeCalldata that assigns X as the owner of contract A. + +- For instance, if another user, Y, tries to deploy the contract at the same address on chain 2 using the same providedSalt, but with a different initializeCalldata to make Y the owner instead of X, the generated address would be different, preventing Y from deploying the contract with different ownership at the same address. + +- However, for non-initializable contracts, if the constructor has arguments that specify the deployment behavior, they will be included in the creation bytecode. Any change in the constructor arguments will lead to a different contract's creation bytecode which will result in a different address on other chains. + +2. Example (for non-initializable contracts) + +- If a contract is deployed with specific constructor arguments on chain 1, these arguments are embedded within the creation bytecode. For instance, if contract B is deployed with a specific `tokenName` and `tokenSymbol` on chain 1, and a user wants to deploy the same contract with the same `tokenName` and `tokenSymbol` on chain 2, they must use the same constructor arguments to produce the same creation bytecode. This ensures that the same deployment behaviour is maintained across different chains, as long as the same creation bytecode is used. + +- If another user Z, tries to deploy the same contract B at the same address on chain 2 using the same `providedSalt` but different constructor arguments (a different `tokenName` and/or `tokenSymbol`), the generated address will be different. This prevents user Z from deploying the contract with different constructor arguments at the same address on chain 2. + +- The providedSalt was hashed to produce the salt used by CREATE2 opcode to prevent users from deploying initializable contracts using non-initializable functions such as [`deployCreate2`](#deploycreate2) without having the initialization call. + +- In other words, if the providedSalt was not hashed and was used as it is as the salt by the CREATE2 opcode, malicious users can check the generated salt used for the already deployed initializable contract on chain 1, and deploy the contract from [`deployCreate2`](#deploycreate2) function on chain 2, with passing the generated salt of the deployed contract as providedSalt that will produce the same address but without the initialization, where the malicious user can initialize after. + +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `providedSalt` | `bytes32` | The salt provided by the deployer, which will be used to generate the final salt that will be used by the `CREATE2` opcode for contract deployment | +| `initializable` | `bool` | The Boolean that specifies if the contract must be initialized or not | +| `initializeCalldata` | `bytes` | The calldata to be executed on the created contract if `initializable` is set to `true` | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------------ | +| `0` | `bytes32` | The generated salt which will be used for CREATE2 deployment | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_verifyCallResult + +```solidity +function _verifyCallResult(bool success, bytes returndata) internal pure; +``` + +Verifies that the contract created was initialized correctly. +Bubble the revert reason if present, revert with `ContractInitializationFailed` otherwise. + +
+ +## Events + +### ContractCreated + +:::note References + +- Specification details: [**LSP-16-UniversalFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md#contractcreated) +- Solidity implementation: [`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) +- Event signature: `ContractCreated(address,bytes32,bytes32,bool,bytes)` +- Event topic hash: `0x8872a323d65599f01bf90dc61c94b4e0cc8e2347d6af4122fccc3e112ee34a84` + +::: + +```solidity +event ContractCreated( + address indexed createdContract, + bytes32 indexed providedSalt, + bytes32 generatedSalt, + bool indexed initialized, + bytes initializeCalldata +); +``` + +_Contract created. Contract address: `createdContract`._ + +Emitted whenever a contract is created. + +#### Parameters + +| Name | Type | Description | +| ------------------------------- | :-------: | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| `createdContract` **`indexed`** | `address` | The address of the contract created. | +| `providedSalt` **`indexed`** | `bytes32` | The salt provided by the deployer, which will be used to generate the final salt that will be used by the `CREATE2` opcode for contract deployment. | +| `generatedSalt` | `bytes32` | The salt used by the `CREATE2` opcode for contract deployment. | +| `initialized` **`indexed`** | `bool` | The Boolean that specifies if the contract must be initialized or not. | +| `initializeCalldata` | `bytes` | The bytes provided as initializeCalldata (Empty string when `initialized` is set to false). | + +
+ +## Errors + +### ContractInitializationFailed + +:::note References + +- Specification details: [**LSP-16-UniversalFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md#contractinitializationfailed) +- Solidity implementation: [`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) +- Error signature: `ContractInitializationFailed()` +- Error hash: `0xc1ee8543` + +::: + +```solidity +error ContractInitializationFailed(); +``` + +_Couldn't initialize the contract._ + +Reverts when there is no revert reason bubbled up by the created contract when initializing + +
+ +### InvalidValueSum + +:::note References + +- Specification details: [**LSP-16-UniversalFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-16-UniversalFactory.md#invalidvaluesum) +- Solidity implementation: [`LSP16UniversalFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp16-contracts/contracts/LSP16UniversalFactory.sol) +- Error signature: `InvalidValueSum()` +- Error hash: `0x2fd9ca91` + +::: + +```solidity +error InvalidValueSum(); +``` + +Reverts when `msg.value` sent to [`deployCreate2AndInitialize(..)`](#deploycreate2andinitialize) function is not equal to the sum of the `initializeCalldataMsgValue` and `constructorMsgValue` + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extendable.md b/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extendable.md new file mode 100644 index 000000000..35b71173d --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extendable.md @@ -0,0 +1,125 @@ + + + +# LSP17Extendable + +:::info Standard Specifications + +[`LSP-17-ContractExtension`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-17-ContractExtension.md) + +::: +:::info Solidity implementation + +[`LSP17Extendable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp17contractextension-contracts/contracts/LSP17Extendable.sol) + +::: + +> Module to add more functionalities to a contract using extensions. + +Implementation of the `fallback(...)` logic according to LSP17 + +- Contract Extension standard. This module can be inherited to extend the functionality of the parent contract when calling a function that doesn't exist on the parent contract via forwarding the call to an extension mapped to the function selector being called, set originally by the parent contract + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### supportsInterface + +:::note References + +- Specification details: [**LSP-17-ContractExtension**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-17-ContractExtension.md#supportsinterface) +- Solidity implementation: [`LSP17Extendable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp17contractextension-contracts/contracts/LSP17Extendable.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +See [`IERC165-supportsInterface`](#ierc165-supportsinterface). + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension mapped to a specific function selector +If no extension was found, return the address(0) +To be overrided. +Up to the implementor contract to return an extension based on a function selector + +
+ +### \_fallbackLSP17Extendable + +:::tip Hint + +This function does not forward to the extension contract the `msg.value` received by the contract that inherits `LSP17Extendable`. +If you would like to forward the `msg.value` to the extension contract, you can override the code of this internal function as follow: + +```solidity +(bool success, bytes memory result) = extension.call{value: msg.value}( + abi.encodePacked(callData, msg.sender, msg.value) +); +``` + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the `address(0)` will be returned. +Forwards the value if the extension is payable. +Reverts if there is no extension for the function being called. +If there is an extension for the function selector being called, it calls the extension with the +`CALL` opcode, passing the `msg.data` appended with the 20 bytes of the [`msg.sender`](#msg.sender) and 32 bytes of the `msg.value`. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extension.md b/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extension.md new file mode 100644 index 000000000..18ca24659 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extension.md @@ -0,0 +1,117 @@ + + + +# LSP17Extension + +:::info Standard Specifications + +[`LSP-17-ContractExtension`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-17-ContractExtension.md) + +::: +:::info Solidity implementation + +[`LSP17Extension.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp17contractextension-contracts/contracts/LSP17Extendable.sol) + +::: + +> Module to create a contract that can act as an extension. + +Implementation of the extension logic according to LSP17ContractExtension. This module can be inherited to provide context of the msg variable related to the extendable contract + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### VERSION + +:::note References + +- Specification details: [**LSP-17-ContractExtension**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-17-ContractExtension.md#version) +- Solidity implementation: [`LSP17Extension.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp17contractextension-contracts/contracts/LSP17Extendable.sol) +- Function signature: `VERSION()` +- Function selector: `0xffa1ad74` + +::: + +```solidity +function VERSION() external view returns (string); +``` + +_Contract version._ + +#### Returns + +| Name | Type | Description | +| ---- | :------: | ----------- | +| `0` | `string` | - | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-17-ContractExtension**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-17-ContractExtension.md#supportsinterface) +- Solidity implementation: [`LSP17Extension.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp17contractextension-contracts/contracts/LSP17Extendable.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +See [`IERC165-supportsInterface`](#ierc165-supportsinterface). + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_extendableMsgData + +```solidity +function _extendableMsgData() internal view returns (bytes); +``` + +Returns the original `msg.data` passed to the extendable contract +without the appended `msg.sender` and `msg.value`. + +
+ +### \_extendableMsgSender + +```solidity +function _extendableMsgSender() internal view returns (address); +``` + +Returns the original `msg.sender` calling the extendable contract. + +
+ +### \_extendableMsgValue + +```solidity +function _extendableMsgValue() internal view returns (uint256); +``` + +Returns the original `msg.value` sent to the extendable contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateUP.md b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateUP.md new file mode 100644 index 000000000..c14868d52 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateUP.md @@ -0,0 +1,278 @@ + + + +# LSP1UniversalReceiverDelegateUP + +:::info Standard Specifications + +[`LSP-1-UniversalReceiver`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md) + +::: +:::info Solidity implementation + +[`LSP1UniversalReceiverDelegateUP.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) + +::: + +> Implementation of a UniversalReceiverDelegate for the [LSP-0-ERC725Account] + +The [`LSP1UniversalReceiverDelegateUP`](#lsp1universalreceiverdelegateup) follows the [LSP-1-UniversalReceiver] standard and is designed for [LSP-0-ERC725Account] contracts. The [`LSP1UniversalReceiverDelegateUP`](#lsp1universalreceiverdelegateup) is a contract called by the [`universalReceiver(...)`](#universalreceiver) function of the [LSP-0-ERC725Account] contract that: + +- Writes the data keys representing assets received from type [LSP-7-DigitalAsset] and [LSP-8-IdentifiableDigitalAsset] into the account storage, and removes them when the balance is zero according to the [LSP-5-ReceivedAssets] Standard. + +- Writes the data keys representing the owned vaults from type [LSP-9-Vault] into your account storage, and removes them when transferring ownership to other accounts according to the [LSP-10-ReceivedVaults] Standard. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### VERSION + +:::note References + +- Specification details: [**LSP-1-UniversalReceiver**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md#version) +- Solidity implementation: [`LSP1UniversalReceiverDelegateUP.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) +- Function signature: `VERSION()` +- Function selector: `0xffa1ad74` + +::: + +```solidity +function VERSION() external view returns (string); +``` + +_Contract version._ + +#### Returns + +| Name | Type | Description | +| ---- | :------: | ----------- | +| `0` | `string` | - | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-1-UniversalReceiver**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md#supportsinterface) +- Solidity implementation: [`LSP1UniversalReceiverDelegateUP.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +See [`IERC165-supportsInterface`](#ierc165-supportsinterface). + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### universalReceiverDelegate + +:::note References + +- Specification details: [**LSP-1-UniversalReceiver**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md#universalreceiverdelegate) +- Solidity implementation: [`LSP1UniversalReceiverDelegateUP.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) +- Function signature: `universalReceiverDelegate(address,uint256,bytes32,bytes)` +- Function selector: `0xa245bbda` + +::: + +:::info + +- If some issues occured with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. +- If an error occured when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. + +::: + +:::caution Warning + +When the data stored in the ERC725Y storage of the LSP0 contract is corrupted (\_e.g: ([LSP-5-ReceivedAssets]'s Array length not 16 bytes long, the token received is already registered in `LSP5ReceivetAssets[]`, the token being sent is not sent as full balance, etc...), the function call will still pass and return (**not revert!**) and not modify any data key on the storage of the [LSP-0-ERC725Account]. + +::: + +```solidity +function universalReceiverDelegate( + address notifier, + uint256, + bytes32 typeId, + bytes +) external nonpayable returns (bytes); +``` + +_Reacted on received notification with `typeId`._ + +1. Writes the data keys of the received [LSP-7-DigitalAsset], [LSP-8-IdentifiableDigitalAsset] and [LSP-9-Vault] contract addresses into the account storage according to the [LSP-5-ReceivedAssets] and [LSP-10-ReceivedVaults] Standard. + +2. The data keys representing an asset/vault are cleared when the asset/vault is no longer owned by the account. + +
+ +**Requirements:** + +- This contract should be allowed to use the [`setDataBatch(...)`](#setdatabatch) function in order to update the LSP5 and LSP10 Data Keys. +- Cannot accept native tokens + +
+ +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ---------------------------------------------- | +| `notifier` | `address` | - | +| `_1` | `uint256` | - | +| `typeId` | `bytes32` | Unique identifier for a specific notification. | +| `_3` | `bytes` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ---------------------------------------- | +| `0` | `bytes` | The result of the reaction for `typeId`. | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_tokenSender + +```solidity +function _tokenSender(address notifier) internal nonpayable returns (bytes); +``` + +Handler for LSP7 and LSP8 token sender type id. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------- | +| `notifier` | `address` | The LSP7 or LSP8 token address. | + +
+ +### \_tokenRecipient + +```solidity +function _tokenRecipient( + address notifier, + bytes4 interfaceId +) internal nonpayable returns (bytes); +``` + +Handler for LSP7 and LSP8 token recipient type id. + +#### Parameters + +| Name | Type | Description | +| ------------- | :-------: | ------------------------------- | +| `notifier` | `address` | The LSP7 or LSP8 token address. | +| `interfaceId` | `bytes4` | The LSP7 or LSP8 interface id. | + +
+ +### \_vaultSender + +```solidity +function _vaultSender(address notifier) internal nonpayable returns (bytes); +``` + +Handler for LSP9 vault sender type id. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------------------- | +| `notifier` | `address` | The LSP9 vault address. | + +
+ +### \_vaultRecipient + +```solidity +function _vaultRecipient(address notifier) internal nonpayable returns (bytes); +``` + +Handler for LSP9 vault recipient type id. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------------------- | +| `notifier` | `address` | The LSP9 vault address. | + +
+ +### \_setDataBatchWithoutReverting + +:::info + +If an the low-level transaction revert, the returned data will be forwarded. Th contract that uses this function can use the `Address` library to revert with the revert reason. + +::: + +```solidity +function _setDataBatchWithoutReverting( + bytes32[] dataKeys, + bytes[] dataValues +) internal nonpayable returns (bytes); +``` + +Calls `bytes4(keccak256(setDataBatch(bytes32[],bytes[])))` without checking for `bool success`, but it returns all the data back. + +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------- | +| `dataKeys` | `bytes32[]` | Data Keys to be set. | +| `dataValues` | `bytes[]` | Data Values to be set. | + +
+ +## Errors + +### CannotRegisterEOAsAsAssets + +:::note References + +- Specification details: [**LSP-1-UniversalReceiver**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md#cannotregistereoasasassets) +- Solidity implementation: [`LSP1UniversalReceiverDelegateUP.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) +- Error signature: `CannotRegisterEOAsAsAssets(address)` +- Error hash: `0xa5295345` + +::: + +```solidity +error CannotRegisterEOAsAsAssets(address caller); +``` + +_EOA: `caller` cannot be registered as an asset._ + +Reverts when EOA calls the [`universalReceiver(..)`](#universalreceiver) function with an asset/vault typeId. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ---------------------- | +| `caller` | `address` | The address of the EOA | + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateVault.md b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateVault.md new file mode 100644 index 000000000..d0356d3bd --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateVault.md @@ -0,0 +1,235 @@ + + + +# LSP1UniversalReceiverDelegateVault + +:::info Standard Specifications + +[`LSP-1-UniversalReceiver`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md) + +::: +:::info Solidity implementation + +[`LSP1UniversalReceiverDelegateVault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) + +::: + +> Implementation of a UniversalReceiverDelegate for the [LSP9Vault] + +The [`LSP1UniversalReceiverDelegateVault`](#lsp1universalreceiverdelegatevault) follows the [LSP-1-UniversalReceiver] standard and is designed for [LSP9Vault] contracts. The [`LSP1UniversalReceiverDelegateVault`](#lsp1universalreceiverdelegatevault) is a contract called by the [`universalReceiver(...)`](#universalreceiver) function of the [LSP-9-Vault] contract that: + +- Writes the data keys representing assets received from type [LSP-7-DigitalAsset] and [LSP-8-IdentifiableDigitalAsset] into the account storage, and removes them when the balance is zero according to the [LSP-5-ReceivedAssets] Standard. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### VERSION + +:::note References + +- Specification details: [**LSP-1-UniversalReceiver**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md#version) +- Solidity implementation: [`LSP1UniversalReceiverDelegateVault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) +- Function signature: `VERSION()` +- Function selector: `0xffa1ad74` + +::: + +```solidity +function VERSION() external view returns (string); +``` + +_Contract version._ + +#### Returns + +| Name | Type | Description | +| ---- | :------: | ----------- | +| `0` | `string` | - | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-1-UniversalReceiver**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md#supportsinterface) +- Solidity implementation: [`LSP1UniversalReceiverDelegateVault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +See [`IERC165-supportsInterface`](#ierc165-supportsinterface). + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### universalReceiverDelegate + +:::note References + +- Specification details: [**LSP-1-UniversalReceiver**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md#universalreceiverdelegate) +- Solidity implementation: [`LSP1UniversalReceiverDelegateVault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) +- Function signature: `universalReceiverDelegate(address,uint256,bytes32,bytes)` +- Function selector: `0xa245bbda` + +::: + +:::info + +- If some issues occured with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. +- If an error occured when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. + +::: + +```solidity +function universalReceiverDelegate( + address notifier, + uint256, + bytes32 typeId, + bytes +) external nonpayable returns (bytes); +``` + +_Reacted on received notification with `typeId`._ + +Handles two cases: Writes the received [LSP-7-DigitalAsset] or [LSP-8-IdentifiableDigitalAsset] assets into the vault storage according to the [LSP-5-ReceivedAssets] standard. + +
+ +**Requirements:** + +- Cannot accept native tokens. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ---------------------------------------------- | +| `notifier` | `address` | - | +| `_1` | `uint256` | - | +| `typeId` | `bytes32` | Unique identifier for a specific notification. | +| `_3` | `bytes` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ---------------------------------------- | +| `0` | `bytes` | The result of the reaction for `typeId`. | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_tokenSender + +```solidity +function _tokenSender(address notifier) internal nonpayable returns (bytes); +``` + +Handler for LSP7 and LSP8 token sender type id. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------- | +| `notifier` | `address` | The LSP7 or LSP8 token address. | + +
+ +### \_tokenRecipient + +```solidity +function _tokenRecipient( + address notifier, + bytes4 interfaceId +) internal nonpayable returns (bytes); +``` + +Handler for LSP7 and LSP8 token recipient type id. + +#### Parameters + +| Name | Type | Description | +| ------------- | :-------: | ------------------------------- | +| `notifier` | `address` | The LSP7 or LSP8 token address. | +| `interfaceId` | `bytes4` | The LSP7 or LSP8 interface id. | + +
+ +### \_setDataBatchWithoutReverting + +:::info + +If an the low-level transaction revert, the returned data will be forwarded. Th contract that uses this function can use the `Address` library to revert with the revert reason. + +::: + +```solidity +function _setDataBatchWithoutReverting( + bytes32[] dataKeys, + bytes[] dataValues +) internal nonpayable returns (bytes); +``` + +Calls `bytes4(keccak256(setDataBatch(bytes32[],bytes[])))` without checking for `bool succes`, but it returns all the data back. + +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------- | +| `dataKeys` | `bytes32[]` | Data Keys to be set. | +| `dataValues` | `bytes[]` | Data Values to be set. | + +
+ +## Errors + +### CannotRegisterEOAsAsAssets + +:::note References + +- Specification details: [**LSP-1-UniversalReceiver**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md#cannotregistereoasasassets) +- Solidity implementation: [`LSP1UniversalReceiverDelegateVault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) +- Error signature: `CannotRegisterEOAsAsAssets(address)` +- Error hash: `0xa5295345` + +::: + +```solidity +error CannotRegisterEOAsAsAssets(address caller); +``` + +_EOA: `caller` cannot be registered as an asset._ + +Reverts when EOA calls the [`universalReceiver(..)`](#universalreceiver) function with an asset/vault typeId. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ---------------------- | +| `caller` | `address` | The address of the EOA | + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP20CallVerification/contracts/LSP20CallVerification.md b/packages/lsp-smart-contracts/docs/contracts/LSP20CallVerification/contracts/LSP20CallVerification.md new file mode 100644 index 000000000..1545737be --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP20CallVerification/contracts/LSP20CallVerification.md @@ -0,0 +1,61 @@ + + + +# LSP20CallVerification + +:::info Standard Specifications + +[`LSP-20-CallVerification`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-20-CallVerification.md) + +::: +:::info Solidity implementation + +[`LSP20CallVerification.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp20-contracts/contracts/LSP20CallVerification.sol) + +::: + +> Implementation of a contract calling the verification functions according to LSP20 - Call Verification standard. + +Module to be inherited used to verify the execution of functions according to a verifier address. Verification can happen before or after execution based on a returnedStatus. + +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_verifyCall + +```solidity +function _verifyCall( + address logicVerifier +) internal nonpayable returns (bool verifyAfter); +``` + +Calls [`lsp20VerifyCall`](#lsp20verifycall) function on the logicVerifier. + +
+ +### \_verifyCallResult + +```solidity +function _verifyCallResult( + address logicVerifier, + bytes callResult +) internal nonpayable; +``` + +Calls [`lsp20VerifyCallResult`](#lsp20verifycallresult) function on the logicVerifier. + +
+ +### \_revertWithLSP20DefaultError + +```solidity +function _revertWithLSP20DefaultError( + bool postCall, + bytes returnedData +) internal pure; +``` + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/IPostDeploymentModule.md b/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/IPostDeploymentModule.md new file mode 100644 index 000000000..7bf347d2d --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/IPostDeploymentModule.md @@ -0,0 +1,53 @@ + + + +# IPostDeploymentModule + +:::info Standard Specifications + +[`LSP-23-LinkedContractsFactory`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md) + +::: +:::info Solidity implementation + +[`IPostDeploymentModule.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) + +::: + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### executePostDeployment + +:::note References + +- Specification details: [**LSP-23-LinkedContractsFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md#executepostdeployment) +- Solidity implementation: [`IPostDeploymentModule.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) +- Function signature: `executePostDeployment(address,address,bytes)` +- Function selector: `0x28c4d14e` + +::: + +```solidity +function executePostDeployment( + address primaryContract, + address secondaryContract, + bytes calldataToPostDeploymentModule +) external nonpayable; +``` + +_This function can be used to perform any additional setup or configuration after the primary and secondary contracts have been deployed._ + +Executes post-deployment logic for the primary and secondary contracts. + +#### Parameters + +| Name | Type | Description | +| -------------------------------- | :-------: | -------------------------------------------------------- | +| `primaryContract` | `address` | The address of the deployed primary contract. | +| `secondaryContract` | `address` | The address of the deployed secondary contract. | +| `calldataToPostDeploymentModule` | `bytes` | Calldata to be passed for the post-deployment execution. | + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/LSP23LinkedContractsFactory.md b/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/LSP23LinkedContractsFactory.md new file mode 100644 index 000000000..f1044092b --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/LSP23LinkedContractsFactory.md @@ -0,0 +1,403 @@ + + + +# LSP23LinkedContractsFactory + +:::info Standard Specifications + +[`LSP-23-LinkedContractsFactory`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md) + +::: +:::info Solidity implementation + +[`LSP23LinkedContractsFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) + +::: + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### computeAddresses + +:::note References + +- Specification details: [**LSP-23-LinkedContractsFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md#computeaddresses) +- Solidity implementation: [`LSP23LinkedContractsFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) +- Function signature: `computeAddresses(ILSP23LinkedContractsFactory.PrimaryContractDeployment,ILSP23LinkedContractsFactory.SecondaryContractDeployment,address,bytes)` +- Function selector: `0xdecfb0b9` + +::: + +```solidity +function computeAddresses( + ILSP23LinkedContractsFactory.PrimaryContractDeployment primaryContractDeployment, + ILSP23LinkedContractsFactory.SecondaryContractDeployment secondaryContractDeployment, + address postDeploymentModule, + bytes postDeploymentModuleCalldata +) + external + view + returns (address primaryContractAddress, address secondaryContractAddress); +``` + +Computes the addresses of a primary contract and a secondary linked contract + +#### Parameters + +| Name | Type | Description | +| ------------------------------ | :--------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `primaryContractDeployment` | `ILSP23LinkedContractsFactory.PrimaryContractDeployment` | Contains the needed parameter to deploy the primary contract. (`salt`, `fundingAmount`, `creationBytecode`) | +| `secondaryContractDeployment` | `ILSP23LinkedContractsFactory.SecondaryContractDeployment` | Contains the needed parameter to deploy the secondary contract. (`fundingAmount`, `creationBytecode`, `addPrimaryContractAddress`, `extraConstructorParams`) | +| `postDeploymentModule` | `address` | The optional module to be executed after deployment | +| `postDeploymentModuleCalldata` | `bytes` | The data to be passed to the post deployment module | + +#### Returns + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------- | +| `primaryContractAddress` | `address` | The address of the deployed primary contract. | +| `secondaryContractAddress` | `address` | The address of the deployed secondary contract. | + +
+ +### computeERC1167Addresses + +:::note References + +- Specification details: [**LSP-23-LinkedContractsFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md#computeerc1167addresses) +- Solidity implementation: [`LSP23LinkedContractsFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) +- Function signature: `computeERC1167Addresses(ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit,ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit,address,bytes)` +- Function selector: `0x8da85898` + +::: + +```solidity +function computeERC1167Addresses( + ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit primaryContractDeploymentInit, + ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit secondaryContractDeploymentInit, + address postDeploymentModule, + bytes postDeploymentModuleCalldata +) + external + view + returns (address primaryContractAddress, address secondaryContractAddress); +``` + +Computes the addresses of a primary and a secondary linked contracts ERC1167 proxies to be created + +#### Parameters + +| Name | Type | Description | +| --------------------------------- | :------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `primaryContractDeploymentInit` | `ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit` | Contains the needed parameters to deploy a primary proxy contract. (`salt`, `fundingAmount`, `implementationContract`, `initializationCalldata`) | +| `secondaryContractDeploymentInit` | `ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit` | Contains the needed parameters to deploy the secondary proxy contract. (`fundingAmount`, `implementationContract`, `initializationCalldata`, `addPrimaryContractAddress`, `extraInitializationParams`) | +| `postDeploymentModule` | `address` | The optional module to be executed after deployment. | +| `postDeploymentModuleCalldata` | `bytes` | The data to be passed to the post deployment module. | + +#### Returns + +| Name | Type | Description | +| -------------------------- | :-------: | ---------------------------------------------------- | +| `primaryContractAddress` | `address` | The address of the deployed primary contract proxy | +| `secondaryContractAddress` | `address` | The address of the deployed secondary contract proxy | + +
+ +### deployContracts + +:::note References + +- Specification details: [**LSP-23-LinkedContractsFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md#deploycontracts) +- Solidity implementation: [`LSP23LinkedContractsFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) +- Function signature: `deployContracts(ILSP23LinkedContractsFactory.PrimaryContractDeployment,ILSP23LinkedContractsFactory.SecondaryContractDeployment,address,bytes)` +- Function selector: `0xf830c0ab` + +::: + +```solidity +function deployContracts( + ILSP23LinkedContractsFactory.PrimaryContractDeployment primaryContractDeployment, + ILSP23LinkedContractsFactory.SecondaryContractDeployment secondaryContractDeployment, + address postDeploymentModule, + bytes postDeploymentModuleCalldata +) + external + payable + returns (address primaryContractAddress, address secondaryContractAddress); +``` + +_Contracts deployed. Contract Address: `primaryContractAddress`. Primary Contract Address: `primaryContractAddress`_ + +Deploys a primary and a secondary linked contract. + +#### Parameters + +| Name | Type | Description | +| ------------------------------ | :--------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `primaryContractDeployment` | `ILSP23LinkedContractsFactory.PrimaryContractDeployment` | Contains the needed parameter to deploy a contract. (`salt`, `fundingAmount`, `creationBytecode`) | +| `secondaryContractDeployment` | `ILSP23LinkedContractsFactory.SecondaryContractDeployment` | Contains the needed parameter to deploy the secondary contract. (`fundingAmount`, `creationBytecode`, `addPrimaryContractAddress`, `extraConstructorParams`) | +| `postDeploymentModule` | `address` | The optional module to be executed after deployment | +| `postDeploymentModuleCalldata` | `bytes` | The data to be passed to the post deployment module | + +#### Returns + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------- | +| `primaryContractAddress` | `address` | The address of the primary contract. | +| `secondaryContractAddress` | `address` | The address of the secondary contract. | + +
+ +### deployERC1167Proxies + +:::note References + +- Specification details: [**LSP-23-LinkedContractsFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md#deployerc1167proxies) +- Solidity implementation: [`LSP23LinkedContractsFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) +- Function signature: `deployERC1167Proxies(ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit,ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit,address,bytes)` +- Function selector: `0x17c042c4` + +::: + +```solidity +function deployERC1167Proxies( + ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit primaryContractDeploymentInit, + ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit secondaryContractDeploymentInit, + address postDeploymentModule, + bytes postDeploymentModuleCalldata +) + external + payable + returns (address primaryContractAddress, address secondaryContractAddress); +``` + +_Contract proxies deployed. Primary Proxy Address: `primaryContractAddress`. Secondary Contract Proxy Address: `secondaryContractAddress`_ + +Deploys ERC1167 proxies of a primary contract and a secondary linked contract + +#### Parameters + +| Name | Type | Description | +| --------------------------------- | :------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `primaryContractDeploymentInit` | `ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit` | Contains the needed parameters to deploy a proxy contract. (`salt`, `fundingAmount`, `implementationContract`, `initializationCalldata`) | +| `secondaryContractDeploymentInit` | `ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit` | Contains the needed parameters to deploy the secondary proxy contract. (`fundingAmount`, `implementationContract`, `initializationCalldata`, `addPrimaryContractAddress`, `extraInitializationParams`) | +| `postDeploymentModule` | `address` | The optional module to be executed after deployment. | +| `postDeploymentModuleCalldata` | `bytes` | The data to be passed to the post deployment module. | + +#### Returns + +| Name | Type | Description | +| -------------------------- | :-------: | ---------------------------------------------------- | +| `primaryContractAddress` | `address` | The address of the deployed primary contract proxy | +| `secondaryContractAddress` | `address` | The address of the deployed secondary contract proxy | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_deployPrimaryContract + +```solidity +function _deployPrimaryContract(struct ILSP23LinkedContractsFactory.PrimaryContractDeployment primaryContractDeployment, struct ILSP23LinkedContractsFactory.SecondaryContractDeployment secondaryContractDeployment, address postDeploymentModule, bytes postDeploymentModuleCalldata) internal nonpayable returns (address primaryContractAddress); +``` + +
+ +### \_deploySecondaryContract + +```solidity +function _deploySecondaryContract(struct ILSP23LinkedContractsFactory.SecondaryContractDeployment secondaryContractDeployment, address primaryContractAddress) internal nonpayable returns (address secondaryContractAddress); +``` + +
+ +### \_deployAndInitializePrimaryContractProxy + +```solidity +function _deployAndInitializePrimaryContractProxy(struct ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit primaryContractDeploymentInit, struct ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit secondaryContractDeploymentInit, address postDeploymentModule, bytes postDeploymentModuleCalldata) internal nonpayable returns (address primaryContractAddress); +``` + +
+ +### \_deployAndInitializeSecondaryContractProxy + +```solidity +function _deployAndInitializeSecondaryContractProxy(struct ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit secondaryContractDeploymentInit, address primaryContractAddress) internal nonpayable returns (address secondaryContractAddress); +``` + +
+ +### \_generatePrimaryContractSalt + +```solidity +function _generatePrimaryContractSalt(struct ILSP23LinkedContractsFactory.PrimaryContractDeployment primaryContractDeployment, struct ILSP23LinkedContractsFactory.SecondaryContractDeployment secondaryContractDeployment, address postDeploymentModule, bytes postDeploymentModuleCalldata) internal pure returns (bytes32 primaryContractGeneratedSalt); +``` + +
+ +### \_generatePrimaryContractProxySalt + +```solidity +function _generatePrimaryContractProxySalt(struct ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit primaryContractDeploymentInit, struct ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit secondaryContractDeploymentInit, address postDeploymentModule, bytes postDeploymentModuleCalldata) internal pure returns (bytes32 primaryContractProxyGeneratedSalt); +``` + +
+ +## Events + +### DeployedContracts + +:::note References + +- Specification details: [**LSP-23-LinkedContractsFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md#deployedcontracts) +- Solidity implementation: [`LSP23LinkedContractsFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) +- Event signature: `DeployedContracts(address,address,ILSP23LinkedContractsFactory.PrimaryContractDeployment,ILSP23LinkedContractsFactory.SecondaryContractDeployment,address,bytes)` +- Event topic hash: `0x1ea27dabd8fd1508e844ab51c2fd3d9081f2684346857f9187da6d4a1aa7d3e6` + +::: + +```solidity +event DeployedContracts( + address indexed primaryContract, + address indexed secondaryContract, + ILSP23LinkedContractsFactory.PrimaryContractDeployment primaryContractDeployment, + ILSP23LinkedContractsFactory.SecondaryContractDeployment secondaryContractDeployment, + address postDeploymentModule, + bytes postDeploymentModuleCalldata +); +``` + +Emitted when a primary and secondary contract are deployed. + +#### Parameters + +| Name | Type | Description | +| --------------------------------- | :--------------------------------------------------------: | ------------------------------------------------------ | +| `primaryContract` **`indexed`** | `address` | Address of the deployed primary contract. | +| `secondaryContract` **`indexed`** | `address` | Address of the deployed secondary contract. | +| `primaryContractDeployment` | `ILSP23LinkedContractsFactory.PrimaryContractDeployment` | Parameters used for the primary contract deployment. | +| `secondaryContractDeployment` | `ILSP23LinkedContractsFactory.SecondaryContractDeployment` | Parameters used for the secondary contract deployment. | +| `postDeploymentModule` | `address` | Address of the post-deployment module. | +| `postDeploymentModuleCalldata` | `bytes` | Calldata passed to the post-deployment module. | + +
+ +### DeployedERC1167Proxies + +:::note References + +- Specification details: [**LSP-23-LinkedContractsFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md#deployederc1167proxies) +- Solidity implementation: [`LSP23LinkedContractsFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) +- Event signature: `DeployedERC1167Proxies(address,address,ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit,ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit,address,bytes)` +- Event topic hash: `0xb03dbe7a02c063899f863d542410b5b038c8f537045be3a26e7144e0074e1c7b` + +::: + +```solidity +event DeployedERC1167Proxies( + address indexed primaryContract, + address indexed secondaryContract, + ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit primaryContractDeploymentInit, + ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit secondaryContractDeploymentInit, + address postDeploymentModule, + bytes postDeploymentModuleCalldata +); +``` + +Emitted when proxies of a primary and secondary contract are deployed. + +#### Parameters + +| Name | Type | Description | +| --------------------------------- | :------------------------------------------------------------: | ------------------------------------------------------------ | +| `primaryContract` **`indexed`** | `address` | Address of the deployed primary contract proxy. | +| `secondaryContract` **`indexed`** | `address` | Address of the deployed secondary contract proxy. | +| `primaryContractDeploymentInit` | `ILSP23LinkedContractsFactory.PrimaryContractDeploymentInit` | Parameters used for the primary contract proxy deployment. | +| `secondaryContractDeploymentInit` | `ILSP23LinkedContractsFactory.SecondaryContractDeploymentInit` | Parameters used for the secondary contract proxy deployment. | +| `postDeploymentModule` | `address` | Address of the post-deployment module. | +| `postDeploymentModuleCalldata` | `bytes` | Calldata passed to the post-deployment module. | + +
+ +## Errors + +### InvalidValueSum + +:::note References + +- Specification details: [**LSP-23-LinkedContractsFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md#invalidvaluesum) +- Solidity implementation: [`LSP23LinkedContractsFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) +- Error signature: `InvalidValueSum()` +- Error hash: `0x2fd9ca91` + +::: + +```solidity +error InvalidValueSum(); +``` + +_Invalid value sent._ + +Reverts when the `msg.value` sent is not equal to the sum of value used for the deployment of the contract & its owner contract. + +
+ +### PrimaryContractProxyInitFailureError + +:::note References + +- Specification details: [**LSP-23-LinkedContractsFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md#primarycontractproxyinitfailureerror) +- Solidity implementation: [`LSP23LinkedContractsFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) +- Error signature: `PrimaryContractProxyInitFailureError(bytes)` +- Error hash: `0x4364b6ee` + +::: + +```solidity +error PrimaryContractProxyInitFailureError(bytes errorData); +``` + +_Failed to deploy & initialize the Primary Contract Proxy. Error: `errorData`._ + +Reverts when the deployment & intialization of the contract has failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `errorData` | `bytes` | Potentially information about why the deployment & intialization have failed. | + +
+ +### SecondaryContractProxyInitFailureError + +:::note References + +- Specification details: [**LSP-23-LinkedContractsFactory**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-23-LinkedContractsFactory.md#secondarycontractproxyinitfailureerror) +- Solidity implementation: [`LSP23LinkedContractsFactory.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol) +- Error signature: `SecondaryContractProxyInitFailureError(bytes)` +- Error hash: `0x9654a854` + +::: + +```solidity +error SecondaryContractProxyInitFailureError(bytes errorData); +``` + +_Failed to deploy & initialize the Secondary Contract Proxy. Error: `errorData`._ + +Reverts when the deployment & intialization of the secondary contract has failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `errorData` | `bytes` | Potentially information about why the deployment & intialization have failed. | + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP25ExecuteRelayCall/contracts/LSP25MultiChannelNonce.md b/packages/lsp-smart-contracts/docs/contracts/LSP25ExecuteRelayCall/contracts/LSP25MultiChannelNonce.md new file mode 100644 index 000000000..e8c211075 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP25ExecuteRelayCall/contracts/LSP25MultiChannelNonce.md @@ -0,0 +1,147 @@ + + + +# LSP25MultiChannelNonce + +:::info Standard Specifications + +[`LSP-25-ExecuteRelayCall`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-25-ExecuteRelayCall.md) + +::: +:::info Solidity implementation + +[`LSP25MultiChannelNonce.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp25-contracts/contracts/ILSP25ExecuteRelayCall.sol) + +::: + +> Implementation of the multi channel nonce and the signature verification defined in the LSP25 standard. + +This contract can be used as a backbone for other smart contracts to implement meta-transactions via the LSP25 Execute Relay Call interface. It contains a storage of nonces for signer addresses across various channel IDs, enabling these signers to submit signed transactions that order-independant. (transactions that do not need to be submitted one after the other in a specific order). Finally, it contains internal functions to verify signatures for specific calldata according the signature format specified in the LSP25 standard. + +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_getNonce + +```solidity +function _getNonce( + address from, + uint128 channelId +) internal view returns (uint256 idx); +``` + +Read the nonce for a `from` address on a specific `channelId`. +This will return an `idx`, which is the concatenation of two `uint128` as follow: + +1. the `channelId` where the nonce was queried for. + +2. the actual nonce of the given `channelId`. + For example, if on `channelId` number `5`, the latest nonce is `1`, the `idx` returned by this function will be: + +``` +// in decimals = 1701411834604692317316873037158841057281 +idx = 0x0000000000000000000000000000000500000000000000000000000000000001 +``` + +This idx can be described as follow: + +``` + channelId => 5 nonce in this channel => 1 + v------------------------------v-------------------------------v +0x0000000000000000000000000000000500000000000000000000000000000001 +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `from` | `address` | The address to read the nonce for. | +| `channelId` | `uint128` | The channel in which to extract the nonce. | + +#### Returns + +| Name | Type | Description | +| ----- | :-------: | ---------------------------------------------------------------------------------------------------------------------- | +| `idx` | `uint256` | The idx composed of two `uint128`: the channelId + nonce in channel concatenated together in a single `uint256` value. | + +
+ +### \_recoverSignerFromLSP25Signature + +```solidity +function _recoverSignerFromLSP25Signature( + bytes signature, + uint256 nonce, + uint256 validityTimestamps, + uint256 msgValue, + bytes callData +) internal view returns (address); +``` + +Recover the address of the signer that generated a `signature` using the parameters provided `nonce`, `validityTimestamps`, `msgValue` and `callData`. +The address of the signer will be recovered using the LSP25 signature format. + +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `signature` | `bytes` | A 65 bytes long signature generated according to the signature format specified in the LSP25 standard. | +| `nonce` | `uint256` | The nonce that the signer used to generate the `signature`. | +| `validityTimestamps` | `uint256` | The validity timestamp that the signer used to generate the signature (See [`_verifyValidityTimestamps`](#_verifyvaliditytimestamps) to learn more). | +| `msgValue` | `uint256` | The amount of native tokens intended to be sent for the relay transaction. | +| `callData` | `bytes` | The calldata to execute as a relay transaction that the signer signed for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | -------------------------------------------------------- | +| `0` | `address` | The address that signed, recovered from the `signature`. | + +
+ +### \_verifyValidityTimestamps + +```solidity +function _verifyValidityTimestamps(uint256 validityTimestamps) internal view; +``` + +Verify that the current timestamp is within the date and time range provided by `validityTimestamps`. + +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------- | +| `validityTimestamps` | `uint256` | Two `uint128` concatenated together, where the left-most `uint128` represent the timestamp from which the transaction can be executed, | + +
+ +### \_isValidNonce + +```solidity +function _isValidNonce(address from, uint256 idx) internal view returns (bool); +``` + +Verify that the nonce `_idx` for `_from` (obtained via [`getNonce`](#getnonce)) is valid in its channel ID. +The "idx" is a 256bits (unsigned) integer, where: + +- the 128 leftmost bits = channelId + +- and the 128 rightmost bits = nonce within the channel + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | ---------------------------------------------------------------------------- | +| `from` | `address` | The signer's address. | +| `idx` | `uint256` | The concatenation of the `channelId` + `nonce` within a specific channel ID. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ------------------------------------------------------------------------ | +| `0` | `bool` | true if the nonce is the latest nonce for the `signer`, false otherwise. | + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP4DigitalAssetMetadata/contracts/LSP4DigitalAssetMetadata.md b/packages/lsp-smart-contracts/docs/contracts/LSP4DigitalAssetMetadata/contracts/LSP4DigitalAssetMetadata.md new file mode 100644 index 000000000..a9dd74016 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP4DigitalAssetMetadata/contracts/LSP4DigitalAssetMetadata.md @@ -0,0 +1,574 @@ + + + +# LSP4DigitalAssetMetadata + +:::info Standard Specifications + +[`LSP-4-DigitalAsset-Metadata`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md) + +::: +:::info Solidity implementation + +[`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) + +::: + +> Implementation of a LSP4DigitalAssetMetadata contract that stores the **Token-Metadata** (`LSP4TokenName` and `LSP4TokenSymbol`) in its ERC725Y data store. + +Standard Implementation of the LSP4 standard. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### getData + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#getdata) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#getdatabatch) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#owner) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#renounceownership) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner. + +
+ +### setData + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#setdata) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner). + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#setdatabatch) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner) of the contract. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event **for each data key/value pair set**. + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#supportsinterface) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +See [`IERC165-supportsInterface`](#ierc165-supportsinterface). + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#transferownership) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `newOwner` | `address` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +The ERC725Y data keys `LSP4TokenName` and `LSP4TokenSymbol` cannot be changed +via this function once the digital asset contract has been deployed. + +
+ +## Events + +### DataChanged + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#datachanged) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#ownershiptransferred) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +## Errors + +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### LSP4TokenNameNotEditable + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#lsp4tokennamenoteditable) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Error signature: `LSP4TokenNameNotEditable()` +- Error hash: `0x85c169bd` + +::: + +```solidity +error LSP4TokenNameNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenName` after the digital asset contract has been deployed / initialized. The `LSP4TokenName` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenSymbolNotEditable + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#lsp4tokensymbolnoteditable) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Error signature: `LSP4TokenSymbolNotEditable()` +- Error hash: `0x76755b38` + +::: + +```solidity +error LSP4TokenSymbolNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenSymbol` after the digital asset contract has been deployed / initialized. The `LSP4TokenSymbol` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenTypeNotEditable + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#lsp4tokentypenoteditable) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Error signature: `LSP4TokenTypeNotEditable()` +- Error hash: `0x4ef6d7fb` + +::: + +```solidity +error LSP4TokenTypeNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenType` after the digital asset contract has been deployed / initialized. The `LSP4TokenType` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor / initializer when the digital asset contract is being deployed / initialized. + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#ownablecallernottheowner) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
+ +### OwnableCannotSetZeroAddressAsOwner + +:::note References + +- Specification details: [**LSP-4-DigitalAsset-Metadata**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-4-DigitalAsset-Metadata.md#ownablecannotsetzeroaddressasowner) +- Solidity implementation: [`LSP4DigitalAssetMetadata.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol) +- Error signature: `OwnableCannotSetZeroAddressAsOwner()` +- Error hash: `0x1ad8836c` + +::: + +```solidity +error OwnableCannotSetZeroAddressAsOwner(); +``` + +Reverts when trying to set `address(0)` as the contract owner when deploying the contract, initializing it or transferring ownership of the contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md b/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md new file mode 100644 index 000000000..852ea357c --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md @@ -0,0 +1,1969 @@ + + + +# LSP6KeyManager + +:::info Standard Specifications + +[`LSP-6-KeyManager`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md) + +::: +:::info Solidity implementation + +[`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) + +::: + +> Implementation of a contract acting as a controller of an ERC725 Account, using permissions stored in the ERC725Y storage. + +All the permissions can be set on the ERC725 Account using `setData(bytes32,bytes)` or `setData(bytes32[],bytes[])`. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### constructor + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#constructor) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) + +::: + +```solidity +constructor(address target_); +``` + +_Deploying a LSP6KeyManager linked to the contract at address `target_`._ + +Deploy a Key Manager and set the `target_` address in the contract storage, making this Key Manager linked to this `target_` contract. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------------------------------------------ | +| `target_` | `address` | The address of the contract to control and forward calldata payloads to. | + +
+ +### VERSION + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#version) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `VERSION()` +- Function selector: `0xffa1ad74` + +::: + +```solidity +function VERSION() external view returns (string); +``` + +_Contract version._ + +#### Returns + +| Name | Type | Description | +| ---- | :------: | ----------- | +| `0` | `string` | - | + +
+ +### execute + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#execute) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `execute(bytes)` +- Function selector: `0x09c5eabe` + +::: + +```solidity +function execute(bytes payload) external payable returns (bytes); +``` + +_Executing the following payload on the linked contract: `payload`_ + +Execute A `payload` on the linked [`target`](#target) contract after having verified the permissions associated with the function being run. The `payload` MUST be a valid abi-encoded function call of one of the functions present in the linked [`target`](#target), otherwise the call will fail. The linked [`target`](#target) will return some data on successful execution, or revert on failure. + +
+ +**Emitted events:** + +- [`PermissionsVerified`](#permissionsverified) event when the permissions related to `payload` have been verified successfully. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-----: | --------------------------------------------------------------------------- | +| `payload` | `bytes` | The abi-encoded function call to execute on the linked [`target`](#target). | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | --------------------------------------------------------------------------------------- | +| `0` | `bytes` | The abi-decoded data returned by the function called on the linked [`target`](#target). | + +
+ +### executeBatch + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#executebatch) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `executeBatch(uint256[],bytes[])` +- Function selector: `0xbf0176ff` + +::: + +```solidity +function executeBatch( + uint256[] values, + bytes[] payloads +) external payable returns (bytes[]); +``` + +\*Executing the following batch of payloads and sensind on the linked contract. + +- payloads: `payloads` + +- values transferred for each payload: `values`\* + +Same as [`execute`](#execute) but execute a batch of payloads (abi-encoded function calls) in a single transaction. + +
+ +**Emitted events:** + +- [`PermissionsVerified`](#permissionsverified) event for each permissions related to each `payload` that have been verified successfully. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------------------------------------------------------------- | +| `values` | `uint256[]` | An array of amount of native tokens to be transferred for each `payload`. | +| `payloads` | `bytes[]` | An array of abi-encoded function calls to execute successively on the linked [`target`](#target). | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------------------------------------------------ | +| `0` | `bytes[]` | An array of abi-decoded data returned by the functions called on the linked [`target`](#target). | + +
+ +### executeRelayCall + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#executerelaycall) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `executeRelayCall(bytes,uint256,uint256,bytes)` +- Function selector: `0x4c8a4e74` + +::: + +:::tip Hint + +If you are looking to learn how to sign and execute relay transactions via the Key Manager, see our Javascript step by step guide [_"Execute Relay Transactions"_](../../../learn/expert-guides/key-manager/execute-relay-transactions.md). See the LSP6 Standard page for more details on how to [generate a valid signature for Execute Relay Call](../../../standards/universal-profile/lsp6-key-manager.md#how-to-sign-relay-transactions). + +::: + +```solidity +function executeRelayCall( + bytes signature, + uint256 nonce, + uint256 validityTimestamps, + bytes payload +) external payable returns (bytes); +``` + +_Executing the following payload given the nonce `nonce` and signature `signature`. Payload: `payload`_ + +Allows any address (executor) to execute a payload (= abi-encoded function call), given they have a valid signature from a signer address and a valid `nonce` for this signer. The signature MUST be generated according to the signature format defined by the LSP25 standard. The signer that generated the `signature` MUST be a controller with some permissions on the linked [`target`](#target). The `payload` will be executed on the [`target`](#target) contract once the LSP25 signature and the permissions of the signer have been verified. + +
+ +**Emitted events:** + +- [`PermissionsVerified`](#permissionsverified) event when the permissions related to `payload` have been verified successfully. + +
+ +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `signature` | `bytes` | A 65 bytes long signature for a meta transaction according to LSP25. | +| `nonce` | `uint256` | The nonce of the address that signed the calldata (in a specific `_channel`), obtained via [`getNonce`](#getnonce). Used to prevent replay attack. | +| `validityTimestamps` | `uint256` | Two `uint128` timestamps concatenated together that describes when the relay transaction is valid "from" (left `uint128`) and "until" as a deadline (right `uint128`). | +| `payload` | `bytes` | The abi-encoded function call to execute. | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ------------------------------------------------- | +| `0` | `bytes` | The data being returned by the function executed. | + +
+ +### executeRelayCallBatch + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#executerelaycallbatch) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `executeRelayCallBatch(bytes[],uint256[],uint256[],uint256[],bytes[])` +- Function selector: `0xa20856a5` + +::: + +```solidity +function executeRelayCallBatch( + bytes[] signatures, + uint256[] nonces, + uint256[] validityTimestamps, + uint256[] values, + bytes[] payloads +) external payable returns (bytes[]); +``` + +_Executing a batch of relay calls (= meta-transactions)._ + +Same as [`executeRelayCall`](#executerelaycall) but execute a batch of signed calldata payloads (abi-encoded function calls) in a single transaction. The `signatures` can be from multiple controllers, not necessarely the same controller, as long as each of these controllers that signed have the right permissions related to the calldata `payload` they signed. + +
+ +**Requirements:** + +- the length of `signatures`, `nonces`, `validityTimestamps`, `values` and `payloads` MUST be the same. +- the value sent to this function (`msg.value`) MUST be equal to the sum of all `values` in the batch. There should not be any excess value sent to this function. + +
+ +#### Parameters + +| Name | Type | Description | +| -------------------- | :---------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `signatures` | `bytes[]` | An array of 65 bytes long signatures for meta transactions according to LSP25. | +| `nonces` | `uint256[]` | An array of nonces of the addresses that signed the calldata payloads (in specific channels). Obtained via [`getNonce`](#getnonce). Used to prevent replay attack. | +| `validityTimestamps` | `uint256[]` | An array of two `uint128` concatenated timestamps that describe when the relay transaction is valid "from" (left `uint128`) and "until" (right `uint128`). | +| `values` | `uint256[]` | An array of amount of native tokens to be transferred for each calldata `payload`. | +| `payloads` | `bytes[]` | An array of abi-encoded function calls to be executed successively. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ---------------------------------------------------------------- | +| `0` | `bytes[]` | An array of abi-decoded data returned by the functions executed. | + +
+ +### getNonce + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#getnonce) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `getNonce(address,uint128)` +- Function selector: `0xb44581d9` + +::: + +:::tip Hint + +A signer can choose its channel number arbitrarily. The recommended practice is to: + +- use `channelId == 0` for transactions for which the ordering of execution matters.abi _Example: you have two transactions A and B, and transaction A must be executed first and complete successfully before transaction B should be executed)._ +- use any other `channelId` number for transactions that you want to be order independant (out-of-order execution, execution _"in parallel"_). \_Example: you have two transactions A and B. You want transaction B to be executed a) without having to wait for transaction A to complete, or b) regardless if transaction A completed successfully or not. + +::: + +```solidity +function getNonce( + address from, + uint128 channelId +) external view returns (uint256); +``` + +_Reading the latest nonce of address `from` in the channel ID `channelId`._ + +Get the nonce for a specific `from` address that can be used for signing relay transactions via [`executeRelayCall`](#executerelaycall). + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | -------------------------------------------------------------------------- | +| `from` | `address` | The address of the signer of the transaction. | +| `channelId` | `uint128` | The channel id that the signer wants to use for executing the transaction. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | -------------------------------------------- | +| `0` | `uint256` | The current nonce on a specific `channelId`. | + +
+ +### isValidSignature + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#isvalidsignature) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `isValidSignature(bytes32,bytes)` +- Function selector: `0x1626ba7e` + +::: + +:::caution Warning + +This function does not enforce by default the inclusion of the address of this contract in the signature digest. It is recommended that protocols or applications using this contract include the targeted address (= this contract) in the data to sign. To ensure that a signature is valid for a specific LSP6KeyManager and prevent signatures from the same EOA to be replayed across different LSP6KeyManager. + +::: + +```solidity +function isValidSignature( + bytes32 dataHash, + bytes signature +) external view returns (bytes4 returnedStatus); +``` + +Checks if a signature was signed by a controller that has the permission `SIGN`. If the signer is a controller with the permission `SIGN`, it will return the ERC1271 success value. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------- | +| `dataHash` | `bytes32` | - | +| `signature` | `bytes` | Signature byte array associated with \_data | + +#### Returns + +| Name | Type | Description | +| ---------------- | :------: | ---------------------------------------------------- | +| `returnedStatus` | `bytes4` | `0x1626ba7e` on success, or `0xffffffff` on failure. | + +
+ +### lsp20VerifyCall + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#lsp20verifycall) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `lsp20VerifyCall(address,address,address,uint256,bytes)` +- Function selector: `0xde928f14` + +::: + +:::tip Hint + +This function can call by any other address than the [`target`](#`target`). This allows to verify permissions in a _"read-only"_ manner. Anyone can call this function to verify if the `caller` has the right permissions to perform the abi-encoded function call `data` on the [`target`](#`target`) contract (while sending `msgValue` alongside the call). If the permissions have been verified successfully and `caller` is authorized, one of the following two LSP20 success value will be returned: + +- `0x1a238000`: LSP20 success value **without** post verification (last byte is `0x00`). +- `0x1a238001`: LSP20 success value **with** post-verification (last byte is `0x01`). + +::: + +```solidity +function lsp20VerifyCall( + address, + address targetContract, + address caller, + uint256 msgValue, + bytes callData +) external nonpayable returns (bytes4); +``` + +#### Parameters + +| Name | Type | Description | +| ---------------- | :-------: | ------------------------------------------------------------- | +| `_0` | `address` | - | +| `targetContract` | `address` | - | +| `caller` | `address` | The address who called the function on the `target` contract. | +| `msgValue` | `uint256` | - | +| `callData` | `bytes` | The calldata sent by the caller to the msg.sender | + +#### Returns + +| Name | Type | Description | +| ---- | :------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `0` | `bytes4` | MUST return the first 3 bytes of `lsp20VerifyCall(address,uint256,bytes)` function selector if the call to the function is allowed, concatened with a byte that determines if the lsp20VerifyCallResult function should be called after the original function call. The byte that invoke the lsp20VerifyCallResult function is strictly `0x01`. | + +
+ +### lsp20VerifyCallResult + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#lsp20verifycallresult) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `lsp20VerifyCallResult(bytes32,bytes)` +- Function selector: `0xd3fc45d3` + +::: + +```solidity +function lsp20VerifyCallResult( + bytes32, + bytes +) external nonpayable returns (bytes4); +``` + +#### Parameters + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `_0` | `bytes32` | - | +| `_1` | `bytes` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :------: | ---------------------------------------------------------------------------------------------- | +| `0` | `bytes4` | MUST return the lsp20VerifyCallResult function selector if the call to the function is allowed | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#supportsinterface) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +See [`IERC165-supportsInterface`](#ierc165-supportsinterface). + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### target + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#target) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Function signature: `target()` +- Function selector: `0xd4b83992` + +::: + +```solidity +function target() external view returns (address); +``` + +Get The address of the contract linked to this Key Manager. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ---------------------------------- | +| `0` | `address` | The address of the linked contract | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_verifyCanSetData + +```solidity +function _verifyCanSetData( + address controlledContract, + address controllerAddress, + bytes32 controllerPermissions, + bytes32 inputDataKey, + bytes inputDataValue +) internal view; +``` + +verify if the `controllerAddress` has the permissions required to set a data key on the ERC725Y storage of the `controlledContract`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------------------------- | +| `controlledContract` | `address` | the address of the ERC725Y contract where the data key is set. | +| `controllerAddress` | `address` | the address of the controller who wants to set the data key. | +| `controllerPermissions` | `bytes32` | the permissions of the controller address. | +| `inputDataKey` | `bytes32` | the data key to set on the `controlledContract`. | +| `inputDataValue` | `bytes` | the data value to set for the `inputDataKey`. | + +
+ +### \_verifyCanSetData + +```solidity +function _verifyCanSetData( + address controlledContract, + address controller, + bytes32 permissions, + bytes32[] inputDataKeys, + bytes[] inputDataValues +) internal view; +``` + +verify if the `controllerAddress` has the permissions required to set an array of data keys on the ERC725Y storage of the `controlledContract`. + +#### Parameters + +| Name | Type | Description | +| -------------------- | :---------: | -------------------------------------------------------------- | +| `controlledContract` | `address` | the address of the ERC725Y contract where the data key is set. | +| `controller` | `address` | the address of the controller who wants to set the data key. | +| `permissions` | `bytes32` | the permissions of the controller address. | +| `inputDataKeys` | `bytes32[]` | an array of data keys to set on the `controlledContract`. | +| `inputDataValues` | `bytes[]` | an array of data values to set for the `inputDataKeys`. | + +
+ +### \_getPermissionRequiredToSetDataKey + +```solidity +function _getPermissionRequiredToSetDataKey( + address controlledContract, + bytes32 controllerPermissions, + bytes32 inputDataKey, + bytes inputDataValue +) internal view returns (bytes32); +``` + +retrieve the permission required based on the data key to be set on the `controlledContract`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | ----------------------------------------------------------------------------------------------------------------------- | +| `controlledContract` | `address` | the address of the ERC725Y contract where the data key is verified. | +| `controllerPermissions` | `bytes32` | - | +| `inputDataKey` | `bytes32` | the data key to set on the `controlledContract`. Can be related to LSP6 Permissions, LSP1 Delegate or LSP17 Extensions. | +| `inputDataValue` | `bytes` | the data value to set for the `inputDataKey`. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------------------------------ | +| `0` | `bytes32` | the permission required to set the `inputDataKey` on the `controlledContract`. | + +
+ +### \_getPermissionToSetPermissionsArray + +```solidity +function _getPermissionToSetPermissionsArray( + address controlledContract, + bytes32 inputDataKey, + bytes inputDataValue, + bool hasBothAddControllerAndEditPermissions +) internal view returns (bytes32); +``` + +retrieve the permission required to update the `AddressPermissions[]` array data key defined in LSP6. + +#### Parameters + +| Name | Type | Description | +| ---------------------------------------- | :-------: | ----------------------------------------------------------------------------------------- | +| `controlledContract` | `address` | the address of the ERC725Y contract where the data key is verified. | +| `inputDataKey` | `bytes32` | either `AddressPermissions[]` (array length) or `AddressPermissions[index]` (array index) | +| `inputDataValue` | `bytes` | the updated value for the `inputDataKey`. MUST be: | +| `hasBothAddControllerAndEditPermissions` | `bool` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------- | +| `0` | `bytes32` | either ADD or CHANGE PERMISSIONS. | + +
+ +### \_getPermissionToSetControllerPermissions + +```solidity +function _getPermissionToSetControllerPermissions( + address controlledContract, + bytes32 inputPermissionDataKey +) internal view returns (bytes32); +``` + +retrieve the permission required to set permissions for a controller address. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ------------------------------------------------------------------- | +| `controlledContract` | `address` | the address of the ERC725Y contract where the data key is verified. | +| `inputPermissionDataKey` | `bytes32` | `AddressPermissions:Permissions:`. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------- | +| `0` | `bytes32` | either ADD or CHANGE PERMISSIONS. | + +
+ +### \_getPermissionToSetAllowedCalls + +```solidity +function _getPermissionToSetAllowedCalls( + address controlledContract, + bytes32 dataKey, + bytes dataValue, + bool hasBothAddControllerAndEditPermissions +) internal view returns (bytes32); +``` + +Retrieve the permission required to set some AllowedCalls for a controller. + +#### Parameters + +| Name | Type | Description | +| ---------------------------------------- | :-------: | ------------------------------------------------------------------------------------------- | +| `controlledContract` | `address` | The address of the ERC725Y contract from which to fetch the value of `dataKey`. | +| `dataKey` | `bytes32` | A data key ion the format `AddressPermissions:AllowedCalls:`. | +| `dataValue` | `bytes` | The updated value for the `dataKey`. MUST be a bytes32[CompactBytesArray] of Allowed Calls. | +| `hasBothAddControllerAndEditPermissions` | `bool` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------- | +| `0` | `bytes32` | Either ADD or EDIT PERMISSIONS. | + +
+ +### \_getPermissionToSetAllowedERC725YDataKeys + +```solidity +function _getPermissionToSetAllowedERC725YDataKeys( + address controlledContract, + bytes32 dataKey, + bytes dataValue, + bool hasBothAddControllerAndEditPermissions +) internal view returns (bytes32); +``` + +Retrieve the permission required to set some Allowed ERC725Y Data Keys for a controller. + +#### Parameters + +| Name | Type | Description | +| ---------------------------------------- | :-------: | ----------------------------------------------------------------------------------------------------- | +| `controlledContract` | `address` | the address of the ERC725Y contract from which to fetch the value of `dataKey`. | +| `dataKey` | `bytes32` | A data key in the format `AddressPermissions:AllowedERC725YDataKeys:`. | +| `dataValue` | `bytes` | The updated value for the `dataKey`. MUST be a bytes[CompactBytesArray] of Allowed ERC725Y Data Keys. | +| `hasBothAddControllerAndEditPermissions` | `bool` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------- | +| `0` | `bytes32` | Either ADD or EDIT PERMISSIONS. | + +
+ +### \_getPermissionToSetLSP1Delegate + +```solidity +function _getPermissionToSetLSP1Delegate( + address controlledContract, + bytes32 lsp1DelegateDataKey +) internal view returns (bytes32); +``` + +retrieve the permission required to either add or change the address +of a LSP1 Universal Receiver Delegate stored under a specific LSP1 data key. + +#### Parameters + +| Name | Type | Description | +| --------------------- | :-------: | -------------------------------------------------------------------- | +| `controlledContract` | `address` | the address of the ERC725Y contract where the data key is verified. | +| `lsp1DelegateDataKey` | `bytes32` | either the data key for the default `LSP1UniversalReceiverDelegate`, | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------------- | +| `0` | `bytes32` | either ADD or CHANGE UNIVERSALRECEIVERDELEGATE. | + +
+ +### \_getPermissionToSetLSP17Extension + +```solidity +function _getPermissionToSetLSP17Extension( + address controlledContract, + bytes32 lsp17ExtensionDataKey +) internal view returns (bytes32); +``` + +Verify if `controller` has the required permissions to either add or change the address +of an LSP0 Extension stored under a specific LSP17Extension data key + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | ------------------------------------------------------------------- | +| `controlledContract` | `address` | the address of the ERC725Y contract where the data key is verified. | +| `lsp17ExtensionDataKey` | `bytes32` | the dataKey to set with `_LSP17_EXTENSION_PREFIX` as prefix. | + +
+ +### \_verifyAllowedERC725YSingleKey + +```solidity +function _verifyAllowedERC725YSingleKey( + address controllerAddress, + bytes32 inputDataKey, + bytes allowedERC725YDataKeysCompacted +) internal pure; +``` + +Verify if the `inputKey` is present in the list of `allowedERC725KeysCompacted` for the `controllerAddress`. + +#### Parameters + +| Name | Type | Description | +| --------------------------------- | :-------: | ----------------------------------------------------------------------------------------- | +| `controllerAddress` | `address` | the address of the controller. | +| `inputDataKey` | `bytes32` | the data key to verify against the allowed ERC725Y Data Keys for the `controllerAddress`. | +| `allowedERC725YDataKeysCompacted` | `bytes` | a CompactBytesArray of allowed ERC725Y Data Keys for the `controllerAddress`. | + +
+ +### \_verifyAllowedERC725YDataKeys + +```solidity +function _verifyAllowedERC725YDataKeys( + address controllerAddress, + bytes32[] inputDataKeys, + bytes allowedERC725YDataKeysCompacted, + bool[] validatedInputKeysList, + uint256 allowedDataKeysFound +) internal pure; +``` + +Verify if all the `inputDataKeys` are present in the list of `allowedERC725KeysCompacted` of the `controllerAddress`. + +#### Parameters + +| Name | Type | Description | +| --------------------------------- | :---------: | ---------------------------------------------------------------------------------------------------------------------------- | +| `controllerAddress` | `address` | the address of the controller. | +| `inputDataKeys` | `bytes32[]` | the data keys to verify against the allowed ERC725Y Data Keys of the `controllerAddress`. | +| `allowedERC725YDataKeysCompacted` | `bytes` | a CompactBytesArray of allowed ERC725Y Data Keys of the `controllerAddress`. | +| `validatedInputKeysList` | `bool[]` | an array of booleans to store the result of the verification of each data keys checked. | +| `allowedDataKeysFound` | `uint256` | the number of data keys that were previously validated for other permissions like `ADDCONTROLLER`, `EDITPERMISSIONS`, etc... | + +
+ +### \_requirePermissions + +```solidity +function _requirePermissions( + address controller, + bytes32 addressPermissions, + bytes32 permissionRequired +) internal pure; +``` + +Check if the `controller` has the `permissionRequired` among its permission listed in `controllerPermissions` +If not, this function will revert with the error `NotAuthorised` and the name of the permission missing by the controller. + +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | --------------------------------- | +| `controller` | `address` | the caller address | +| `addressPermissions` | `bytes32` | the caller's permissions BitArray | +| `permissionRequired` | `bytes32` | the required permission | + +
+ +### \_verifyCanExecute + +```solidity +function _verifyCanExecute( + address controlledContract, + address controller, + bytes32 permissions, + uint256 operationType, + address to, + uint256 value, + bytes data +) internal view; +``` + +verify if `controllerAddress` has the required permissions to interact with other addresses using the controlledContract. + +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | -------------------------------------------------------------------------------------------------------- | +| `controlledContract` | `address` | the address of the ERC725 contract where the payload is executed and where the permissions are verified. | +| `controller` | `address` | the address who want to run the execute function on the ERC725Account. | +| `permissions` | `bytes32` | the permissions of the controller address. | +| `operationType` | `uint256` | - | +| `to` | `address` | - | +| `value` | `uint256` | - | +| `data` | `bytes` | - | + +
+ +### \_verifyCanDeployContract + +```solidity +function _verifyCanDeployContract( + address controller, + bytes32 permissions, + bool isFundingContract +) internal view; +``` + +
+ +### \_verifyCanStaticCall + +```solidity +function _verifyCanStaticCall( + address controlledContract, + address controller, + bytes32 permissions, + address to, + uint256 value, + bytes data +) internal view; +``` + +
+ +### \_verifyCanCall + +```solidity +function _verifyCanCall( + address controlledContract, + address controller, + bytes32 permissions, + address to, + uint256 value, + bytes data +) internal view; +``` + +
+ +### \_verifyAllowedCall + +```solidity +function _verifyAllowedCall( + address controlledContract, + address controllerAddress, + uint256 operationType, + address to, + uint256 value, + bytes data +) internal view; +``` + +
+ +### \_extractCallType + +```solidity +function _extractCallType( + uint256 operationType, + uint256 value, + bytes data +) internal pure returns (bytes4 requiredCallTypes); +``` + +extract the bytes4 representation of a single bit for the type of call according to the `operationType` + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | -------------------------------------------- | +| `operationType` | `uint256` | 0 = CALL, 3 = STATICCALL or 3 = DELEGATECALL | +| `value` | `uint256` | - | +| `data` | `bytes` | - | + +#### Returns + +| Name | Type | Description | +| ------------------- | :------: | --------------------------------------------------------- | +| `requiredCallTypes` | `bytes4` | a bytes4 value containing a single 1 bit for the callType | + +
+ +### \_isAllowedAddress + +```solidity +function _isAllowedAddress( + bytes allowedCall, + address to +) internal pure returns (bool); +``` + +
+ +### \_isAllowedStandard + +```solidity +function _isAllowedStandard( + bytes allowedCall, + address to +) internal view returns (bool); +``` + +
+ +### \_isAllowedFunction + +```solidity +function _isAllowedFunction( + bytes allowedCall, + bytes data +) internal pure returns (bool); +``` + +
+ +### \_isAllowedCallType + +```solidity +function _isAllowedCallType( + bytes allowedCall, + bytes4 requiredCallTypes +) internal pure returns (bool); +``` + +
+ +### \_verifyExecuteRelayCallPermission + +```solidity +function _verifyExecuteRelayCallPermission( + address controllerAddress, + bytes32 controllerPermissions +) internal pure; +``` + +
+ +### \_verifyOwnershipPermissions + +```solidity +function _verifyOwnershipPermissions( + address controllerAddress, + bytes32 controllerPermissions +) internal pure; +``` + +
+ +### \_getNonce + +```solidity +function _getNonce( + address from, + uint128 channelId +) internal view returns (uint256 idx); +``` + +Read the nonce for a `from` address on a specific `channelId`. +This will return an `idx`, which is the concatenation of two `uint128` as follow: + +1. the `channelId` where the nonce was queried for. + +2. the actual nonce of the given `channelId`. + For example, if on `channelId` number `5`, the latest nonce is `1`, the `idx` returned by this function will be: + +``` +// in decimals = 1701411834604692317316873037158841057281 +idx = 0x0000000000000000000000000000000500000000000000000000000000000001 +``` + +This idx can be described as follow: + +``` + channelId => 5 nonce in this channel => 1 + v------------------------------v-------------------------------v +0x0000000000000000000000000000000500000000000000000000000000000001 +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `from` | `address` | The address to read the nonce for. | +| `channelId` | `uint128` | The channel in which to extract the nonce. | + +#### Returns + +| Name | Type | Description | +| ----- | :-------: | ---------------------------------------------------------------------------------------------------------------------- | +| `idx` | `uint256` | The idx composed of two `uint128`: the channelId + nonce in channel concatenated together in a single `uint256` value. | + +
+ +### \_recoverSignerFromLSP25Signature + +```solidity +function _recoverSignerFromLSP25Signature( + bytes signature, + uint256 nonce, + uint256 validityTimestamps, + uint256 msgValue, + bytes callData +) internal view returns (address); +``` + +Recover the address of the signer that generated a `signature` using the parameters provided `nonce`, `validityTimestamps`, `msgValue` and `callData`. +The address of the signer will be recovered using the LSP25 signature format. + +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `signature` | `bytes` | A 65 bytes long signature generated according to the signature format specified in the LSP25 standard. | +| `nonce` | `uint256` | The nonce that the signer used to generate the `signature`. | +| `validityTimestamps` | `uint256` | The validity timestamp that the signer used to generate the signature (See [`_verifyValidityTimestamps`](#_verifyvaliditytimestamps) to learn more). | +| `msgValue` | `uint256` | The amount of native tokens intended to be sent for the relay transaction. | +| `callData` | `bytes` | The calldata to execute as a relay transaction that the signer signed for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | -------------------------------------------------------- | +| `0` | `address` | The address that signed, recovered from the `signature`. | + +
+ +### \_verifyValidityTimestamps + +```solidity +function _verifyValidityTimestamps(uint256 validityTimestamps) internal view; +``` + +Verify that the current timestamp is within the date and time range provided by `validityTimestamps`. + +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------- | +| `validityTimestamps` | `uint256` | Two `uint128` concatenated together, where the left-most `uint128` represent the timestamp from which the transaction can be executed, | + +
+ +### \_isValidNonce + +```solidity +function _isValidNonce(address from, uint256 idx) internal view returns (bool); +``` + +Verify that the nonce `_idx` for `_from` (obtained via [`getNonce`](#getnonce)) is valid in its channel ID. +The "idx" is a 256bits (unsigned) integer, where: + +- the 128 leftmost bits = channelId + +- and the 128 rightmost bits = nonce within the channel + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | ---------------------------------------------------------------------------- | +| `from` | `address` | The signer's address. | +| `idx` | `uint256` | The concatenation of the `channelId` + `nonce` within a specific channel ID. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ------------------------------------------------------------------------ | +| `0` | `bool` | true if the nonce is the latest nonce for the `signer`, false otherwise. | + +
+ +### \_execute + +```solidity +function _execute( + uint256 msgValue, + bytes payload +) internal nonpayable returns (bytes); +``` + +
+ +### \_executeRelayCall + +:::caution Warning + +Be aware that this function can also throw an error if the `callData` was signed incorrectly (not conforming to the signature format defined in the LSP25 standard). +This is because the contract cannot distinguish if the data is signed correctly or not. Instead, it will recover an incorrect signer address from the signature +and throw an [`InvalidRelayNonce`](#invalidrelaynonce) error with the incorrect signer address as the first parameter. + +::: + +```solidity +function _executeRelayCall( + bytes signature, + uint256 nonce, + uint256 validityTimestamps, + uint256 msgValue, + bytes payload +) internal nonpayable returns (bytes); +``` + +Validate that the `nonce` given for the `signature` signed and the `payload` to execute is valid +and conform to the signature format according to the LSP25 standard. + +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------- | +| `signature` | `bytes` | A valid signature for a signer, generated according to the signature format specified in the LSP25 standard. | +| `nonce` | `uint256` | The nonce that the signer used to generate the `signature`. | +| `validityTimestamps` | `uint256` | Two `uint128` concatenated together, where the left-most `uint128` represent the timestamp from which the transaction can be executed, | +| `msgValue` | `uint256` | - | +| `payload` | `bytes` | The abi-encoded function call to execute. | + +
+ +### \_executePayload + +```solidity +function _executePayload( + address targetContract, + uint256 msgValue, + bytes payload +) internal nonpayable returns (bytes); +``` + +_Execute the `payload` passed to `execute(...)` or `executeRelayCall(...)`_ + +#### Parameters + +| Name | Type | Description | +| ---------------- | :-------: | ----------------------------------------------------------------------------- | +| `targetContract` | `address` | - | +| `msgValue` | `uint256` | - | +| `payload` | `bytes` | The abi-encoded function call to execute on the [`target`](#target) contract. | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ------------------------------------------------------------------------------------ | +| `0` | `bytes` | bytes The data returned by the call made to the linked [`target`](#target) contract. | + +
+ +### \_verifyPermissions + +```solidity +function _verifyPermissions( + address targetContract, + address from, + bool isRelayedCall, + bytes payload +) internal view; +``` + +Verify if the `from` address is allowed to execute the `payload` on the [`target`](#target) contract linked to this Key Manager. + +#### Parameters + +| Name | Type | Description | +| ---------------- | :-------: | ---------------------------------------------------------------------------------------------------- | +| `targetContract` | `address` | The contract that is owned by the Key Manager | +| `from` | `address` | Either the caller of [`execute`](#execute) or the signer of [`executeRelayCall`](#executerelaycall). | +| `isRelayedCall` | `bool` | - | +| `payload` | `bytes` | The abi-encoded function call to execute on the [`target`](#target) contract. | + +
+ +### \_nonReentrantBefore + +```solidity +function _nonReentrantBefore( + address targetContract, + bool isSetData, + address from +) internal nonpayable returns (bool reentrancyStatus); +``` + +Check if we are in the context of a reentrant call, by checking if the reentrancy status is `true`. + +- If the status is `true`, the caller (or signer for relay call) MUST have the `REENTRANCY` permission. Otherwise, the call is reverted. + +- If the status is `false`, it is set to `true` only if we are not dealing with a call to the functions `setData` or `setDataBatch`. + Used at the beginning of the [`lsp20VerifyCall`](#`lsp20verifycall`), [`_execute`](#`_execute`) and [`_executeRelayCall`](#`_executerelaycall`) functions, before the methods execution starts. + +
+ +### \_nonReentrantAfter + +```solidity +function _nonReentrantAfter(address targetContract) internal nonpayable; +``` + +Resets the reentrancy status to `false` +Used at the end of the [`lsp20VerifyCall`](#`lsp20verifycall`), [`_execute`](#`_execute`) and [`_executeRelayCall`](#`_executerelaycall`) functions after the functions' execution is terminated. + +
+ +## Events + +### PermissionsVerified + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#permissionsverified) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Event signature: `PermissionsVerified(address,uint256,bytes4)` +- Event topic hash: `0xc0a62328f6bf5e3172bb1fcb2019f54b2c523b6a48e3513a2298fbf0150b781e` + +::: + +```solidity +event PermissionsVerified( + address indexed signer, + uint256 indexed value, + bytes4 indexed selector +); +``` + +_Verified the permissions of `signer` for calling function `selector` on the linked account and sending `value` of native token._ + +Emitted when the LSP6KeyManager contract verified the permissions of the `signer` successfully. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `signer` **`indexed`** | `address` | The address of the controller that executed the calldata payload (either directly via [`execute`](#execute) or via meta transaction using [`executeRelayCall`](#executerelaycall)). | +| `value` **`indexed`** | `uint256` | The amount of native token to be transferred in the calldata payload. | +| `selector` **`indexed`** | `bytes4` | The bytes4 function of the function that was executed on the linked [`target`](#target) | + +
+ +## Errors + +### BatchExecuteParamsLengthMismatch + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#batchexecuteparamslengthmismatch) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `BatchExecuteParamsLengthMismatch()` +- Error hash: `0x55a187db` + +::: + +```solidity +error BatchExecuteParamsLengthMismatch(); +``` + +_The array parameters provided to the function `executeBatch(...)` do not have the same number of elements. (Different array param's length)._ + +Reverts when the array parameters `uint256[] value` and `bytes[] payload` have different sizes. There should be the same number of elements for each array parameters. + +
+ +### BatchExecuteRelayCallParamsLengthMismatch + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#batchexecuterelaycallparamslengthmismatch) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `BatchExecuteRelayCallParamsLengthMismatch()` +- Error hash: `0xb4d50d21` + +::: + +```solidity +error BatchExecuteRelayCallParamsLengthMismatch(); +``` + +_The array parameters provided to the function `executeRelayCallBatch(...)` do not have the same number of elements. (Different array param's length)._ + +Reverts when providing array parameters of different sizes to `executeRelayCallBatch(bytes[],uint256[],bytes[])` + +
+ +### CallingKeyManagerNotAllowed + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#callingkeymanagernotallowed) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `CallingKeyManagerNotAllowed()` +- Error hash: `0xa431b236` + +::: + +```solidity +error CallingKeyManagerNotAllowed(); +``` + +_Calling the Key Manager address for this transaction is disallowed._ + +Reverts when calling the KeyManager through `execute(uint256,address,uint256,bytes)`. + +
+ +### DelegateCallDisallowedViaKeyManager + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#delegatecalldisallowedviakeymanager) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `DelegateCallDisallowedViaKeyManager()` +- Error hash: `0x80d6ebae` + +::: + +```solidity +error DelegateCallDisallowedViaKeyManager(); +``` + +_Performing DELEGATE CALLS via the Key Manager is currently disallowed._ + +Reverts when trying to do a `delegatecall` via the ERC725X.execute(uint256,address,uint256,bytes) (operation type 4) function of the linked [`target`](#target). `DELEGATECALL` is disallowed by default on the LSP6KeyManager. + +
+ +### ERC725X_ExecuteParametersEmptyArray + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#erc725x_executeparametersemptyarray) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `ERC725X_ExecuteParametersEmptyArray()` +- Error hash: `0xe9ad2b5f` + +::: + +```solidity +error ERC725X_ExecuteParametersEmptyArray(); +``` + +Reverts when one of the array parameter provided to the [`executeBatch`](#executebatch) function is an empty array. + +
+ +### ERC725X_ExecuteParametersLengthMismatch + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#erc725x_executeparameterslengthmismatch) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `ERC725X_ExecuteParametersLengthMismatch()` +- Error hash: `0x3ff55f4d` + +::: + +```solidity +error ERC725X_ExecuteParametersLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `operationTypes`, `targets` addresses, `values`, and `datas` array parameters provided when calling the [`executeBatch`](#executebatch) function. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### InvalidDataValuesForDataKeys + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#invaliddatavaluesfordatakeys) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `InvalidDataValuesForDataKeys(bytes32,bytes)` +- Error hash: `0x1fa41397` + +::: + +```solidity +error InvalidDataValuesForDataKeys(bytes32 dataKey, bytes dataValue); +``` + +_Data value: `dataValue` length is different from the required length for the data key which is set._ + +Reverts when the data value length is not one of the required lengths for the specific data key. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ----------------------------------------------------------- | +| `dataKey` | `bytes32` | The data key that has a required length for the data value. | +| `dataValue` | `bytes` | The data value that has an invalid length. | + +
+ +### InvalidERC725Function + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#invaliderc725function) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `InvalidERC725Function(bytes4)` +- Error hash: `0x2ba8851c` + +::: + +```solidity +error InvalidERC725Function(bytes4 invalidFunction); +``` + +_The Key Manager could not verify the calldata of the transaction because it could not recognise the function being called. Invalid function selector: `invalidFunction`._ + +Reverts when trying to call a function on the linked [`target`](#target), that is not any of the following: + +- `setData(bytes32,bytes)` (ERC725Y) + +- `setDataBatch(bytes32[],bytes[])` (ERC725Y) + +- `execute(uint256,address,uint256,bytes)` (ERC725X) + +- `transferOwnership(address)` (LSP14) + +- `acceptOwnership()` (LSP14) + +- `renounceOwnership()` (LSP14) + +#### Parameters + +| Name | Type | Description | +| ----------------- | :------: | --------------------------------------------------------------------------------------------------------------------------- | +| `invalidFunction` | `bytes4` | The `bytes4` selector of the function that was attempted to be called on the linked [`target`](#target) but not recognised. | + +
+ +### InvalidEncodedAllowedCalls + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#invalidencodedallowedcalls) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `InvalidEncodedAllowedCalls(bytes)` +- Error hash: `0x187e77ab` + +::: + +```solidity +error InvalidEncodedAllowedCalls(bytes allowedCallsValue); +``` + +_Could not decode the Allowed Calls. Value = `allowedCallsValue`._ + +Reverts when `allowedCallsValue` is not properly encoded as a `(bytes4,address,bytes4,bytes4)[CompactBytesArray]` (CompactBytesArray made of tuples that are 32 bytes long each). See LSP2 value type `CompactBytesArray` for more infos. + +#### Parameters + +| Name | Type | Description | +| ------------------- | :-----: | ----------------------------------------------------------------------------------------------------------------- | +| `allowedCallsValue` | `bytes` | The list of allowedCalls that are not encoded correctly as a `(bytes4,address,bytes4,bytes4)[CompactBytesArray]`. | + +
+ +### InvalidEncodedAllowedERC725YDataKeys + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#invalidencodedallowederc725ydatakeys) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `InvalidEncodedAllowedERC725YDataKeys(bytes,string)` +- Error hash: `0xae6cbd37` + +::: + +```solidity +error InvalidEncodedAllowedERC725YDataKeys(bytes value, string context); +``` + +_Error when reading the Allowed ERC725Y Data Keys. Reason: `context`, Allowed ERC725Y Data Keys value read: `value`._ + +Reverts when `value` is not encoded properly as a `bytes32[CompactBytesArray]`. The `context` string provides context on when this error occurred (\_e.g: when fetching the `AllowedERC725YDataKeys` to verify the permissions of a controller, or when validating the `AllowedERC725YDataKeys` when setting them for a controller). + +#### Parameters + +| Name | Type | Description | +| --------- | :------: | ---------------------------------------------------------- | +| `value` | `bytes` | The value that is not a valid `bytes32[CompactBytesArray]` | +| `context` | `string` | A brief description of where the error occurred. | + +
+ +### InvalidLSP6Target + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#invalidlsp6target) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `InvalidLSP6Target()` +- Error hash: `0xfc854579` + +::: + +```solidity +error InvalidLSP6Target(); +``` + +_Invalid address supplied to link this Key Manager to (`address(0)`)._ + +Reverts when the address provided to set as the [`target`](#target) linked to this KeyManager is invalid (_e.g. `address(0)`_). + +
+ +### InvalidPayload + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#invalidpayload) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `InvalidPayload(bytes)` +- Error hash: `0x3621bbcc` + +::: + +```solidity +error InvalidPayload(bytes payload); +``` + +_Invalid calldata payload sent._ + +Reverts when the payload is invalid. + +#### Parameters + +| Name | Type | Description | +| --------- | :-----: | ----------- | +| `payload` | `bytes` | - | + +
+ +### InvalidRelayNonce + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#invalidrelaynonce) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `InvalidRelayNonce(address,uint256,bytes)` +- Error hash: `0xc9bd9eb9` + +::: + +```solidity +error InvalidRelayNonce(address signer, uint256 invalidNonce, bytes signature); +``` + +_The relay call failed because an invalid nonce was provided for the address `signer` that signed the execute relay call. Invalid nonce: `invalidNonce`, signature of signer: `signature`._ + +Reverts when the `signer` address retrieved from the `signature` has an invalid nonce: `invalidNonce`. + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ---------------------------------------------------- | +| `signer` | `address` | The address of the signer. | +| `invalidNonce` | `uint256` | The nonce retrieved for the `signer` address. | +| `signature` | `bytes` | The signature used to retrieve the `signer` address. | + +
+ +### InvalidWhitelistedCall + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#invalidwhitelistedcall) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `InvalidWhitelistedCall(address)` +- Error hash: `0x6fd203c5` + +::: + +```solidity +error InvalidWhitelistedCall(address from); +``` + +_Invalid allowed calls (`0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff`) set for address `from`. Could not perform external call._ + +Reverts when a `from` address has _"any whitelisted call"_ as allowed call set. This revert happens during the verification of the permissions of the address for its allowed calls. A `from` address is not allowed to have 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff in its list of `AddressPermissions:AllowedCalls:
`, as this allows any STANDARD:ADDRESS:FUNCTION. This is equivalent to granting the SUPER permission and should never be valid. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | ---------------------------------------------------------------------- | +| `from` | `address` | The controller address that has _"any allowed calls"_ whitelisted set. | + +
+ +### KeyManagerCannotBeSetAsExtensionForLSP20Functions + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#keymanagercannotbesetasextensionforlsp20functions) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `KeyManagerCannotBeSetAsExtensionForLSP20Functions()` +- Error hash: `0x4a9fa8cf` + +::: + +```solidity +error KeyManagerCannotBeSetAsExtensionForLSP20Functions(); +``` + +_Key Manager cannot be used as an LSP17 extension for LSP20 functions._ + +Reverts when the address of the Key Manager is being set as extensions for lsp20 functions + +
+ +### LSP6BatchExcessiveValueSent + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#lsp6batchexcessivevaluesent) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `LSP6BatchExcessiveValueSent(uint256,uint256)` +- Error hash: `0xa51868b6` + +::: + +```solidity +error LSP6BatchExcessiveValueSent(uint256 totalValues, uint256 msgValue); +``` + +_Too much funds sent to forward each amount in the batch. No amount of native tokens should stay in the Key Manager._ + +This error occurs when there was too much funds sent to the batch functions `execute(uint256[],bytes[])` or `executeRelayCall(bytes[],uint256[],uint256[],bytes[])` to cover the sum of all the values forwarded on Reverts to avoid the KeyManager to holds some remaining funds sent to the following batch functions: + +- execute(uint256[],bytes[]) + +- executeRelayCall(bytes[],uint256[],uint256[],bytes[]) This error occurs when `msg.value` is more than the sum of all the values being forwarded on each payloads (`values[]` parameter from the batch functions above). + +#### Parameters + +| Name | Type | Description | +| ------------- | :-------: | ----------- | +| `totalValues` | `uint256` | - | +| `msgValue` | `uint256` | - | + +
+ +### LSP6BatchInsufficientValueSent + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#lsp6batchinsufficientvaluesent) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `LSP6BatchInsufficientValueSent(uint256,uint256)` +- Error hash: `0x30a324ac` + +::: + +```solidity +error LSP6BatchInsufficientValueSent(uint256 totalValues, uint256 msgValue); +``` + +_Not enough funds sent to forward each amount in the batch._ + +This error occurs when there was not enough funds sent to the batch functions `execute(uint256[],bytes[])` or `executeRelayCall(bytes[],uint256[],uint256[],bytes[])` to cover the sum of all the values forwarded on each payloads (`values[]` parameter from the batch functions above). This mean that `msg.value` is less than the sum of all the values being forwarded on each payloads (`values[]` parameters). + +#### Parameters + +| Name | Type | Description | +| ------------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `totalValues` | `uint256` | The sum of all the values forwarded on each payloads (`values[]` parameter from the batch functions above). | +| `msgValue` | `uint256` | The amount of native tokens sent to the batch functions `execute(uint256[],bytes[])` or `executeRelayCall(bytes[],uint256[],uint256[],bytes[])`. | + +
+ +### NoCallsAllowed + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#nocallsallowed) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `NoCallsAllowed(address)` +- Error hash: `0x6cb60587` + +::: + +```solidity +error NoCallsAllowed(address from); +``` + +_The address `from` is not authorised to use the linked account contract to make external calls, because it has no Allowed Calls set._ + +Reverts when the `from` address has no `AllowedCalls` set and cannot interact with any address using the linked [`target`](#target). + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | ------------------------------------- | +| `from` | `address` | The address that has no AllowedCalls. | + +
+ +### NoERC725YDataKeysAllowed + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#noerc725ydatakeysallowed) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `NoERC725YDataKeysAllowed(address)` +- Error hash: `0xed7fa509` + +::: + +```solidity +error NoERC725YDataKeysAllowed(address from); +``` + +_The address `from` is not authorised to set data, because it has no ERC725Y Data Key allowed._ + +Reverts when the `from` address has no AllowedERC725YDataKeys set and cannot set any ERC725Y data key on the ERC725Y storage of the linked [`target`](#target). + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | ----------------------------------------------------- | +| `from` | `address` | The address that has no `AllowedERC725YDataKeys` set. | + +
+ +### NoPermissionsSet + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#nopermissionsset) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `NoPermissionsSet(address)` +- Error hash: `0xf292052a` + +::: + +```solidity +error NoPermissionsSet(address from); +``` + +_The address `from` does not have any permission set on the contract linked to the Key Manager._ + +Reverts when address `from` does not have any permissions set on the account linked to this Key Manager + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | ------------------------------------------ | +| `from` | `address` | the address that does not have permissions | + +
+ +### NotAllowedCall + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#notallowedcall) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `NotAllowedCall(address,address,bytes4)` +- Error hash: `0x45147bce` + +::: + +```solidity +error NotAllowedCall(address from, address to, bytes4 selector); +``` + +_The address `from` is not authorised to call the function `selector` on the `to` address._ + +Reverts when `from` is not authorised to call the `execute(uint256,address,uint256,bytes)` function because of a not allowed callType, address, standard or function. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The controller that tried to call the `execute(uint256,address,uint256,bytes)` function. | +| `to` | `address` | The address of an EOA or contract that `from` tried to call using the linked [`target`](#target) | +| `selector` | `bytes4` | If `to` is a contract, the bytes4 selector of the function that `from` is trying to call. If no function is called (_e.g: a native token transfer_), selector = `0x00000000` | + +
+ +### NotAllowedERC725YDataKey + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#notallowederc725ydatakey) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `NotAllowedERC725YDataKey(address,bytes32)` +- Error hash: `0x557ae079` + +::: + +```solidity +error NotAllowedERC725YDataKey(address from, bytes32 disallowedKey); +``` + +_The address `from` is not authorised to set the data key `disallowedKey` on the contract linked to the Key Manager._ + +Reverts when address `from` is not authorised to set the key `disallowedKey` on the linked [`target`](#target). + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | address The controller that tried to `setData` on the linked [`target`](#target). | +| `disallowedKey` | `bytes32` | A bytes32 data key that `from` is not authorised to set on the ERC725Y storage of the linked [`target`](#target). | + +
+ +### NotAuthorised + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#notauthorised) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `NotAuthorised(address,string)` +- Error hash: `0x3bdad6e6` + +::: + +```solidity +error NotAuthorised(address from, string permission); +``` + +_The address `from` is not authorised to `permission` on the contract linked to the Key Manager._ + +Reverts when address `from` is not authorised and does not have `permission` on the linked [`target`](#target) + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ------------------------------------------------------------------------------ | +| `from` | `address` | address The address that was not authorised. | +| `permission` | `string` | permission The permission required (\_e.g: `SETDATA`, `CALL`, `TRANSFERVALUE`) | + +
+ +### NotRecognisedPermissionKey + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#notrecognisedpermissionkey) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `NotRecognisedPermissionKey(bytes32)` +- Error hash: `0x0f7d735b` + +::: + +```solidity +error NotRecognisedPermissionKey(bytes32 dataKey); +``` + +_The data key `dataKey` starts with `AddressPermissions` prefix but is none of the permission data keys defined in LSP6._ + +Reverts when `dataKey` is a `bytes32` value that does not adhere to any of the permission data keys defined by the LSP6 standard + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------------------------------------------------ | +| `dataKey` | `bytes32` | The dataKey that does not match any of the standard LSP6 permission data keys. | + +
+ +### RelayCallBeforeStartTime + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#relaycallbeforestarttime) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `RelayCallBeforeStartTime()` +- Error hash: `0x00de4b8a` + +::: + +```solidity +error RelayCallBeforeStartTime(); +``` + +_Relay call not valid yet._ + +Reverts when the relay call is cannot yet bet executed. This mean that the starting timestamp provided to [`executeRelayCall`](#executerelaycall) function is bigger than the current timestamp. + +
+ +### RelayCallExpired + +:::note References + +- Specification details: [**LSP-6-KeyManager**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#relaycallexpired) +- Solidity implementation: [`LSP6KeyManager.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) +- Error signature: `RelayCallExpired()` +- Error hash: `0x5c53a98c` + +::: + +```solidity +error RelayCallExpired(); +``` + +_Relay call expired (deadline passed)._ + +Reverts when the period to execute the relay call has expired. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/LSP7DigitalAsset.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/LSP7DigitalAsset.md new file mode 100644 index 000000000..2bbcd5109 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/LSP7DigitalAsset.md @@ -0,0 +1,1916 @@ + + + +# LSP7DigitalAsset + +:::info Standard Specifications + +[`LSP-7-DigitalAsset`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md) + +::: +:::info Solidity implementation + +[`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +> Implementation of a LSP7 Digital Asset, a contract that represents a fungible token. + +Minting and transferring are supplied with a `uint256` amount. This implementation is agnostic to the way tokens are created. A supply mechanism has to be added in a derived contract using [`_mint`](#_mint) For a generic mechanism, see [`LSP7Mintable`](#lsp7mintable). + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### fallback + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#fallback) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. + +
+ +### receive + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#receive) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +```solidity +receive() external payable; +``` + +_LSP7 contract cannot receive native tokens._ + +Reverts whenever someone tries to send native tokens to a LSP7 contract. + +
+ +### authorizeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#authorizeoperator) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `authorizeOperator(address,uint256,bytes)` +- Function selector: `0xb49506fd` + +::: + +:::danger + +To avoid front-running and Allowance Double-Spend Exploit when increasing or decreasing the authorized amount of an operator, it is advised to use the [`increaseAllowance`](#increaseallowance) and [`decreaseAllowance`](#decreaseallowance) functions. For more information, see: https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/ + +::: + +```solidity +function authorizeOperator( + address operator, + uint256 amount, + bytes operatorNotificationData +) external nonpayable; +``` + +Sets an `amount` of tokens that an `operator` has access from the caller's balance (allowance). See [`authorizedAmountFor`](#authorizedamountfor). Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------ | +| `operator` | `address` | The address to authorize as an operator. | +| `amount` | `uint256` | The allowance amount of tokens operator has access to. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### authorizedAmountFor + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#authorizedamountfor) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `authorizedAmountFor(address,address)` +- Function selector: `0x65aeaa95` + +::: + +```solidity +function authorizedAmountFor( + address operator, + address tokenOwner +) external view returns (uint256); +``` + +Get the amount of tokens `operator` address has access to from `tokenOwner`. Operators can send and burn tokens on behalf of their owners. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ---------------------------------------------------------- | +| `operator` | `address` | The operator's address to query the authorized amount for. | +| `tokenOwner` | `address` | The token owner that `operator` has allowance on. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------------------------------------------------------------- | +| `0` | `uint256` | The amount of tokens the `operator`'s address has access on the `tokenOwner`'s balance. | + +
+ +### balanceOf + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#balanceof) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `balanceOf(address)` +- Function selector: `0x70a08231` + +::: + +```solidity +function balanceOf(address tokenOwner) external view returns (uint256); +``` + +Get the number of tokens owned by `tokenOwner`. If the token is divisible (the [`decimals`](#decimals) function returns `18`), the amount returned should be divided by 1e18 to get a better picture of the actual balance of the `tokenOwner`. _Example:_ `balanceOf(someAddress) -> 42_000_000_000_000_000_000 / 1e18 = 42 tokens` + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | --------------------------------------------------------- | +| `tokenOwner` | `address` | The address of the token holder to query the balance for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------- | +| `0` | `uint256` | The amount of tokens owned by `tokenOwner`. | + +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#batchcalls) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### decimals + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#decimals) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `decimals()` +- Function selector: `0x313ce567` + +::: + +```solidity +function decimals() external view returns (uint8); +``` + +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ----------------------------------------------------------------------- | +| `0` | `uint8` | the number of decimals. If `0` is returned, the asset is non-divisible. | + +
+ +### decreaseAllowance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#decreaseallowance) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `decreaseAllowance(address,address,uint256,bytes)` +- Function selector: `0x78381670` + +::: + +```solidity +function decreaseAllowance( + address operator, + address tokenOwner, + uint256 subtractedAmount, + bytes operatorNotificationData +) external nonpayable; +``` + +_Decrease the allowance of `operator` by -`subtractedAmount`_ + +Atomically decreases the allowance granted to `operator` by the caller. This is an alternative approach to [`authorizeOperator`](#authorizeoperator) that can be used as a mitigation for the double spending allowance problem. Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------ | +| `operator` | `address` | The operator to decrease allowance for `msg.sender` | +| `tokenOwner` | `address` | The address of the token owner. | +| `subtractedAmount` | `uint256` | The amount to decrease by in the operator's allowance. | +| `operatorNotificationData` | `bytes` | - | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getdata) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getdatabatch) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### getOperatorsOf + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getoperatorsof) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getOperatorsOf(address)` +- Function selector: `0xd72fc29a` + +::: + +```solidity +function getOperatorsOf(address tokenOwner) external view returns (address[]); +``` + +Returns all `operator` addresses that are allowed to transfer or burn on behalf of `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `tokenOwner` | `address` | The token owner to get the operators for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ----------------------------------------------------------------------------------- | +| `0` | `address[]` | An array of operators allowed to transfer or burn tokens on behalf of `tokenOwner`. | + +
+ +### increaseAllowance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#increaseallowance) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `increaseAllowance(address,uint256,bytes)` +- Function selector: `0x2bc1da82` + +::: + +```solidity +function increaseAllowance( + address operator, + uint256 addedAmount, + bytes operatorNotificationData +) external nonpayable; +``` + +_Increase the allowance of `operator` by +`addedAmount`_ + +Atomically increases the allowance granted to `operator` by the caller. This is an alternative approach to [`authorizeOperator`](#authorizeoperator) that can be used as a mitigation for the double spending allowance problem. Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------- | +| `operator` | `address` | The operator to increase the allowance for `msg.sender` | +| `addedAmount` | `uint256` | The additional amount to add on top of the current operator's allowance | +| `operatorNotificationData` | `bytes` | - | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#owner) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#renounceownership) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner. + +
+ +### revokeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#revokeoperator) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `revokeOperator(address,address,bool,bytes)` +- Function selector: `0x30d0dc37` + +::: + +```solidity +function revokeOperator( + address operator, + address tokenOwner, + bool notify, + bytes operatorNotificationData +) external nonpayable; +``` + +Enables `tokenOwner` to remove `operator` for its tokens, disallowing it to send any amount of tokens on its behalf. This function also allows the `operator` to remove itself if it is the caller of this function + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | --------------------------------------------------------- | +| `operator` | `address` | The address to revoke as an operator. | +| `tokenOwner` | `address` | The address of the token owner. | +| `notify` | `bool` | Boolean indicating whether to notify the operator or not. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### setData + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#setdata) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner). + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#setdatabatch) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner) of the contract. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event **for each data key/value pair set**. + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#supportsinterface) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### totalSupply + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#totalsupply) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `totalSupply()` +- Function selector: `0x18160ddd` + +::: + +```solidity +function totalSupply() external view returns (uint256); +``` + +Returns the number of existing tokens that have been minted in this contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------ | +| `0` | `uint256` | The number of existing tokens. | + +
+ +### transfer + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transfer) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transfer(address,address,uint256,bool,bytes)` +- Function selector: `0x760d9bba` + +::: + +```solidity +function transfer( + address from, + address to, + uint256 amount, + bool force, + bytes data +) external nonpayable; +``` + +Transfers an `amount` of tokens from the `from` address to the `to` address and notify both sender and recipients via the LSP1 [`universalReceiver(...)`](#`universalreceiver) function. If the tokens are transferred by an operator on behalf of a token holder, the allowance for the operator will be decreased by `amount` once the token transfer has been completed (See [`authorizedAmountFor`](#authorizedamountfor)). + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The sender address. | +| `to` | `address` | The recipient address. | +| `amount` | `uint256` | The amount of tokens to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | + +
+ +### transferBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transferbatch) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transferBatch(address[],address[],uint256[],bool[],bytes[])` +- Function selector: `0x2d7667c9` + +::: + +```solidity +function transferBatch( + address[] from, + address[] to, + uint256[] amount, + bool[] force, + bytes[] data +) external nonpayable; +``` + +Same as [`transfer(...)`](#`transfer) but transfer multiple tokens based on the arrays of `from`, `to`, `amount`. + +#### Parameters + +| Name | Type | Description | +| -------- | :---------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address[]` | An array of sending addresses. | +| `to` | `address[]` | An array of receiving addresses. | +| `amount` | `uint256[]` | An array of amount of tokens to transfer for each `from -> to` transfer. | +| `force` | `bool[]` | For each transfer, when set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes[]` | An array of additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transferownership) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `newOwner` | `address` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +The ERC725Y data keys `LSP4TokenName` and `LSP4TokenSymbol` cannot be changed +via this function once the digital asset contract has been deployed. + +
+ +### \_updateOperator + +```solidity +function _updateOperator( + address tokenOwner, + address operator, + uint256 allowance, + bool notified, + bytes operatorNotificationData +) internal nonpayable; +``` + +Changes token `amount` the `operator` has access to from `tokenOwner` tokens. +If the amount is zero the operator is removed from the list of operators, otherwise he is added to the list of operators. +If the amount is zero then the operator is being revoked, otherwise the operator amount is being modified. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------------------------------------------------------- | +| `tokenOwner` | `address` | The address that will give `operator` an allowance for on its balance. | +| `operator` | `address` | @param operatorNotificationData The data to send to the universalReceiver function of the operator in case of notifying | +| `allowance` | `uint256` | The maximum amount of token that `operator` can spend from the `tokenOwner`'s balance. | +| `notified` | `bool` | Boolean indicating whether the operator has been notified about the change of allowance | +| `operatorNotificationData` | `bytes` | The data to send to the universalReceiver function of the operator in case of notifying | + +
+ +### \_mint + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the recipient via LSP1**. + +::: + +```solidity +function _mint( + address to, + uint256 amount, + bool force, + bytes data +) internal nonpayable; +``` + +Mints `amount` of tokens and transfers it to `to`. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as `from`. + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to mint tokens for. | +| `amount` | `uint256` | The amount of tokens to mint. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `data` | `bytes` | Additional data the caller wants included in the emitted [`Transfer`](#transfer) event, and sent in the LSP1 hook to the `to` address. | + +
+ +### \_burn + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the sender via LSP1**. + +::: + +:::tip Hint + +In dApps, you can know which address is burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + +::: + +```solidity +function _burn(address from, uint256 amount, bytes data) internal nonpayable; +``` + +Burns (= destroys) `amount` of tokens, decrease the `from` balance. This is done by sending them to the zero address. +Both the sender and recipient will be notified of the token transfer through the LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as the `to` address + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address to burn tokens from its balance. | +| `amount` | `uint256` | The amount of tokens to burn. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. | + +
+ +### \_spendAllowance + +```solidity +function _spendAllowance( + address operator, + address tokenOwner, + uint256 amountToSpend +) internal nonpayable; +``` + +Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ------------------------------------------------------------------- | +| `operator` | `address` | The address of the operator to decrease the allowance of. | +| `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | + +
+ +### \_transfer + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the sender/recipient via LSP1**. + +::: + +```solidity +function _transfer( + address from, + address to, + uint256 amount, + bool force, + bytes data +) internal nonpayable; +``` + +Transfer tokens from `from` to `to` by decreasing the balance of `from` by `-amount` and increasing the balance +of `to` by `+amount`. +Both the sender and recipient will be notified of the token transfer through the LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event. + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address to decrease the balance. | +| `to` | `address` | The address to increase the balance. | +| `amount` | `uint256` | The amount of tokens to transfer from `from` to `to`. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. | + +
+ +### \_beforeTokenTransfer + +```solidity +function _beforeTokenTransfer( + address from, + address to, + uint256 amount, + bytes data +) internal nonpayable; +``` + +Hook that is called before any token transfer, including minting and burning. +Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------ | +| `from` | `address` | The sender address | +| `to` | `address` | The recipient address | +| `amount` | `uint256` | The amount of token to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_afterTokenTransfer + +```solidity +function _afterTokenTransfer( + address from, + address to, + uint256 amount, + bytes data +) internal nonpayable; +``` + +Hook that is called after any token transfer, including minting and burning. +Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------ | +| `from` | `address` | The sender address | +| `to` | `address` | The recipient address | +| `amount` | `uint256` | The amount of token to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_notifyTokenOperator + +```solidity +function _notifyTokenOperator( + address operator, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the operator `operator` about the `amount` tokens being authorized with. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. +If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `operator` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `operator` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenSender + +```solidity +function _notifyTokenSender(address from, bytes lsp1Data) internal nonpayable; +``` + +Attempt to notify the token sender `from` about the `amount` of tokens being transferred. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. +If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `from` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `from` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenReceiver + +```solidity +function _notifyTokenReceiver( + address to, + bool force, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the token receiver `to` about the `amount` tokens being received. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. +If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + +- if `force` is set to `true`, nothing will happen and no notification will be sent. + +- if `force` is set to `false, the transaction will revert. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | --------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `lsp1Data` | `bytes` | The data to be sent to the `to` address in the `universalReceiver(...)` call. | + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +- we do not check that payable bool as in lsp7 standard we will always forward the value to the extension + +
+ +### \_fallbackLSP17Extendable + +:::info + +The LSP7 Token contract should not hold any native tokens. Any native tokens received by the contract +will be forwarded to the extension address mapped to the selector from `msg.sig`. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call with the received value to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the address(0) will be returned. +Forwards the value if the extension is payable. +Reverts if there is no extension for the function being called. +If there is an extension for the function selector being called, it calls the extension with the +CALL opcode, passing the [`msg.data`](#msg.data) appended with the 20 bytes of the [`msg.sender`](#msg.sender) and +32 bytes of the [`msg.value`](#msg.value) + +
+ +## Events + +### DataChanged + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#datachanged) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### OperatorAuthorizationChanged + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorauthorizationchanged) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OperatorAuthorizationChanged(address,address,uint256,bytes)` +- Event topic hash: `0xf772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d` + +::: + +```solidity +event OperatorAuthorizationChanged( + address indexed operator, + address indexed tokenOwner, + uint256 indexed amount, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` enables `operator` for `amount` tokens. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address authorized as an operator | +| `tokenOwner` **`indexed`** | `address` | The token owner | +| `amount` **`indexed`** | `uint256` | The amount of tokens `operator` address has access to from `tokenOwner` | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OperatorRevoked + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorrevoked) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OperatorRevoked(address,address,bool,bytes)` +- Event topic hash: `0x0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd4167` + +::: + +```solidity +event OperatorRevoked( + address indexed operator, + address indexed tokenOwner, + bool indexed notified, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` disables `operator` for `amount` tokens and set its [`authorizedAmountFor(...)`](#`authorizedamountfor) to `0`. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address revoked from operating | +| `tokenOwner` **`indexed`** | `address` | The token owner | +| `notified` **`indexed`** | `bool` | Bool indicating whether the operator has been notified or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownershiptransferred) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### Transfer + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transfer) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `Transfer(address,address,address,uint256,bool,bytes)` +- Event topic hash: `0x3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6` + +::: + +```solidity +event Transfer( + address indexed operator, + address indexed from, + address indexed to, + uint256 amount, + bool force, + bytes data +); +``` + +Emitted when the `from` transferred successfully `amount` of tokens to `to`. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ---------------------------------------------------------------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address of the operator that executed the transfer. | +| `from` **`indexed`** | `address` | The address which tokens were sent from (balance decreased by `-amount`). | +| `to` **`indexed`** | `address` | The address that received the tokens (balance increased by `+amount`). | +| `amount` | `uint256` | The amount of tokens transferred. | +| `force` | `bool` | if the transferred enforced the `to` recipient address to be a contract that implements the LSP1 standard or not. | +| `data` | `bytes` | Any additional data included by the caller during the transfer, and sent in the LSP1 hooks to the `from` and `to` addresses. | + +
+ +## Errors + +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### InvalidExtensionAddress + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#invalidextensionaddress) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `InvalidExtensionAddress(bytes)` +- Error hash: `0x42bfe79f` + +::: + +```solidity +error InvalidExtensionAddress(bytes storedData); +``` + +reverts when the bytes retrieved from the LSP17 data key is not a valid address (not 20 bytes) + +#### Parameters + +| Name | Type | Description | +| ------------ | :-----: | ----------- | +| `storedData` | `bytes` | - | + +
+ +### InvalidFunctionSelector + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#invalidfunctionselector) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `InvalidFunctionSelector(bytes)` +- Error hash: `0xe5099ee3` + +::: + +```solidity +error InvalidFunctionSelector(bytes data); +``` + +reverts when the contract is called with a function selector not valid (less than 4 bytes of data) + +#### Parameters + +| Name | Type | Description | +| ------ | :-----: | ----------- | +| `data` | `bytes` | - | + +
+ +### LSP4TokenNameNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokennamenoteditable) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenNameNotEditable()` +- Error hash: `0x85c169bd` + +::: + +```solidity +error LSP4TokenNameNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenName` after the digital asset contract has been deployed / initialized. The `LSP4TokenName` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenSymbolNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokensymbolnoteditable) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenSymbolNotEditable()` +- Error hash: `0x76755b38` + +::: + +```solidity +error LSP4TokenSymbolNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenSymbol` after the digital asset contract has been deployed / initialized. The `LSP4TokenSymbol` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenTypeNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokentypenoteditable) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenTypeNotEditable()` +- Error hash: `0x4ef6d7fb` + +::: + +```solidity +error LSP4TokenTypeNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenType` after the digital asset contract has been deployed / initialized. The `LSP4TokenType` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor / initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP7AmountExceedsAuthorizedAmount + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7amountexceedsauthorizedamount) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7AmountExceedsAuthorizedAmount(address,uint256,address,uint256)` +- Error hash: `0xf3a6b691` + +::: + +```solidity +error LSP7AmountExceedsAuthorizedAmount( + address tokenOwner, + uint256 authorizedAmount, + address operator, + uint256 amount +); +``` + +reverts when `operator` of `tokenOwner` send an `amount` of tokens larger than the `authorizedAmount`. + +#### Parameters + +| Name | Type | Description | +| ------------------ | :-------: | ----------- | +| `tokenOwner` | `address` | - | +| `authorizedAmount` | `uint256` | - | +| `operator` | `address` | - | +| `amount` | `uint256` | - | + +
+ +### LSP7AmountExceedsBalance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7amountexceedsbalance) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7AmountExceedsBalance(uint256,address,uint256)` +- Error hash: `0x08d47949` + +::: + +```solidity +error LSP7AmountExceedsBalance( + uint256 balance, + address tokenOwner, + uint256 amount +); +``` + +reverts when sending an `amount` of tokens larger than the current `balance` of the `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `balance` | `uint256` | - | +| `tokenOwner` | `address` | - | +| `amount` | `uint256` | - | + +
+ +### LSP7BatchCallFailed + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7batchcallfailed) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7BatchCallFailed(uint256)` +- Error hash: `0xb774c284` + +::: + +```solidity +error LSP7BatchCallFailed(uint256 callIndex); +``` + +_Batch call failed._ + +Reverts when a batch call failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ----------- | +| `callIndex` | `uint256` | - | + +
+ +### LSP7CannotSendWithAddressZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7cannotsendwithaddresszero) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7CannotSendWithAddressZero()` +- Error hash: `0xd2d5ec30` + +::: + +```solidity +error LSP7CannotSendWithAddressZero(); +``` + +reverts when trying to: + +- mint tokens to the zero address. + +- burn tokens from the zero address. + +- transfer tokens from or to the zero address. + +
+ +### LSP7CannotUseAddressZeroAsOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7cannotuseaddresszeroasoperator) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7CannotUseAddressZeroAsOperator()` +- Error hash: `0x6355e766` + +::: + +```solidity +error LSP7CannotUseAddressZeroAsOperator(); +``` + +reverts when trying to set the zero address as an operator. + +
+ +### LSP7DecreaseAllowanceNotAuthorized + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7decreaseallowancenotauthorized) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7DecreaseAllowanceNotAuthorized(address,address,address)` +- Error hash: `0x98ce2945` + +::: + +```solidity +error LSP7DecreaseAllowanceNotAuthorized( + address caller, + address tokenOwner, + address operator +); +``` + +Reverts when the call to decrease allowance is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `operator` | `address` | - | + +
+ +### LSP7DecreasedAllowanceBelowZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7decreasedallowancebelowzero) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7DecreasedAllowanceBelowZero()` +- Error hash: `0x0ef76c35` + +::: + +```solidity +error LSP7DecreasedAllowanceBelowZero(); +``` + +Reverts when trying to decrease an operator's allowance to more than its current allowance. + +
+ +### LSP7InvalidTransferBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7invalidtransferbatch) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7InvalidTransferBatch()` +- Error hash: `0x263eee8d` + +::: + +```solidity +error LSP7InvalidTransferBatch(); +``` + +reverts when the array parameters used in [`transferBatch`](#transferbatch) have different lengths. + +
+ +### LSP7NotifyTokenReceiverContractMissingLSP1Interface + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7notifytokenreceivercontractmissinglsp1interface) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7NotifyTokenReceiverContractMissingLSP1Interface(address)` +- Error hash: `0xa608fbb6` + +::: + +```solidity +error LSP7NotifyTokenReceiverContractMissingLSP1Interface( + address tokenReceiver +); +``` + +reverts if the `tokenReceiver` does not implement LSP1 when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP7NotifyTokenReceiverIsEOA + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7notifytokenreceiveriseoa) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7NotifyTokenReceiverIsEOA(address)` +- Error hash: `0x26c247f4` + +::: + +```solidity +error LSP7NotifyTokenReceiverIsEOA(address tokenReceiver); +``` + +reverts if the `tokenReceiver` is an EOA when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP7RevokeOperatorNotAuthorized + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7revokeoperatornotauthorized) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7RevokeOperatorNotAuthorized(address,address,address)` +- Error hash: `0x1a525b32` + +::: + +```solidity +error LSP7RevokeOperatorNotAuthorized( + address caller, + address tokenOwner, + address operator +); +``` + +Reverts when the call to revoke operator is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `operator` | `address` | - | + +
+ +### LSP7TokenContractCannotHoldValue + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7tokencontractcannotholdvalue) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7TokenContractCannotHoldValue()` +- Error hash: `0x388f5adc` + +::: + +```solidity +error LSP7TokenContractCannotHoldValue(); +``` + +_LSP7 contract cannot receive native tokens._ + +Error occurs when sending native tokens to the LSP7 contract without sending any data. E.g. Sending value without passing a bytes4 function selector to call a LSP17 Extension. + +
+ +### LSP7TokenOwnerCannotBeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7tokenownercannotbeoperator) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7TokenOwnerCannotBeOperator()` +- Error hash: `0xdab75047` + +::: + +```solidity +error LSP7TokenOwnerCannotBeOperator(); +``` + +reverts when trying to authorize or revoke the token's owner as an operator. + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
+ +### OperatorAllowanceCannotBeIncreasedFromZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorallowancecannotbeincreasedfromzero) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OperatorAllowanceCannotBeIncreasedFromZero(address)` +- Error hash: `0xcba6e977` + +::: + +```solidity +error OperatorAllowanceCannotBeIncreasedFromZero(address operator); +``` + +Reverts when token owner call [`increaseAllowance`](#increaseallowance) for an operator that does not have any allowance + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownablecallernottheowner) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
+ +### OwnableCannotSetZeroAddressAsOwner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownablecannotsetzeroaddressasowner) +- Solidity implementation: [`LSP7DigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OwnableCannotSetZeroAddressAsOwner()` +- Error hash: `0x1ad8836c` + +::: + +```solidity +error OwnableCannotSetZeroAddressAsOwner(); +``` + +Reverts when trying to set `address(0)` as the contract owner when deploying the contract, initializing it or transferring ownership of the contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7Burnable.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7Burnable.md new file mode 100644 index 000000000..d5ecec050 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7Burnable.md @@ -0,0 +1,1941 @@ + + + +# LSP7Burnable + +:::info Standard Specifications + +[`LSP-7-DigitalAsset`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md) + +::: +:::info Solidity implementation + +[`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +> LSP7 token extension that allows token holders to destroy both their own tokens and those that they have an allowance for as an operator. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### fallback + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#fallback) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. + +
+ +### receive + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#receive) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +```solidity +receive() external payable; +``` + +_LSP7 contract cannot receive native tokens._ + +Reverts whenever someone tries to send native tokens to a LSP7 contract. + +
+ +### authorizeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#authorizeoperator) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `authorizeOperator(address,uint256,bytes)` +- Function selector: `0xb49506fd` + +::: + +:::danger + +To avoid front-running and Allowance Double-Spend Exploit when increasing or decreasing the authorized amount of an operator, it is advised to use the [`increaseAllowance`](#increaseallowance) and [`decreaseAllowance`](#decreaseallowance) functions. For more information, see: https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/ + +::: + +```solidity +function authorizeOperator( + address operator, + uint256 amount, + bytes operatorNotificationData +) external nonpayable; +``` + +Sets an `amount` of tokens that an `operator` has access from the caller's balance (allowance). See [`authorizedAmountFor`](#authorizedamountfor). Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------ | +| `operator` | `address` | The address to authorize as an operator. | +| `amount` | `uint256` | The allowance amount of tokens operator has access to. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### authorizedAmountFor + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#authorizedamountfor) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `authorizedAmountFor(address,address)` +- Function selector: `0x65aeaa95` + +::: + +```solidity +function authorizedAmountFor( + address operator, + address tokenOwner +) external view returns (uint256); +``` + +Get the amount of tokens `operator` address has access to from `tokenOwner`. Operators can send and burn tokens on behalf of their owners. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ---------------------------------------------------------- | +| `operator` | `address` | The operator's address to query the authorized amount for. | +| `tokenOwner` | `address` | The token owner that `operator` has allowance on. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------------------------------------------------------------- | +| `0` | `uint256` | The amount of tokens the `operator`'s address has access on the `tokenOwner`'s balance. | + +
+ +### balanceOf + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#balanceof) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `balanceOf(address)` +- Function selector: `0x70a08231` + +::: + +```solidity +function balanceOf(address tokenOwner) external view returns (uint256); +``` + +Get the number of tokens owned by `tokenOwner`. If the token is divisible (the [`decimals`](#decimals) function returns `18`), the amount returned should be divided by 1e18 to get a better picture of the actual balance of the `tokenOwner`. _Example:_ `balanceOf(someAddress) -> 42_000_000_000_000_000_000 / 1e18 = 42 tokens` + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | --------------------------------------------------------- | +| `tokenOwner` | `address` | The address of the token holder to query the balance for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------- | +| `0` | `uint256` | The amount of tokens owned by `tokenOwner`. | + +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#batchcalls) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### burn + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#burn) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `burn(address,uint256,bytes)` +- Function selector: `0x44d17187` + +::: + +```solidity +function burn(address from, uint256 amount, bytes data) external nonpayable; +``` + +See internal [`_burn`](#_burn) function for details. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ----------- | +| `from` | `address` | - | +| `amount` | `uint256` | - | +| `data` | `bytes` | - | + +
+ +### decimals + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#decimals) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `decimals()` +- Function selector: `0x313ce567` + +::: + +```solidity +function decimals() external view returns (uint8); +``` + +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ----------------------------------------------------------------------- | +| `0` | `uint8` | the number of decimals. If `0` is returned, the asset is non-divisible. | + +
+ +### decreaseAllowance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#decreaseallowance) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `decreaseAllowance(address,address,uint256,bytes)` +- Function selector: `0x78381670` + +::: + +```solidity +function decreaseAllowance( + address operator, + address tokenOwner, + uint256 subtractedAmount, + bytes operatorNotificationData +) external nonpayable; +``` + +_Decrease the allowance of `operator` by -`subtractedAmount`_ + +Atomically decreases the allowance granted to `operator` by the caller. This is an alternative approach to [`authorizeOperator`](#authorizeoperator) that can be used as a mitigation for the double spending allowance problem. Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------ | +| `operator` | `address` | The operator to decrease allowance for `msg.sender` | +| `tokenOwner` | `address` | The address of the token owner. | +| `subtractedAmount` | `uint256` | The amount to decrease by in the operator's allowance. | +| `operatorNotificationData` | `bytes` | - | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getdata) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getdatabatch) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### getOperatorsOf + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getoperatorsof) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getOperatorsOf(address)` +- Function selector: `0xd72fc29a` + +::: + +```solidity +function getOperatorsOf(address tokenOwner) external view returns (address[]); +``` + +Returns all `operator` addresses that are allowed to transfer or burn on behalf of `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `tokenOwner` | `address` | The token owner to get the operators for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ----------------------------------------------------------------------------------- | +| `0` | `address[]` | An array of operators allowed to transfer or burn tokens on behalf of `tokenOwner`. | + +
+ +### increaseAllowance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#increaseallowance) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `increaseAllowance(address,uint256,bytes)` +- Function selector: `0x2bc1da82` + +::: + +```solidity +function increaseAllowance( + address operator, + uint256 addedAmount, + bytes operatorNotificationData +) external nonpayable; +``` + +_Increase the allowance of `operator` by +`addedAmount`_ + +Atomically increases the allowance granted to `operator` by the caller. This is an alternative approach to [`authorizeOperator`](#authorizeoperator) that can be used as a mitigation for the double spending allowance problem. Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------- | +| `operator` | `address` | The operator to increase the allowance for `msg.sender` | +| `addedAmount` | `uint256` | The additional amount to add on top of the current operator's allowance | +| `operatorNotificationData` | `bytes` | - | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#owner) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#renounceownership) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner. + +
+ +### revokeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#revokeoperator) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `revokeOperator(address,address,bool,bytes)` +- Function selector: `0x30d0dc37` + +::: + +```solidity +function revokeOperator( + address operator, + address tokenOwner, + bool notify, + bytes operatorNotificationData +) external nonpayable; +``` + +Enables `tokenOwner` to remove `operator` for its tokens, disallowing it to send any amount of tokens on its behalf. This function also allows the `operator` to remove itself if it is the caller of this function + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | --------------------------------------------------------- | +| `operator` | `address` | The address to revoke as an operator. | +| `tokenOwner` | `address` | The address of the token owner. | +| `notify` | `bool` | Boolean indicating whether to notify the operator or not. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### setData + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#setdata) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner). + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#setdatabatch) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner) of the contract. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event **for each data key/value pair set**. + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#supportsinterface) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### totalSupply + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#totalsupply) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `totalSupply()` +- Function selector: `0x18160ddd` + +::: + +```solidity +function totalSupply() external view returns (uint256); +``` + +Returns the number of existing tokens that have been minted in this contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------ | +| `0` | `uint256` | The number of existing tokens. | + +
+ +### transfer + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transfer) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transfer(address,address,uint256,bool,bytes)` +- Function selector: `0x760d9bba` + +::: + +```solidity +function transfer( + address from, + address to, + uint256 amount, + bool force, + bytes data +) external nonpayable; +``` + +Transfers an `amount` of tokens from the `from` address to the `to` address and notify both sender and recipients via the LSP1 [`universalReceiver(...)`](#`universalreceiver) function. If the tokens are transferred by an operator on behalf of a token holder, the allowance for the operator will be decreased by `amount` once the token transfer has been completed (See [`authorizedAmountFor`](#authorizedamountfor)). + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The sender address. | +| `to` | `address` | The recipient address. | +| `amount` | `uint256` | The amount of tokens to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | + +
+ +### transferBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transferbatch) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transferBatch(address[],address[],uint256[],bool[],bytes[])` +- Function selector: `0x2d7667c9` + +::: + +```solidity +function transferBatch( + address[] from, + address[] to, + uint256[] amount, + bool[] force, + bytes[] data +) external nonpayable; +``` + +Same as [`transfer(...)`](#`transfer) but transfer multiple tokens based on the arrays of `from`, `to`, `amount`. + +#### Parameters + +| Name | Type | Description | +| -------- | :---------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address[]` | An array of sending addresses. | +| `to` | `address[]` | An array of receiving addresses. | +| `amount` | `uint256[]` | An array of amount of tokens to transfer for each `from -> to` transfer. | +| `force` | `bool[]` | For each transfer, when set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes[]` | An array of additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transferownership) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `newOwner` | `address` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +The ERC725Y data keys `LSP4TokenName` and `LSP4TokenSymbol` cannot be changed +via this function once the digital asset contract has been deployed. + +
+ +### \_updateOperator + +```solidity +function _updateOperator( + address tokenOwner, + address operator, + uint256 allowance, + bool notified, + bytes operatorNotificationData +) internal nonpayable; +``` + +Changes token `amount` the `operator` has access to from `tokenOwner` tokens. +If the amount is zero the operator is removed from the list of operators, otherwise he is added to the list of operators. +If the amount is zero then the operator is being revoked, otherwise the operator amount is being modified. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------------------------------------------------------- | +| `tokenOwner` | `address` | The address that will give `operator` an allowance for on its balance. | +| `operator` | `address` | @param operatorNotificationData The data to send to the universalReceiver function of the operator in case of notifying | +| `allowance` | `uint256` | The maximum amount of token that `operator` can spend from the `tokenOwner`'s balance. | +| `notified` | `bool` | Boolean indicating whether the operator has been notified about the change of allowance | +| `operatorNotificationData` | `bytes` | The data to send to the universalReceiver function of the operator in case of notifying | + +
+ +### \_mint + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the recipient via LSP1**. + +::: + +```solidity +function _mint( + address to, + uint256 amount, + bool force, + bytes data +) internal nonpayable; +``` + +Mints `amount` of tokens and transfers it to `to`. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as `from`. + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to mint tokens for. | +| `amount` | `uint256` | The amount of tokens to mint. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `data` | `bytes` | Additional data the caller wants included in the emitted [`Transfer`](#transfer) event, and sent in the LSP1 hook to the `to` address. | + +
+ +### \_burn + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the sender via LSP1**. + +::: + +:::tip Hint + +In dApps, you can know which address is burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + +::: + +```solidity +function _burn(address from, uint256 amount, bytes data) internal nonpayable; +``` + +Burns (= destroys) `amount` of tokens, decrease the `from` balance. This is done by sending them to the zero address. +Both the sender and recipient will be notified of the token transfer through the LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as the `to` address + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address to burn tokens from its balance. | +| `amount` | `uint256` | The amount of tokens to burn. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. | + +
+ +### \_spendAllowance + +```solidity +function _spendAllowance( + address operator, + address tokenOwner, + uint256 amountToSpend +) internal nonpayable; +``` + +Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ------------------------------------------------------------------- | +| `operator` | `address` | The address of the operator to decrease the allowance of. | +| `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | + +
+ +### \_transfer + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the sender/recipient via LSP1**. + +::: + +```solidity +function _transfer( + address from, + address to, + uint256 amount, + bool force, + bytes data +) internal nonpayable; +``` + +Transfer tokens from `from` to `to` by decreasing the balance of `from` by `-amount` and increasing the balance +of `to` by `+amount`. +Both the sender and recipient will be notified of the token transfer through the LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event. + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address to decrease the balance. | +| `to` | `address` | The address to increase the balance. | +| `amount` | `uint256` | The amount of tokens to transfer from `from` to `to`. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. | + +
+ +### \_beforeTokenTransfer + +```solidity +function _beforeTokenTransfer( + address from, + address to, + uint256 amount, + bytes data +) internal nonpayable; +``` + +Hook that is called before any token transfer, including minting and burning. +Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------ | +| `from` | `address` | The sender address | +| `to` | `address` | The recipient address | +| `amount` | `uint256` | The amount of token to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_afterTokenTransfer + +```solidity +function _afterTokenTransfer( + address from, + address to, + uint256 amount, + bytes data +) internal nonpayable; +``` + +Hook that is called after any token transfer, including minting and burning. +Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------ | +| `from` | `address` | The sender address | +| `to` | `address` | The recipient address | +| `amount` | `uint256` | The amount of token to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_notifyTokenOperator + +```solidity +function _notifyTokenOperator( + address operator, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the operator `operator` about the `amount` tokens being authorized with. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. +If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `operator` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `operator` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenSender + +```solidity +function _notifyTokenSender(address from, bytes lsp1Data) internal nonpayable; +``` + +Attempt to notify the token sender `from` about the `amount` of tokens being transferred. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. +If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `from` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `from` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenReceiver + +```solidity +function _notifyTokenReceiver( + address to, + bool force, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the token receiver `to` about the `amount` tokens being received. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. +If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + +- if `force` is set to `true`, nothing will happen and no notification will be sent. + +- if `force` is set to `false, the transaction will revert. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | --------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `lsp1Data` | `bytes` | The data to be sent to the `to` address in the `universalReceiver(...)` call. | + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +- we do not check that payable bool as in lsp7 standard we will always forward the value to the extension + +
+ +### \_fallbackLSP17Extendable + +:::info + +The LSP7 Token contract should not hold any native tokens. Any native tokens received by the contract +will be forwarded to the extension address mapped to the selector from `msg.sig`. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call with the received value to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the address(0) will be returned. +Forwards the value if the extension is payable. +Reverts if there is no extension for the function being called. +If there is an extension for the function selector being called, it calls the extension with the +CALL opcode, passing the [`msg.data`](#msg.data) appended with the 20 bytes of the [`msg.sender`](#msg.sender) and +32 bytes of the [`msg.value`](#msg.value) + +
+ +## Events + +### DataChanged + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#datachanged) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### OperatorAuthorizationChanged + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorauthorizationchanged) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OperatorAuthorizationChanged(address,address,uint256,bytes)` +- Event topic hash: `0xf772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d` + +::: + +```solidity +event OperatorAuthorizationChanged( + address indexed operator, + address indexed tokenOwner, + uint256 indexed amount, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` enables `operator` for `amount` tokens. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address authorized as an operator | +| `tokenOwner` **`indexed`** | `address` | The token owner | +| `amount` **`indexed`** | `uint256` | The amount of tokens `operator` address has access to from `tokenOwner` | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OperatorRevoked + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorrevoked) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OperatorRevoked(address,address,bool,bytes)` +- Event topic hash: `0x0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd4167` + +::: + +```solidity +event OperatorRevoked( + address indexed operator, + address indexed tokenOwner, + bool indexed notified, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` disables `operator` for `amount` tokens and set its [`authorizedAmountFor(...)`](#`authorizedamountfor) to `0`. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address revoked from operating | +| `tokenOwner` **`indexed`** | `address` | The token owner | +| `notified` **`indexed`** | `bool` | Bool indicating whether the operator has been notified or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownershiptransferred) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### Transfer + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transfer) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `Transfer(address,address,address,uint256,bool,bytes)` +- Event topic hash: `0x3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6` + +::: + +```solidity +event Transfer( + address indexed operator, + address indexed from, + address indexed to, + uint256 amount, + bool force, + bytes data +); +``` + +Emitted when the `from` transferred successfully `amount` of tokens to `to`. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ---------------------------------------------------------------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address of the operator that executed the transfer. | +| `from` **`indexed`** | `address` | The address which tokens were sent from (balance decreased by `-amount`). | +| `to` **`indexed`** | `address` | The address that received the tokens (balance increased by `+amount`). | +| `amount` | `uint256` | The amount of tokens transferred. | +| `force` | `bool` | if the transferred enforced the `to` recipient address to be a contract that implements the LSP1 standard or not. | +| `data` | `bytes` | Any additional data included by the caller during the transfer, and sent in the LSP1 hooks to the `from` and `to` addresses. | + +
+ +## Errors + +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### InvalidExtensionAddress + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#invalidextensionaddress) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `InvalidExtensionAddress(bytes)` +- Error hash: `0x42bfe79f` + +::: + +```solidity +error InvalidExtensionAddress(bytes storedData); +``` + +reverts when the bytes retrieved from the LSP17 data key is not a valid address (not 20 bytes) + +#### Parameters + +| Name | Type | Description | +| ------------ | :-----: | ----------- | +| `storedData` | `bytes` | - | + +
+ +### InvalidFunctionSelector + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#invalidfunctionselector) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `InvalidFunctionSelector(bytes)` +- Error hash: `0xe5099ee3` + +::: + +```solidity +error InvalidFunctionSelector(bytes data); +``` + +reverts when the contract is called with a function selector not valid (less than 4 bytes of data) + +#### Parameters + +| Name | Type | Description | +| ------ | :-----: | ----------- | +| `data` | `bytes` | - | + +
+ +### LSP4TokenNameNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokennamenoteditable) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenNameNotEditable()` +- Error hash: `0x85c169bd` + +::: + +```solidity +error LSP4TokenNameNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenName` after the digital asset contract has been deployed / initialized. The `LSP4TokenName` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenSymbolNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokensymbolnoteditable) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenSymbolNotEditable()` +- Error hash: `0x76755b38` + +::: + +```solidity +error LSP4TokenSymbolNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenSymbol` after the digital asset contract has been deployed / initialized. The `LSP4TokenSymbol` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenTypeNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokentypenoteditable) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenTypeNotEditable()` +- Error hash: `0x4ef6d7fb` + +::: + +```solidity +error LSP4TokenTypeNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenType` after the digital asset contract has been deployed / initialized. The `LSP4TokenType` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor / initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP7AmountExceedsAuthorizedAmount + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7amountexceedsauthorizedamount) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7AmountExceedsAuthorizedAmount(address,uint256,address,uint256)` +- Error hash: `0xf3a6b691` + +::: + +```solidity +error LSP7AmountExceedsAuthorizedAmount( + address tokenOwner, + uint256 authorizedAmount, + address operator, + uint256 amount +); +``` + +reverts when `operator` of `tokenOwner` send an `amount` of tokens larger than the `authorizedAmount`. + +#### Parameters + +| Name | Type | Description | +| ------------------ | :-------: | ----------- | +| `tokenOwner` | `address` | - | +| `authorizedAmount` | `uint256` | - | +| `operator` | `address` | - | +| `amount` | `uint256` | - | + +
+ +### LSP7AmountExceedsBalance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7amountexceedsbalance) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7AmountExceedsBalance(uint256,address,uint256)` +- Error hash: `0x08d47949` + +::: + +```solidity +error LSP7AmountExceedsBalance( + uint256 balance, + address tokenOwner, + uint256 amount +); +``` + +reverts when sending an `amount` of tokens larger than the current `balance` of the `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `balance` | `uint256` | - | +| `tokenOwner` | `address` | - | +| `amount` | `uint256` | - | + +
+ +### LSP7BatchCallFailed + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7batchcallfailed) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7BatchCallFailed(uint256)` +- Error hash: `0xb774c284` + +::: + +```solidity +error LSP7BatchCallFailed(uint256 callIndex); +``` + +_Batch call failed._ + +Reverts when a batch call failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ----------- | +| `callIndex` | `uint256` | - | + +
+ +### LSP7CannotSendWithAddressZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7cannotsendwithaddresszero) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7CannotSendWithAddressZero()` +- Error hash: `0xd2d5ec30` + +::: + +```solidity +error LSP7CannotSendWithAddressZero(); +``` + +reverts when trying to: + +- mint tokens to the zero address. + +- burn tokens from the zero address. + +- transfer tokens from or to the zero address. + +
+ +### LSP7CannotUseAddressZeroAsOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7cannotuseaddresszeroasoperator) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7CannotUseAddressZeroAsOperator()` +- Error hash: `0x6355e766` + +::: + +```solidity +error LSP7CannotUseAddressZeroAsOperator(); +``` + +reverts when trying to set the zero address as an operator. + +
+ +### LSP7DecreaseAllowanceNotAuthorized + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7decreaseallowancenotauthorized) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7DecreaseAllowanceNotAuthorized(address,address,address)` +- Error hash: `0x98ce2945` + +::: + +```solidity +error LSP7DecreaseAllowanceNotAuthorized( + address caller, + address tokenOwner, + address operator +); +``` + +Reverts when the call to decrease allowance is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `operator` | `address` | - | + +
+ +### LSP7DecreasedAllowanceBelowZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7decreasedallowancebelowzero) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7DecreasedAllowanceBelowZero()` +- Error hash: `0x0ef76c35` + +::: + +```solidity +error LSP7DecreasedAllowanceBelowZero(); +``` + +Reverts when trying to decrease an operator's allowance to more than its current allowance. + +
+ +### LSP7InvalidTransferBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7invalidtransferbatch) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7InvalidTransferBatch()` +- Error hash: `0x263eee8d` + +::: + +```solidity +error LSP7InvalidTransferBatch(); +``` + +reverts when the array parameters used in [`transferBatch`](#transferbatch) have different lengths. + +
+ +### LSP7NotifyTokenReceiverContractMissingLSP1Interface + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7notifytokenreceivercontractmissinglsp1interface) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7NotifyTokenReceiverContractMissingLSP1Interface(address)` +- Error hash: `0xa608fbb6` + +::: + +```solidity +error LSP7NotifyTokenReceiverContractMissingLSP1Interface( + address tokenReceiver +); +``` + +reverts if the `tokenReceiver` does not implement LSP1 when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP7NotifyTokenReceiverIsEOA + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7notifytokenreceiveriseoa) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7NotifyTokenReceiverIsEOA(address)` +- Error hash: `0x26c247f4` + +::: + +```solidity +error LSP7NotifyTokenReceiverIsEOA(address tokenReceiver); +``` + +reverts if the `tokenReceiver` is an EOA when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP7RevokeOperatorNotAuthorized + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7revokeoperatornotauthorized) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7RevokeOperatorNotAuthorized(address,address,address)` +- Error hash: `0x1a525b32` + +::: + +```solidity +error LSP7RevokeOperatorNotAuthorized( + address caller, + address tokenOwner, + address operator +); +``` + +Reverts when the call to revoke operator is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `operator` | `address` | - | + +
+ +### LSP7TokenContractCannotHoldValue + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7tokencontractcannotholdvalue) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7TokenContractCannotHoldValue()` +- Error hash: `0x388f5adc` + +::: + +```solidity +error LSP7TokenContractCannotHoldValue(); +``` + +_LSP7 contract cannot receive native tokens._ + +Error occurs when sending native tokens to the LSP7 contract without sending any data. E.g. Sending value without passing a bytes4 function selector to call a LSP17 Extension. + +
+ +### LSP7TokenOwnerCannotBeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7tokenownercannotbeoperator) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7TokenOwnerCannotBeOperator()` +- Error hash: `0xdab75047` + +::: + +```solidity +error LSP7TokenOwnerCannotBeOperator(); +``` + +reverts when trying to authorize or revoke the token's owner as an operator. + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
+ +### OperatorAllowanceCannotBeIncreasedFromZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorallowancecannotbeincreasedfromzero) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OperatorAllowanceCannotBeIncreasedFromZero(address)` +- Error hash: `0xcba6e977` + +::: + +```solidity +error OperatorAllowanceCannotBeIncreasedFromZero(address operator); +``` + +Reverts when token owner call [`increaseAllowance`](#increaseallowance) for an operator that does not have any allowance + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownablecallernottheowner) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
+ +### OwnableCannotSetZeroAddressAsOwner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownablecannotsetzeroaddressasowner) +- Solidity implementation: [`LSP7Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OwnableCannotSetZeroAddressAsOwner()` +- Error hash: `0x1ad8836c` + +::: + +```solidity +error OwnableCannotSetZeroAddressAsOwner(); +``` + +Reverts when trying to set `address(0)` as the contract owner when deploying the contract, initializing it or transferring ownership of the contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7CappedSupply.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7CappedSupply.md new file mode 100644 index 000000000..5c0d29917 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7CappedSupply.md @@ -0,0 +1,1957 @@ + + + +# LSP7CappedSupply + +:::info Standard Specifications + +[`LSP-7-DigitalAsset`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md) + +::: +:::info Solidity implementation + +[`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +LSP7 token extension to add a max token supply cap. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### fallback + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#fallback) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. + +
+ +### receive + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#receive) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +```solidity +receive() external payable; +``` + +_LSP7 contract cannot receive native tokens._ + +Reverts whenever someone tries to send native tokens to a LSP7 contract. + +
+ +### authorizeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#authorizeoperator) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `authorizeOperator(address,uint256,bytes)` +- Function selector: `0xb49506fd` + +::: + +:::danger + +To avoid front-running and Allowance Double-Spend Exploit when increasing or decreasing the authorized amount of an operator, it is advised to use the [`increaseAllowance`](#increaseallowance) and [`decreaseAllowance`](#decreaseallowance) functions. For more information, see: https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/ + +::: + +```solidity +function authorizeOperator( + address operator, + uint256 amount, + bytes operatorNotificationData +) external nonpayable; +``` + +Sets an `amount` of tokens that an `operator` has access from the caller's balance (allowance). See [`authorizedAmountFor`](#authorizedamountfor). Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------ | +| `operator` | `address` | The address to authorize as an operator. | +| `amount` | `uint256` | The allowance amount of tokens operator has access to. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### authorizedAmountFor + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#authorizedamountfor) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `authorizedAmountFor(address,address)` +- Function selector: `0x65aeaa95` + +::: + +```solidity +function authorizedAmountFor( + address operator, + address tokenOwner +) external view returns (uint256); +``` + +Get the amount of tokens `operator` address has access to from `tokenOwner`. Operators can send and burn tokens on behalf of their owners. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ---------------------------------------------------------- | +| `operator` | `address` | The operator's address to query the authorized amount for. | +| `tokenOwner` | `address` | The token owner that `operator` has allowance on. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------------------------------------------------------------- | +| `0` | `uint256` | The amount of tokens the `operator`'s address has access on the `tokenOwner`'s balance. | + +
+ +### balanceOf + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#balanceof) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `balanceOf(address)` +- Function selector: `0x70a08231` + +::: + +```solidity +function balanceOf(address tokenOwner) external view returns (uint256); +``` + +Get the number of tokens owned by `tokenOwner`. If the token is divisible (the [`decimals`](#decimals) function returns `18`), the amount returned should be divided by 1e18 to get a better picture of the actual balance of the `tokenOwner`. _Example:_ `balanceOf(someAddress) -> 42_000_000_000_000_000_000 / 1e18 = 42 tokens` + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | --------------------------------------------------------- | +| `tokenOwner` | `address` | The address of the token holder to query the balance for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------- | +| `0` | `uint256` | The amount of tokens owned by `tokenOwner`. | + +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#batchcalls) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### decimals + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#decimals) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `decimals()` +- Function selector: `0x313ce567` + +::: + +```solidity +function decimals() external view returns (uint8); +``` + +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ----------------------------------------------------------------------- | +| `0` | `uint8` | the number of decimals. If `0` is returned, the asset is non-divisible. | + +
+ +### decreaseAllowance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#decreaseallowance) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `decreaseAllowance(address,address,uint256,bytes)` +- Function selector: `0x78381670` + +::: + +```solidity +function decreaseAllowance( + address operator, + address tokenOwner, + uint256 subtractedAmount, + bytes operatorNotificationData +) external nonpayable; +``` + +_Decrease the allowance of `operator` by -`subtractedAmount`_ + +Atomically decreases the allowance granted to `operator` by the caller. This is an alternative approach to [`authorizeOperator`](#authorizeoperator) that can be used as a mitigation for the double spending allowance problem. Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------ | +| `operator` | `address` | The operator to decrease allowance for `msg.sender` | +| `tokenOwner` | `address` | The address of the token owner. | +| `subtractedAmount` | `uint256` | The amount to decrease by in the operator's allowance. | +| `operatorNotificationData` | `bytes` | - | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getdata) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getdatabatch) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### getOperatorsOf + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getoperatorsof) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getOperatorsOf(address)` +- Function selector: `0xd72fc29a` + +::: + +```solidity +function getOperatorsOf(address tokenOwner) external view returns (address[]); +``` + +Returns all `operator` addresses that are allowed to transfer or burn on behalf of `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `tokenOwner` | `address` | The token owner to get the operators for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ----------------------------------------------------------------------------------- | +| `0` | `address[]` | An array of operators allowed to transfer or burn tokens on behalf of `tokenOwner`. | + +
+ +### increaseAllowance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#increaseallowance) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `increaseAllowance(address,uint256,bytes)` +- Function selector: `0x2bc1da82` + +::: + +```solidity +function increaseAllowance( + address operator, + uint256 addedAmount, + bytes operatorNotificationData +) external nonpayable; +``` + +_Increase the allowance of `operator` by +`addedAmount`_ + +Atomically increases the allowance granted to `operator` by the caller. This is an alternative approach to [`authorizeOperator`](#authorizeoperator) that can be used as a mitigation for the double spending allowance problem. Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------- | +| `operator` | `address` | The operator to increase the allowance for `msg.sender` | +| `addedAmount` | `uint256` | The additional amount to add on top of the current operator's allowance | +| `operatorNotificationData` | `bytes` | - | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#owner) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#renounceownership) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner. + +
+ +### revokeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#revokeoperator) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `revokeOperator(address,address,bool,bytes)` +- Function selector: `0x30d0dc37` + +::: + +```solidity +function revokeOperator( + address operator, + address tokenOwner, + bool notify, + bytes operatorNotificationData +) external nonpayable; +``` + +Enables `tokenOwner` to remove `operator` for its tokens, disallowing it to send any amount of tokens on its behalf. This function also allows the `operator` to remove itself if it is the caller of this function + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | --------------------------------------------------------- | +| `operator` | `address` | The address to revoke as an operator. | +| `tokenOwner` | `address` | The address of the token owner. | +| `notify` | `bool` | Boolean indicating whether to notify the operator or not. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### setData + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#setdata) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner). + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#setdatabatch) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner) of the contract. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event **for each data key/value pair set**. + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#supportsinterface) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### tokenSupplyCap + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#tokensupplycap) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `tokenSupplyCap()` +- Function selector: `0x52058d8a` + +::: + +```solidity +function tokenSupplyCap() external view returns (uint256); +``` + +_The maximum supply amount of tokens allowed to exist is `_TOKEN_SUPPLY_CAP`._ + +Get the maximum number of tokens that can exist to circulate. Once [`totalSupply`](#totalsupply) reaches reaches [`totalSuuplyCap`](#totalsuuplycap), it is not possible to mint more tokens. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------------ | +| `0` | `uint256` | The maximum number of tokens that can exist in the contract. | + +
+ +### totalSupply + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#totalsupply) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `totalSupply()` +- Function selector: `0x18160ddd` + +::: + +```solidity +function totalSupply() external view returns (uint256); +``` + +Returns the number of existing tokens that have been minted in this contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------ | +| `0` | `uint256` | The number of existing tokens. | + +
+ +### transfer + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transfer) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transfer(address,address,uint256,bool,bytes)` +- Function selector: `0x760d9bba` + +::: + +```solidity +function transfer( + address from, + address to, + uint256 amount, + bool force, + bytes data +) external nonpayable; +``` + +Transfers an `amount` of tokens from the `from` address to the `to` address and notify both sender and recipients via the LSP1 [`universalReceiver(...)`](#`universalreceiver) function. If the tokens are transferred by an operator on behalf of a token holder, the allowance for the operator will be decreased by `amount` once the token transfer has been completed (See [`authorizedAmountFor`](#authorizedamountfor)). + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The sender address. | +| `to` | `address` | The recipient address. | +| `amount` | `uint256` | The amount of tokens to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | + +
+ +### transferBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transferbatch) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transferBatch(address[],address[],uint256[],bool[],bytes[])` +- Function selector: `0x2d7667c9` + +::: + +```solidity +function transferBatch( + address[] from, + address[] to, + uint256[] amount, + bool[] force, + bytes[] data +) external nonpayable; +``` + +Same as [`transfer(...)`](#`transfer) but transfer multiple tokens based on the arrays of `from`, `to`, `amount`. + +#### Parameters + +| Name | Type | Description | +| -------- | :---------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address[]` | An array of sending addresses. | +| `to` | `address[]` | An array of receiving addresses. | +| `amount` | `uint256[]` | An array of amount of tokens to transfer for each `from -> to` transfer. | +| `force` | `bool[]` | For each transfer, when set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes[]` | An array of additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transferownership) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `newOwner` | `address` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +The ERC725Y data keys `LSP4TokenName` and `LSP4TokenSymbol` cannot be changed +via this function once the digital asset contract has been deployed. + +
+ +### \_updateOperator + +```solidity +function _updateOperator( + address tokenOwner, + address operator, + uint256 allowance, + bool notified, + bytes operatorNotificationData +) internal nonpayable; +``` + +Changes token `amount` the `operator` has access to from `tokenOwner` tokens. +If the amount is zero the operator is removed from the list of operators, otherwise he is added to the list of operators. +If the amount is zero then the operator is being revoked, otherwise the operator amount is being modified. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------------------------------------------------------- | +| `tokenOwner` | `address` | The address that will give `operator` an allowance for on its balance. | +| `operator` | `address` | @param operatorNotificationData The data to send to the universalReceiver function of the operator in case of notifying | +| `allowance` | `uint256` | The maximum amount of token that `operator` can spend from the `tokenOwner`'s balance. | +| `notified` | `bool` | Boolean indicating whether the operator has been notified about the change of allowance | +| `operatorNotificationData` | `bytes` | The data to send to the universalReceiver function of the operator in case of notifying | + +
+ +### \_mint + +```solidity +function _mint( + address to, + uint256 amount, + bool force, + bytes data +) internal nonpayable; +``` + +Same as [`_mint`](#_mint) but allows to mint only if the [`totalSupply`](#totalsupply) does not exceed the [`tokenSupplyCap`](#tokensupplycap) +after `amount` of tokens have been minted. + +
+ +### \_burn + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the sender via LSP1**. + +::: + +:::tip Hint + +In dApps, you can know which address is burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + +::: + +```solidity +function _burn(address from, uint256 amount, bytes data) internal nonpayable; +``` + +Burns (= destroys) `amount` of tokens, decrease the `from` balance. This is done by sending them to the zero address. +Both the sender and recipient will be notified of the token transfer through the LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as the `to` address + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address to burn tokens from its balance. | +| `amount` | `uint256` | The amount of tokens to burn. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. | + +
+ +### \_spendAllowance + +```solidity +function _spendAllowance( + address operator, + address tokenOwner, + uint256 amountToSpend +) internal nonpayable; +``` + +Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ------------------------------------------------------------------- | +| `operator` | `address` | The address of the operator to decrease the allowance of. | +| `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | + +
+ +### \_transfer + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the sender/recipient via LSP1**. + +::: + +```solidity +function _transfer( + address from, + address to, + uint256 amount, + bool force, + bytes data +) internal nonpayable; +``` + +Transfer tokens from `from` to `to` by decreasing the balance of `from` by `-amount` and increasing the balance +of `to` by `+amount`. +Both the sender and recipient will be notified of the token transfer through the LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event. + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address to decrease the balance. | +| `to` | `address` | The address to increase the balance. | +| `amount` | `uint256` | The amount of tokens to transfer from `from` to `to`. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. | + +
+ +### \_beforeTokenTransfer + +```solidity +function _beforeTokenTransfer( + address from, + address to, + uint256 amount, + bytes data +) internal nonpayable; +``` + +Hook that is called before any token transfer, including minting and burning. +Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------ | +| `from` | `address` | The sender address | +| `to` | `address` | The recipient address | +| `amount` | `uint256` | The amount of token to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_afterTokenTransfer + +```solidity +function _afterTokenTransfer( + address from, + address to, + uint256 amount, + bytes data +) internal nonpayable; +``` + +Hook that is called after any token transfer, including minting and burning. +Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------ | +| `from` | `address` | The sender address | +| `to` | `address` | The recipient address | +| `amount` | `uint256` | The amount of token to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_notifyTokenOperator + +```solidity +function _notifyTokenOperator( + address operator, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the operator `operator` about the `amount` tokens being authorized with. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. +If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `operator` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `operator` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenSender + +```solidity +function _notifyTokenSender(address from, bytes lsp1Data) internal nonpayable; +``` + +Attempt to notify the token sender `from` about the `amount` of tokens being transferred. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. +If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `from` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `from` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenReceiver + +```solidity +function _notifyTokenReceiver( + address to, + bool force, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the token receiver `to` about the `amount` tokens being received. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. +If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + +- if `force` is set to `true`, nothing will happen and no notification will be sent. + +- if `force` is set to `false, the transaction will revert. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | --------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `lsp1Data` | `bytes` | The data to be sent to the `to` address in the `universalReceiver(...)` call. | + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +- we do not check that payable bool as in lsp7 standard we will always forward the value to the extension + +
+ +### \_fallbackLSP17Extendable + +:::info + +The LSP7 Token contract should not hold any native tokens. Any native tokens received by the contract +will be forwarded to the extension address mapped to the selector from `msg.sig`. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call with the received value to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the address(0) will be returned. +Forwards the value if the extension is payable. +Reverts if there is no extension for the function being called. +If there is an extension for the function selector being called, it calls the extension with the +CALL opcode, passing the [`msg.data`](#msg.data) appended with the 20 bytes of the [`msg.sender`](#msg.sender) and +32 bytes of the [`msg.value`](#msg.value) + +
+ +## Events + +### DataChanged + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#datachanged) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### OperatorAuthorizationChanged + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorauthorizationchanged) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OperatorAuthorizationChanged(address,address,uint256,bytes)` +- Event topic hash: `0xf772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d` + +::: + +```solidity +event OperatorAuthorizationChanged( + address indexed operator, + address indexed tokenOwner, + uint256 indexed amount, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` enables `operator` for `amount` tokens. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address authorized as an operator | +| `tokenOwner` **`indexed`** | `address` | The token owner | +| `amount` **`indexed`** | `uint256` | The amount of tokens `operator` address has access to from `tokenOwner` | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OperatorRevoked + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorrevoked) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OperatorRevoked(address,address,bool,bytes)` +- Event topic hash: `0x0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd4167` + +::: + +```solidity +event OperatorRevoked( + address indexed operator, + address indexed tokenOwner, + bool indexed notified, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` disables `operator` for `amount` tokens and set its [`authorizedAmountFor(...)`](#`authorizedamountfor) to `0`. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address revoked from operating | +| `tokenOwner` **`indexed`** | `address` | The token owner | +| `notified` **`indexed`** | `bool` | Bool indicating whether the operator has been notified or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownershiptransferred) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### Transfer + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transfer) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `Transfer(address,address,address,uint256,bool,bytes)` +- Event topic hash: `0x3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6` + +::: + +```solidity +event Transfer( + address indexed operator, + address indexed from, + address indexed to, + uint256 amount, + bool force, + bytes data +); +``` + +Emitted when the `from` transferred successfully `amount` of tokens to `to`. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ---------------------------------------------------------------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address of the operator that executed the transfer. | +| `from` **`indexed`** | `address` | The address which tokens were sent from (balance decreased by `-amount`). | +| `to` **`indexed`** | `address` | The address that received the tokens (balance increased by `+amount`). | +| `amount` | `uint256` | The amount of tokens transferred. | +| `force` | `bool` | if the transferred enforced the `to` recipient address to be a contract that implements the LSP1 standard or not. | +| `data` | `bytes` | Any additional data included by the caller during the transfer, and sent in the LSP1 hooks to the `from` and `to` addresses. | + +
+ +## Errors + +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### InvalidExtensionAddress + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#invalidextensionaddress) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `InvalidExtensionAddress(bytes)` +- Error hash: `0x42bfe79f` + +::: + +```solidity +error InvalidExtensionAddress(bytes storedData); +``` + +reverts when the bytes retrieved from the LSP17 data key is not a valid address (not 20 bytes) + +#### Parameters + +| Name | Type | Description | +| ------------ | :-----: | ----------- | +| `storedData` | `bytes` | - | + +
+ +### InvalidFunctionSelector + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#invalidfunctionselector) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `InvalidFunctionSelector(bytes)` +- Error hash: `0xe5099ee3` + +::: + +```solidity +error InvalidFunctionSelector(bytes data); +``` + +reverts when the contract is called with a function selector not valid (less than 4 bytes of data) + +#### Parameters + +| Name | Type | Description | +| ------ | :-----: | ----------- | +| `data` | `bytes` | - | + +
+ +### LSP4TokenNameNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokennamenoteditable) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenNameNotEditable()` +- Error hash: `0x85c169bd` + +::: + +```solidity +error LSP4TokenNameNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenName` after the digital asset contract has been deployed / initialized. The `LSP4TokenName` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenSymbolNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokensymbolnoteditable) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenSymbolNotEditable()` +- Error hash: `0x76755b38` + +::: + +```solidity +error LSP4TokenSymbolNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenSymbol` after the digital asset contract has been deployed / initialized. The `LSP4TokenSymbol` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenTypeNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokentypenoteditable) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenTypeNotEditable()` +- Error hash: `0x4ef6d7fb` + +::: + +```solidity +error LSP4TokenTypeNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenType` after the digital asset contract has been deployed / initialized. The `LSP4TokenType` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor / initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP7AmountExceedsAuthorizedAmount + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7amountexceedsauthorizedamount) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7AmountExceedsAuthorizedAmount(address,uint256,address,uint256)` +- Error hash: `0xf3a6b691` + +::: + +```solidity +error LSP7AmountExceedsAuthorizedAmount( + address tokenOwner, + uint256 authorizedAmount, + address operator, + uint256 amount +); +``` + +reverts when `operator` of `tokenOwner` send an `amount` of tokens larger than the `authorizedAmount`. + +#### Parameters + +| Name | Type | Description | +| ------------------ | :-------: | ----------- | +| `tokenOwner` | `address` | - | +| `authorizedAmount` | `uint256` | - | +| `operator` | `address` | - | +| `amount` | `uint256` | - | + +
+ +### LSP7AmountExceedsBalance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7amountexceedsbalance) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7AmountExceedsBalance(uint256,address,uint256)` +- Error hash: `0x08d47949` + +::: + +```solidity +error LSP7AmountExceedsBalance( + uint256 balance, + address tokenOwner, + uint256 amount +); +``` + +reverts when sending an `amount` of tokens larger than the current `balance` of the `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `balance` | `uint256` | - | +| `tokenOwner` | `address` | - | +| `amount` | `uint256` | - | + +
+ +### LSP7BatchCallFailed + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7batchcallfailed) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7BatchCallFailed(uint256)` +- Error hash: `0xb774c284` + +::: + +```solidity +error LSP7BatchCallFailed(uint256 callIndex); +``` + +_Batch call failed._ + +Reverts when a batch call failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ----------- | +| `callIndex` | `uint256` | - | + +
+ +### LSP7CannotSendWithAddressZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7cannotsendwithaddresszero) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7CannotSendWithAddressZero()` +- Error hash: `0xd2d5ec30` + +::: + +```solidity +error LSP7CannotSendWithAddressZero(); +``` + +reverts when trying to: + +- mint tokens to the zero address. + +- burn tokens from the zero address. + +- transfer tokens from or to the zero address. + +
+ +### LSP7CannotUseAddressZeroAsOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7cannotuseaddresszeroasoperator) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7CannotUseAddressZeroAsOperator()` +- Error hash: `0x6355e766` + +::: + +```solidity +error LSP7CannotUseAddressZeroAsOperator(); +``` + +reverts when trying to set the zero address as an operator. + +
+ +### LSP7CappedSupplyCannotMintOverCap + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7cappedsupplycannotmintovercap) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7CappedSupplyCannotMintOverCap()` +- Error hash: `0xeacbf0d1` + +::: + +```solidity +error LSP7CappedSupplyCannotMintOverCap(); +``` + +_Cannot mint anymore as total supply reached the maximum cap._ + +Reverts when trying to mint tokens but the [`totalSupply`](#totalsupply) has reached the maximum [`tokenSupplyCap`](#tokensupplycap). + +
+ +### LSP7CappedSupplyRequired + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7cappedsupplyrequired) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7CappedSupplyRequired()` +- Error hash: `0xacf1d8c5` + +::: + +```solidity +error LSP7CappedSupplyRequired(); +``` + +_The `tokenSupplyCap` must be set and cannot be `0`._ + +Reverts when setting `0` for the [`tokenSupplyCap`](#tokensupplycap). The max token supply MUST be set to a number greater than 0. + +
+ +### LSP7DecreaseAllowanceNotAuthorized + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7decreaseallowancenotauthorized) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7DecreaseAllowanceNotAuthorized(address,address,address)` +- Error hash: `0x98ce2945` + +::: + +```solidity +error LSP7DecreaseAllowanceNotAuthorized( + address caller, + address tokenOwner, + address operator +); +``` + +Reverts when the call to decrease allowance is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `operator` | `address` | - | + +
+ +### LSP7DecreasedAllowanceBelowZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7decreasedallowancebelowzero) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7DecreasedAllowanceBelowZero()` +- Error hash: `0x0ef76c35` + +::: + +```solidity +error LSP7DecreasedAllowanceBelowZero(); +``` + +Reverts when trying to decrease an operator's allowance to more than its current allowance. + +
+ +### LSP7InvalidTransferBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7invalidtransferbatch) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7InvalidTransferBatch()` +- Error hash: `0x263eee8d` + +::: + +```solidity +error LSP7InvalidTransferBatch(); +``` + +reverts when the array parameters used in [`transferBatch`](#transferbatch) have different lengths. + +
+ +### LSP7NotifyTokenReceiverContractMissingLSP1Interface + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7notifytokenreceivercontractmissinglsp1interface) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7NotifyTokenReceiverContractMissingLSP1Interface(address)` +- Error hash: `0xa608fbb6` + +::: + +```solidity +error LSP7NotifyTokenReceiverContractMissingLSP1Interface( + address tokenReceiver +); +``` + +reverts if the `tokenReceiver` does not implement LSP1 when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP7NotifyTokenReceiverIsEOA + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7notifytokenreceiveriseoa) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7NotifyTokenReceiverIsEOA(address)` +- Error hash: `0x26c247f4` + +::: + +```solidity +error LSP7NotifyTokenReceiverIsEOA(address tokenReceiver); +``` + +reverts if the `tokenReceiver` is an EOA when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP7RevokeOperatorNotAuthorized + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7revokeoperatornotauthorized) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7RevokeOperatorNotAuthorized(address,address,address)` +- Error hash: `0x1a525b32` + +::: + +```solidity +error LSP7RevokeOperatorNotAuthorized( + address caller, + address tokenOwner, + address operator +); +``` + +Reverts when the call to revoke operator is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `operator` | `address` | - | + +
+ +### LSP7TokenContractCannotHoldValue + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7tokencontractcannotholdvalue) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7TokenContractCannotHoldValue()` +- Error hash: `0x388f5adc` + +::: + +```solidity +error LSP7TokenContractCannotHoldValue(); +``` + +_LSP7 contract cannot receive native tokens._ + +Error occurs when sending native tokens to the LSP7 contract without sending any data. E.g. Sending value without passing a bytes4 function selector to call a LSP17 Extension. + +
+ +### LSP7TokenOwnerCannotBeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7tokenownercannotbeoperator) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7TokenOwnerCannotBeOperator()` +- Error hash: `0xdab75047` + +::: + +```solidity +error LSP7TokenOwnerCannotBeOperator(); +``` + +reverts when trying to authorize or revoke the token's owner as an operator. + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
+ +### OperatorAllowanceCannotBeIncreasedFromZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorallowancecannotbeincreasedfromzero) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OperatorAllowanceCannotBeIncreasedFromZero(address)` +- Error hash: `0xcba6e977` + +::: + +```solidity +error OperatorAllowanceCannotBeIncreasedFromZero(address operator); +``` + +Reverts when token owner call [`increaseAllowance`](#increaseallowance) for an operator that does not have any allowance + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownablecallernottheowner) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
+ +### OwnableCannotSetZeroAddressAsOwner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownablecannotsetzeroaddressasowner) +- Solidity implementation: [`LSP7CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OwnableCannotSetZeroAddressAsOwner()` +- Error hash: `0x1ad8836c` + +::: + +```solidity +error OwnableCannotSetZeroAddressAsOwner(); +``` + +Reverts when trying to set `address(0)` as the contract owner when deploying the contract, initializing it or transferring ownership of the contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md new file mode 100644 index 000000000..99fde2ae2 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md @@ -0,0 +1,1980 @@ + + + +# LSP7Mintable + +:::info Standard Specifications + +[`LSP-7-DigitalAsset`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md) + +::: +:::info Solidity implementation + +[`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +> LSP7DigitalAsset deployable preset contract with a public [`mint`](#mint) function callable only by the contract [`owner`](#owner). + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### constructor + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#constructor) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +```solidity +constructor( + string name_, + string symbol_, + address newOwner_, + uint256 lsp4TokenType_, + bool isNonDivisible_ +); +``` + +_Deploying a `LSP7Mintable` token contract with: token name = `name_`, token symbol = `symbol_`, and address `newOwner_` as the token contract owner._ + +#### Parameters + +| Name | Type | Description | +| ----------------- | :-------: | ---------------------------------------------------------------------------------------------------- | +| `name_` | `string` | The name of the token. | +| `symbol_` | `string` | The symbol of the token. | +| `newOwner_` | `address` | The owner of the token contract. | +| `lsp4TokenType_` | `uint256` | The type of token this digital asset contract represents (`0` = Token, `1` = NFT, `2` = Collection). | +| `isNonDivisible_` | `bool` | Specify if the LSP7 token is a fungible or non-fungible token. | + +
+ +### fallback + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#fallback) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. + +
+ +### receive + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#receive) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) + +::: + +```solidity +receive() external payable; +``` + +_LSP7 contract cannot receive native tokens._ + +Reverts whenever someone tries to send native tokens to a LSP7 contract. + +
+ +### authorizeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#authorizeoperator) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `authorizeOperator(address,uint256,bytes)` +- Function selector: `0xb49506fd` + +::: + +:::danger + +To avoid front-running and Allowance Double-Spend Exploit when increasing or decreasing the authorized amount of an operator, it is advised to use the [`increaseAllowance`](#increaseallowance) and [`decreaseAllowance`](#decreaseallowance) functions. For more information, see: https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/ + +::: + +```solidity +function authorizeOperator( + address operator, + uint256 amount, + bytes operatorNotificationData +) external nonpayable; +``` + +Sets an `amount` of tokens that an `operator` has access from the caller's balance (allowance). See [`authorizedAmountFor`](#authorizedamountfor). Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------ | +| `operator` | `address` | The address to authorize as an operator. | +| `amount` | `uint256` | The allowance amount of tokens operator has access to. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### authorizedAmountFor + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#authorizedamountfor) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `authorizedAmountFor(address,address)` +- Function selector: `0x65aeaa95` + +::: + +```solidity +function authorizedAmountFor( + address operator, + address tokenOwner +) external view returns (uint256); +``` + +Get the amount of tokens `operator` address has access to from `tokenOwner`. Operators can send and burn tokens on behalf of their owners. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ---------------------------------------------------------- | +| `operator` | `address` | The operator's address to query the authorized amount for. | +| `tokenOwner` | `address` | The token owner that `operator` has allowance on. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------------------------------------------------------------- | +| `0` | `uint256` | The amount of tokens the `operator`'s address has access on the `tokenOwner`'s balance. | + +
+ +### balanceOf + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#balanceof) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `balanceOf(address)` +- Function selector: `0x70a08231` + +::: + +```solidity +function balanceOf(address tokenOwner) external view returns (uint256); +``` + +Get the number of tokens owned by `tokenOwner`. If the token is divisible (the [`decimals`](#decimals) function returns `18`), the amount returned should be divided by 1e18 to get a better picture of the actual balance of the `tokenOwner`. _Example:_ `balanceOf(someAddress) -> 42_000_000_000_000_000_000 / 1e18 = 42 tokens` + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | --------------------------------------------------------- | +| `tokenOwner` | `address` | The address of the token holder to query the balance for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------- | +| `0` | `uint256` | The amount of tokens owned by `tokenOwner`. | + +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#batchcalls) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### decimals + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#decimals) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `decimals()` +- Function selector: `0x313ce567` + +::: + +```solidity +function decimals() external view returns (uint8); +``` + +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ----------------------------------------------------------------------- | +| `0` | `uint8` | the number of decimals. If `0` is returned, the asset is non-divisible. | + +
+ +### decreaseAllowance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#decreaseallowance) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `decreaseAllowance(address,address,uint256,bytes)` +- Function selector: `0x78381670` + +::: + +```solidity +function decreaseAllowance( + address operator, + address tokenOwner, + uint256 subtractedAmount, + bytes operatorNotificationData +) external nonpayable; +``` + +_Decrease the allowance of `operator` by -`subtractedAmount`_ + +Atomically decreases the allowance granted to `operator` by the caller. This is an alternative approach to [`authorizeOperator`](#authorizeoperator) that can be used as a mitigation for the double spending allowance problem. Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------ | +| `operator` | `address` | The operator to decrease allowance for `msg.sender` | +| `tokenOwner` | `address` | The address of the token owner. | +| `subtractedAmount` | `uint256` | The amount to decrease by in the operator's allowance. | +| `operatorNotificationData` | `bytes` | - | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getdata) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getdatabatch) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### getOperatorsOf + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#getoperatorsof) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `getOperatorsOf(address)` +- Function selector: `0xd72fc29a` + +::: + +```solidity +function getOperatorsOf(address tokenOwner) external view returns (address[]); +``` + +Returns all `operator` addresses that are allowed to transfer or burn on behalf of `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `tokenOwner` | `address` | The token owner to get the operators for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ----------------------------------------------------------------------------------- | +| `0` | `address[]` | An array of operators allowed to transfer or burn tokens on behalf of `tokenOwner`. | + +
+ +### increaseAllowance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#increaseallowance) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `increaseAllowance(address,uint256,bytes)` +- Function selector: `0x2bc1da82` + +::: + +```solidity +function increaseAllowance( + address operator, + uint256 addedAmount, + bytes operatorNotificationData +) external nonpayable; +``` + +_Increase the allowance of `operator` by +`addedAmount`_ + +Atomically increases the allowance granted to `operator` by the caller. This is an alternative approach to [`authorizeOperator`](#authorizeoperator) that can be used as a mitigation for the double spending allowance problem. Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------- | +| `operator` | `address` | The operator to increase the allowance for `msg.sender` | +| `addedAmount` | `uint256` | The additional amount to add on top of the current operator's allowance | +| `operatorNotificationData` | `bytes` | - | + +
+ +### mint + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#mint) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `mint(address,uint256,bool,bytes)` +- Function selector: `0x7580d920` + +::: + +```solidity +function mint( + address to, + uint256 amount, + bool force, + bytes data +) external nonpayable; +``` + +Public [`_mint`](#_mint) function only callable by the [`owner`](#owner). + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ----------- | +| `to` | `address` | - | +| `amount` | `uint256` | - | +| `force` | `bool` | - | +| `data` | `bytes` | - | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#owner) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#renounceownership) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner. + +
+ +### revokeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#revokeoperator) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `revokeOperator(address,address,bool,bytes)` +- Function selector: `0x30d0dc37` + +::: + +```solidity +function revokeOperator( + address operator, + address tokenOwner, + bool notify, + bytes operatorNotificationData +) external nonpayable; +``` + +Enables `tokenOwner` to remove `operator` for its tokens, disallowing it to send any amount of tokens on its behalf. This function also allows the `operator` to remove itself if it is the caller of this function + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | --------------------------------------------------------- | +| `operator` | `address` | The address to revoke as an operator. | +| `tokenOwner` | `address` | The address of the token owner. | +| `notify` | `bool` | Boolean indicating whether to notify the operator or not. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### setData + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#setdata) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner). + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#setdatabatch) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner) of the contract. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event **for each data key/value pair set**. + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#supportsinterface) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### totalSupply + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#totalsupply) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `totalSupply()` +- Function selector: `0x18160ddd` + +::: + +```solidity +function totalSupply() external view returns (uint256); +``` + +Returns the number of existing tokens that have been minted in this contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------ | +| `0` | `uint256` | The number of existing tokens. | + +
+ +### transfer + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transfer) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transfer(address,address,uint256,bool,bytes)` +- Function selector: `0x760d9bba` + +::: + +```solidity +function transfer( + address from, + address to, + uint256 amount, + bool force, + bytes data +) external nonpayable; +``` + +Transfers an `amount` of tokens from the `from` address to the `to` address and notify both sender and recipients via the LSP1 [`universalReceiver(...)`](#`universalreceiver) function. If the tokens are transferred by an operator on behalf of a token holder, the allowance for the operator will be decreased by `amount` once the token transfer has been completed (See [`authorizedAmountFor`](#authorizedamountfor)). + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The sender address. | +| `to` | `address` | The recipient address. | +| `amount` | `uint256` | The amount of tokens to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | + +
+ +### transferBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transferbatch) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transferBatch(address[],address[],uint256[],bool[],bytes[])` +- Function selector: `0x2d7667c9` + +::: + +```solidity +function transferBatch( + address[] from, + address[] to, + uint256[] amount, + bool[] force, + bytes[] data +) external nonpayable; +``` + +Same as [`transfer(...)`](#`transfer) but transfer multiple tokens based on the arrays of `from`, `to`, `amount`. + +#### Parameters + +| Name | Type | Description | +| -------- | :---------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address[]` | An array of sending addresses. | +| `to` | `address[]` | An array of receiving addresses. | +| `amount` | `uint256[]` | An array of amount of tokens to transfer for each `from -> to` transfer. | +| `force` | `bool[]` | For each transfer, when set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes[]` | An array of additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transferownership) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `newOwner` | `address` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +The ERC725Y data keys `LSP4TokenName` and `LSP4TokenSymbol` cannot be changed +via this function once the digital asset contract has been deployed. + +
+ +### \_updateOperator + +```solidity +function _updateOperator( + address tokenOwner, + address operator, + uint256 allowance, + bool notified, + bytes operatorNotificationData +) internal nonpayable; +``` + +Changes token `amount` the `operator` has access to from `tokenOwner` tokens. +If the amount is zero the operator is removed from the list of operators, otherwise he is added to the list of operators. +If the amount is zero then the operator is being revoked, otherwise the operator amount is being modified. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------------------------------------------------------- | +| `tokenOwner` | `address` | The address that will give `operator` an allowance for on its balance. | +| `operator` | `address` | @param operatorNotificationData The data to send to the universalReceiver function of the operator in case of notifying | +| `allowance` | `uint256` | The maximum amount of token that `operator` can spend from the `tokenOwner`'s balance. | +| `notified` | `bool` | Boolean indicating whether the operator has been notified about the change of allowance | +| `operatorNotificationData` | `bytes` | The data to send to the universalReceiver function of the operator in case of notifying | + +
+ +### \_mint + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the recipient via LSP1**. + +::: + +```solidity +function _mint( + address to, + uint256 amount, + bool force, + bytes data +) internal nonpayable; +``` + +Mints `amount` of tokens and transfers it to `to`. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as `from`. + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to mint tokens for. | +| `amount` | `uint256` | The amount of tokens to mint. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `data` | `bytes` | Additional data the caller wants included in the emitted [`Transfer`](#transfer) event, and sent in the LSP1 hook to the `to` address. | + +
+ +### \_burn + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the sender via LSP1**. + +::: + +:::tip Hint + +In dApps, you can know which address is burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + +::: + +```solidity +function _burn(address from, uint256 amount, bytes data) internal nonpayable; +``` + +Burns (= destroys) `amount` of tokens, decrease the `from` balance. This is done by sending them to the zero address. +Both the sender and recipient will be notified of the token transfer through the LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as the `to` address + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address to burn tokens from its balance. | +| `amount` | `uint256` | The amount of tokens to burn. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. | + +
+ +### \_spendAllowance + +```solidity +function _spendAllowance( + address operator, + address tokenOwner, + uint256 amountToSpend +) internal nonpayable; +``` + +Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ------------------------------------------------------------------- | +| `operator` | `address` | The address of the operator to decrease the allowance of. | +| `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | + +
+ +### \_transfer + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances, **but before notifying the sender/recipient via LSP1**. + +::: + +```solidity +function _transfer( + address from, + address to, + uint256 amount, + bool force, + bytes data +) internal nonpayable; +``` + +Transfer tokens from `from` to `to` by decreasing the balance of `from` by `-amount` and increasing the balance +of `to` by `+amount`. +Both the sender and recipient will be notified of the token transfer through the LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event. + +
+ +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address to decrease the balance. | +| `to` | `address` | The address to increase the balance. | +| `amount` | `uint256` | The amount of tokens to transfer from `from` to `to`. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. | + +
+ +### \_beforeTokenTransfer + +```solidity +function _beforeTokenTransfer( + address from, + address to, + uint256 amount, + bytes data +) internal nonpayable; +``` + +Hook that is called before any token transfer, including minting and burning. +Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------ | +| `from` | `address` | The sender address | +| `to` | `address` | The recipient address | +| `amount` | `uint256` | The amount of token to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_afterTokenTransfer + +```solidity +function _afterTokenTransfer( + address from, + address to, + uint256 amount, + bytes data +) internal nonpayable; +``` + +Hook that is called after any token transfer, including minting and burning. +Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------ | +| `from` | `address` | The sender address | +| `to` | `address` | The recipient address | +| `amount` | `uint256` | The amount of token to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_notifyTokenOperator + +```solidity +function _notifyTokenOperator( + address operator, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the operator `operator` about the `amount` tokens being authorized with. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. +If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `operator` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `operator` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenSender + +```solidity +function _notifyTokenSender(address from, bytes lsp1Data) internal nonpayable; +``` + +Attempt to notify the token sender `from` about the `amount` of tokens being transferred. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. +If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `from` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `from` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenReceiver + +```solidity +function _notifyTokenReceiver( + address to, + bool force, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the token receiver `to` about the `amount` tokens being received. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP7_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. +If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + +- if `force` is set to `true`, nothing will happen and no notification will be sent. + +- if `force` is set to `false, the transaction will revert. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | --------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `lsp1Data` | `bytes` | The data to be sent to the `to` address in the `universalReceiver(...)` call. | + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +- we do not check that payable bool as in lsp7 standard we will always forward the value to the extension + +
+ +### \_fallbackLSP17Extendable + +:::info + +The LSP7 Token contract should not hold any native tokens. Any native tokens received by the contract +will be forwarded to the extension address mapped to the selector from `msg.sig`. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call with the received value to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the address(0) will be returned. +Forwards the value if the extension is payable. +Reverts if there is no extension for the function being called. +If there is an extension for the function selector being called, it calls the extension with the +CALL opcode, passing the [`msg.data`](#msg.data) appended with the 20 bytes of the [`msg.sender`](#msg.sender) and +32 bytes of the [`msg.value`](#msg.value) + +
+ +## Events + +### DataChanged + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#datachanged) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### OperatorAuthorizationChanged + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorauthorizationchanged) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OperatorAuthorizationChanged(address,address,uint256,bytes)` +- Event topic hash: `0xf772a43bfdf4729b196e3fb54a818b91a2ca6c49d10b2e16278752f9f515c25d` + +::: + +```solidity +event OperatorAuthorizationChanged( + address indexed operator, + address indexed tokenOwner, + uint256 indexed amount, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` enables `operator` for `amount` tokens. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address authorized as an operator | +| `tokenOwner` **`indexed`** | `address` | The token owner | +| `amount` **`indexed`** | `uint256` | The amount of tokens `operator` address has access to from `tokenOwner` | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OperatorRevoked + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorrevoked) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OperatorRevoked(address,address,bool,bytes)` +- Event topic hash: `0x0ebf5762d8855cbe012d2ca42fb33a81175e17c8a8751f8859931ba453bd4167` + +::: + +```solidity +event OperatorRevoked( + address indexed operator, + address indexed tokenOwner, + bool indexed notified, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` disables `operator` for `amount` tokens and set its [`authorizedAmountFor(...)`](#`authorizedamountfor) to `0`. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address revoked from operating | +| `tokenOwner` **`indexed`** | `address` | The token owner | +| `notified` **`indexed`** | `bool` | Bool indicating whether the operator has been notified or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownershiptransferred) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### Transfer + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#transfer) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Event signature: `Transfer(address,address,address,uint256,bool,bytes)` +- Event topic hash: `0x3997e418d2cef0b3b0e907b1e39605c3f7d32dbd061e82ea5b4a770d46a160a6` + +::: + +```solidity +event Transfer( + address indexed operator, + address indexed from, + address indexed to, + uint256 amount, + bool force, + bytes data +); +``` + +Emitted when the `from` transferred successfully `amount` of tokens to `to`. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ---------------------------------------------------------------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address of the operator that executed the transfer. | +| `from` **`indexed`** | `address` | The address which tokens were sent from (balance decreased by `-amount`). | +| `to` **`indexed`** | `address` | The address that received the tokens (balance increased by `+amount`). | +| `amount` | `uint256` | The amount of tokens transferred. | +| `force` | `bool` | if the transferred enforced the `to` recipient address to be a contract that implements the LSP1 standard or not. | +| `data` | `bytes` | Any additional data included by the caller during the transfer, and sent in the LSP1 hooks to the `from` and `to` addresses. | + +
+ +## Errors + +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### InvalidExtensionAddress + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#invalidextensionaddress) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `InvalidExtensionAddress(bytes)` +- Error hash: `0x42bfe79f` + +::: + +```solidity +error InvalidExtensionAddress(bytes storedData); +``` + +reverts when the bytes retrieved from the LSP17 data key is not a valid address (not 20 bytes) + +#### Parameters + +| Name | Type | Description | +| ------------ | :-----: | ----------- | +| `storedData` | `bytes` | - | + +
+ +### InvalidFunctionSelector + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#invalidfunctionselector) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `InvalidFunctionSelector(bytes)` +- Error hash: `0xe5099ee3` + +::: + +```solidity +error InvalidFunctionSelector(bytes data); +``` + +reverts when the contract is called with a function selector not valid (less than 4 bytes of data) + +#### Parameters + +| Name | Type | Description | +| ------ | :-----: | ----------- | +| `data` | `bytes` | - | + +
+ +### LSP4TokenNameNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokennamenoteditable) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenNameNotEditable()` +- Error hash: `0x85c169bd` + +::: + +```solidity +error LSP4TokenNameNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenName` after the digital asset contract has been deployed / initialized. The `LSP4TokenName` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenSymbolNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokensymbolnoteditable) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenSymbolNotEditable()` +- Error hash: `0x76755b38` + +::: + +```solidity +error LSP4TokenSymbolNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenSymbol` after the digital asset contract has been deployed / initialized. The `LSP4TokenSymbol` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenTypeNotEditable + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp4tokentypenoteditable) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP4TokenTypeNotEditable()` +- Error hash: `0x4ef6d7fb` + +::: + +```solidity +error LSP4TokenTypeNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenType` after the digital asset contract has been deployed / initialized. The `LSP4TokenType` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor / initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP7AmountExceedsAuthorizedAmount + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7amountexceedsauthorizedamount) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7AmountExceedsAuthorizedAmount(address,uint256,address,uint256)` +- Error hash: `0xf3a6b691` + +::: + +```solidity +error LSP7AmountExceedsAuthorizedAmount( + address tokenOwner, + uint256 authorizedAmount, + address operator, + uint256 amount +); +``` + +reverts when `operator` of `tokenOwner` send an `amount` of tokens larger than the `authorizedAmount`. + +#### Parameters + +| Name | Type | Description | +| ------------------ | :-------: | ----------- | +| `tokenOwner` | `address` | - | +| `authorizedAmount` | `uint256` | - | +| `operator` | `address` | - | +| `amount` | `uint256` | - | + +
+ +### LSP7AmountExceedsBalance + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7amountexceedsbalance) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7AmountExceedsBalance(uint256,address,uint256)` +- Error hash: `0x08d47949` + +::: + +```solidity +error LSP7AmountExceedsBalance( + uint256 balance, + address tokenOwner, + uint256 amount +); +``` + +reverts when sending an `amount` of tokens larger than the current `balance` of the `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `balance` | `uint256` | - | +| `tokenOwner` | `address` | - | +| `amount` | `uint256` | - | + +
+ +### LSP7BatchCallFailed + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7batchcallfailed) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7BatchCallFailed(uint256)` +- Error hash: `0xb774c284` + +::: + +```solidity +error LSP7BatchCallFailed(uint256 callIndex); +``` + +_Batch call failed._ + +Reverts when a batch call failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ----------- | +| `callIndex` | `uint256` | - | + +
+ +### LSP7CannotSendWithAddressZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7cannotsendwithaddresszero) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7CannotSendWithAddressZero()` +- Error hash: `0xd2d5ec30` + +::: + +```solidity +error LSP7CannotSendWithAddressZero(); +``` + +reverts when trying to: + +- mint tokens to the zero address. + +- burn tokens from the zero address. + +- transfer tokens from or to the zero address. + +
+ +### LSP7CannotUseAddressZeroAsOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7cannotuseaddresszeroasoperator) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7CannotUseAddressZeroAsOperator()` +- Error hash: `0x6355e766` + +::: + +```solidity +error LSP7CannotUseAddressZeroAsOperator(); +``` + +reverts when trying to set the zero address as an operator. + +
+ +### LSP7DecreaseAllowanceNotAuthorized + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7decreaseallowancenotauthorized) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7DecreaseAllowanceNotAuthorized(address,address,address)` +- Error hash: `0x98ce2945` + +::: + +```solidity +error LSP7DecreaseAllowanceNotAuthorized( + address caller, + address tokenOwner, + address operator +); +``` + +Reverts when the call to decrease allowance is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `operator` | `address` | - | + +
+ +### LSP7DecreasedAllowanceBelowZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7decreasedallowancebelowzero) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7DecreasedAllowanceBelowZero()` +- Error hash: `0x0ef76c35` + +::: + +```solidity +error LSP7DecreasedAllowanceBelowZero(); +``` + +Reverts when trying to decrease an operator's allowance to more than its current allowance. + +
+ +### LSP7InvalidTransferBatch + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7invalidtransferbatch) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7InvalidTransferBatch()` +- Error hash: `0x263eee8d` + +::: + +```solidity +error LSP7InvalidTransferBatch(); +``` + +reverts when the array parameters used in [`transferBatch`](#transferbatch) have different lengths. + +
+ +### LSP7NotifyTokenReceiverContractMissingLSP1Interface + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7notifytokenreceivercontractmissinglsp1interface) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7NotifyTokenReceiverContractMissingLSP1Interface(address)` +- Error hash: `0xa608fbb6` + +::: + +```solidity +error LSP7NotifyTokenReceiverContractMissingLSP1Interface( + address tokenReceiver +); +``` + +reverts if the `tokenReceiver` does not implement LSP1 when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP7NotifyTokenReceiverIsEOA + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7notifytokenreceiveriseoa) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7NotifyTokenReceiverIsEOA(address)` +- Error hash: `0x26c247f4` + +::: + +```solidity +error LSP7NotifyTokenReceiverIsEOA(address tokenReceiver); +``` + +reverts if the `tokenReceiver` is an EOA when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP7RevokeOperatorNotAuthorized + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7revokeoperatornotauthorized) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7RevokeOperatorNotAuthorized(address,address,address)` +- Error hash: `0x1a525b32` + +::: + +```solidity +error LSP7RevokeOperatorNotAuthorized( + address caller, + address tokenOwner, + address operator +); +``` + +Reverts when the call to revoke operator is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `operator` | `address` | - | + +
+ +### LSP7TokenContractCannotHoldValue + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7tokencontractcannotholdvalue) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7TokenContractCannotHoldValue()` +- Error hash: `0x388f5adc` + +::: + +```solidity +error LSP7TokenContractCannotHoldValue(); +``` + +_LSP7 contract cannot receive native tokens._ + +Error occurs when sending native tokens to the LSP7 contract without sending any data. E.g. Sending value without passing a bytes4 function selector to call a LSP17 Extension. + +
+ +### LSP7TokenOwnerCannotBeOperator + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#lsp7tokenownercannotbeoperator) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `LSP7TokenOwnerCannotBeOperator()` +- Error hash: `0xdab75047` + +::: + +```solidity +error LSP7TokenOwnerCannotBeOperator(); +``` + +reverts when trying to authorize or revoke the token's owner as an operator. + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
+ +### OperatorAllowanceCannotBeIncreasedFromZero + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#operatorallowancecannotbeincreasedfromzero) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OperatorAllowanceCannotBeIncreasedFromZero(address)` +- Error hash: `0xcba6e977` + +::: + +```solidity +error OperatorAllowanceCannotBeIncreasedFromZero(address operator); +``` + +Reverts when token owner call [`increaseAllowance`](#increaseallowance) for an operator that does not have any allowance + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownablecallernottheowner) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
+ +### OwnableCannotSetZeroAddressAsOwner + +:::note References + +- Specification details: [**LSP-7-DigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-7-DigitalAsset.md#ownablecannotsetzeroaddressasowner) +- Solidity implementation: [`LSP7Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol) +- Error signature: `OwnableCannotSetZeroAddressAsOwner()` +- Error hash: `0x1ad8836c` + +::: + +```solidity +error OwnableCannotSetZeroAddressAsOwner(); +``` + +Reverts when trying to set `address(0)` as the contract owner when deploying the contract, initializing it or transferring ownership of the contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/LSP8IdentifiableDigitalAsset.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/LSP8IdentifiableDigitalAsset.md new file mode 100644 index 000000000..aa24a6377 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/LSP8IdentifiableDigitalAsset.md @@ -0,0 +1,2204 @@ + + + +# LSP8IdentifiableDigitalAsset + +:::info Standard Specifications + +[`LSP-8-IdentifiableDigitalAsset`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md) + +::: +:::info Solidity implementation + +[`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +> Implementation of a LSP8 Identifiable Digital Asset, a contract that represents a non-fungible token. + +Standard implementation contract of the LSP8 standard. Minting and transferring are done by providing a unique `tokenId`. This implementation is agnostic to the way tokens are created. A supply mechanism has to be added in a derived contract using [`_mint`](#_mint) For a generic mechanism, see [`LSP7Mintable`](#lsp7mintable). + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### fallback + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#fallback) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. + +
+ +### receive + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#receive) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +receive() external payable; +``` + +_LSP8 contract cannot receive native tokens._ + +Reverts whenever someone tries to send native tokens to a LSP8 contract. + +
+ +### authorizeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#authorizeoperator) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `authorizeOperator(address,bytes32,bytes)` +- Function selector: `0x86a10ddd` + +::: + +```solidity +function authorizeOperator( + address operator, + bytes32 tokenId, + bytes operatorNotificationData +) external nonpayable; +``` + +Allow an `operator` address to transfer or burn a specific `tokenId` on behalf of its token owner. See [`isOperatorFor`](#isoperatorfor). Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------- | +| `operator` | `address` | The address to authorize as an operator. | +| `tokenId` | `bytes32` | The token ID operator has access to. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### balanceOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#balanceof) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `balanceOf(address)` +- Function selector: `0x70a08231` + +::: + +```solidity +function balanceOf(address tokenOwner) external view returns (uint256); +``` + +Get the number of token IDs owned by `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------------------- | +| `tokenOwner` | `address` | The address to query \* | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------------------- | +| `0` | `uint256` | The total number of token IDs that `tokenOwner` owns. | + +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#batchcalls) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdata) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatabatch) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### getDataBatchForTokenIds + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatabatchfortokenids) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataBatchForTokenIds(bytes32[],bytes32[])` +- Function selector: `0x1d26fce6` + +::: + +```solidity +function getDataBatchForTokenIds( + bytes32[] tokenIds, + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Retrieves data in batch for multiple `tokenId` and `dataKey` pairs._ + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ----------------------------------------------------- | +| `tokenIds` | `bytes32[]` | An array of token IDs. | +| `dataKeys` | `bytes32[]` | An array of data keys corresponding to the token IDs. | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------------------------------- | +| `dataValues` | `bytes[]` | An array of data values for each pair of `tokenId` and `dataKey`. | + +
+ +### getDataForTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatafortokenid) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataForTokenId(bytes32,bytes32)` +- Function selector: `0x16e023b3` + +::: + +```solidity +function getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey +) external view returns (bytes dataValue); +``` + +_Retrieves data for a specific `tokenId` and `dataKey`._ + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to retrieve. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------- | +| `dataValue` | `bytes` | The data value associated with the given `tokenId` and `dataKey`. | + +
+ +### getOperatorsOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getoperatorsof) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getOperatorsOf(bytes32)` +- Function selector: `0x49a6078d` + +::: + +```solidity +function getOperatorsOf(bytes32 tokenId) external view returns (address[]); +``` + +Returns all `operator` addresses that are allowed to transfer or burn a specific `tokenId` on behalf of its owner. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `tokenId` | `bytes32` | The token ID to get the operators for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ------------------------------------------------------------------------------------------------------------ | +| `0` | `address[]` | An array of operators allowed to transfer or burn a specific `tokenId`. Requirements - `tokenId` must exist. | + +
+ +### isOperatorFor + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#isoperatorfor) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `isOperatorFor(address,bytes32)` +- Function selector: `0x2a3654a4` + +::: + +```solidity +function isOperatorFor( + address operator, + bytes32 tokenId +) external view returns (bool); +``` + +Returns whether `operator` address is an operator for a given `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------- | +| `operator` | `address` | The address to query operator status for. | +| `tokenId` | `bytes32` | The token ID to check if `operator` is allowed to operate on. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | --------------------------------------------------------------------- | +| `0` | `bool` | `true` if `operator` is an operator for `tokenId`, `false` otherwise. | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#owner) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#renounceownership) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner. + +
+ +### revokeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#revokeoperator) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `revokeOperator(address,bytes32,bool,bytes)` +- Function selector: `0xdb8c9663` + +::: + +```solidity +function revokeOperator( + address operator, + bytes32 tokenId, + bool notify, + bytes operatorNotificationData +) external nonpayable; +``` + +Remove access of `operator` for a given `tokenId`, disallowing it to transfer `tokenId` on behalf of its owner. See also [`isOperatorFor`](#isoperatorfor). + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------------------------- | +| `operator` | `address` | The address to revoke as an operator. | +| `tokenId` | `bytes32` | The tokenId `operator` is revoked from operating on. | +| `notify` | `bool` | Boolean indicating whether to notify the operator or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### setData + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdata) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner). + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatabatch) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner) of the contract. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event **for each data key/value pair set**. + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### setDataBatchForTokenIds + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatabatchfortokenids) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataBatchForTokenIds(bytes32[],bytes32[],bytes[])` +- Function selector: `0xbe9f0e6f` + +::: + +```solidity +function setDataBatchForTokenIds( + bytes32[] tokenIds, + bytes32[] dataKeys, + bytes[] dataValues +) external nonpayable; +``` + +_Sets data in batch for multiple `tokenId` and `dataKey` pairs._ + +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ----------------------------------------------------- | +| `tokenIds` | `bytes32[]` | An array of token IDs. | +| `dataKeys` | `bytes32[]` | An array of data keys corresponding to the token IDs. | +| `dataValues` | `bytes[]` | An array of values to set for the given data keys. | + +
+ +### setDataForTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatafortokenid) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataForTokenId(bytes32,bytes32,bytes)` +- Function selector: `0xd6c1407c` + +::: + +```solidity +function setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes dataValue +) external nonpayable; +``` + +_Sets data for a specific `tokenId` and `dataKey`._ + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#supportsinterface) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### tokenIdsOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenidsof) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenIdsOf(address)` +- Function selector: `0xa3b261f2` + +::: + +```solidity +function tokenIdsOf(address tokenOwner) external view returns (bytes32[]); +``` + +Returns the list of token IDs that the `tokenOwner` address owns. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ---------------------------------------------------------- | +| `tokenOwner` | `address` | The address that we want to get the list of token IDs for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ------------------------------------------------------- | +| `0` | `bytes32[]` | An array of `bytes32[] tokenIds` owned by `tokenOwner`. | + +
+ +### tokenOwnerOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenownerof) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenOwnerOf(bytes32)` +- Function selector: `0x217b2270` + +::: + +```solidity +function tokenOwnerOf(bytes32 tokenId) external view returns (address); +``` + +Returns the address that owns a given `tokenId`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------ | +| `tokenId` | `bytes32` | The token ID to query the owner for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------- | +| `0` | `address` | The owner address of the given `tokenId`. | + +
+ +### totalSupply + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#totalsupply) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `totalSupply()` +- Function selector: `0x18160ddd` + +::: + +```solidity +function totalSupply() external view returns (uint256); +``` + +Returns the number of existing tokens that have been minted in this contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------ | +| `0` | `uint256` | The number of existing tokens. | + +
+ +### transfer + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transfer) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transfer(address,address,bytes32,bool,bytes)` +- Function selector: `0x511b6952` + +::: + +```solidity +function transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes data +) external nonpayable; +``` + +Transfer a given `tokenId` token from the `from` address to the `to` address. If operators are set for a specific `tokenId`, all the operators are revoked after the tokenId have been transferred. The `force` parameter MUST be set to `true` when transferring tokens to Externally Owned Accounts (EOAs) or contracts that do not implement the LSP1 standard. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address that owns the given `tokenId`. | +| `to` | `address` | The address that will receive the `tokenId`. | +| `tokenId` | `bytes32` | The token ID to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | + +
+ +### transferBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transferbatch) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transferBatch(address[],address[],bytes32[],bool[],bytes[])` +- Function selector: `0x7e87632c` + +::: + +```solidity +function transferBatch( + address[] from, + address[] to, + bytes32[] tokenId, + bool[] force, + bytes[] data +) external nonpayable; +``` + +Transfers multiple tokens at once based on the arrays of `from`, `to` and `tokenId`. If any transfer fails, the whole call will revert. + +#### Parameters + +| Name | Type | Description | +| --------- | :---------: | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address[]` | An array of sending addresses. | +| `to` | `address[]` | An array of recipient addresses. | +| `tokenId` | `bytes32[]` | An array of token IDs to transfer. | +| `force` | `bool[]` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard and not revert. | +| `data` | `bytes[]` | Any additional data the caller wants included in the emitted event, and sent in the hooks to the `from` and `to` addresses. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transferownership) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `newOwner` | `address` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +The ERC725Y data key `_LSP8_TOKENID_FORMAT_KEY` cannot be changed +once the identifiable digital asset contract has been deployed. + +
+ +### \_isOperatorOrOwner + +```solidity +function _isOperatorOrOwner( + address caller, + bytes32 tokenId +) internal view returns (bool); +``` + +verifies if the `caller` is operator or owner for the `tokenId` + +#### Returns + +| Name | Type | Description | +| ---- | :----: | -------------------------------------------- | +| `0` | `bool` | true if `caller` is either operator or owner | + +
+ +### \_revokeOperator + +```solidity +function _revokeOperator( + address operator, + address tokenOwner, + bytes32 tokenId, + bool notified, + bytes operatorNotificationData +) internal nonpayable; +``` + +removes `operator` from the list of operators for the `tokenId` + +
+ +### \_clearOperators + +```solidity +function _clearOperators( + address tokenOwner, + bytes32 tokenId +) internal nonpayable; +``` + +revoke all the current operators for a specific `tokenId` token which belongs to `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ------------------------------------------------- | +| `tokenOwner` | `address` | The address that is the owner of the `tokenId`. | +| `tokenId` | `bytes32` | The token to remove the associated operators for. | + +
+ +### \_exists + +```solidity +function _exists(bytes32 tokenId) internal view returns (bool); +``` + +Returns whether `tokenId` exists. +Tokens start existing when they are minted ([`_mint`](#_mint)), and stop existing when they are burned ([`_burn`](#_burn)). + +
+ +### \_existsOrError + +```solidity +function _existsOrError(bytes32 tokenId) internal view; +``` + +When `tokenId` does not exist then revert with an error. + +
+ +### \_mint + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the recipient via LSP1**. + +::: + +```solidity +function _mint( + address to, + bytes32 tokenId, + bool force, + bytes data +) internal nonpayable; +``` + +Create `tokenId` by minting it and transfers it to `to`. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as `from` address. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------- | +| `to` | `address` | @param tokenId The token ID to create (= mint). | +| `tokenId` | `bytes32` | The token ID to create (= mint). | +| `force` | `bool` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hook of the `to` address. | + +
+ +### \_burn + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender via LSP1**. + +::: + +:::tip Hint + +In dApps, you can know which addresses are burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + +::: + +```solidity +function _burn(bytes32 tokenId, bytes data) internal nonpayable; +``` + +Burn a specific `tokenId`, removing the `tokenId` from the [`tokenIdsOf`](#tokenidsof) the caller and decreasing its [`balanceOf`](#balanceof) by -1. +This will also clear all the operators allowed to transfer the `tokenId`. +The owner of the `tokenId` will be notified about the `tokenId` being transferred through its LSP1 [`universalReceiver`](#universalreceiver) +function, if it is a contract that supports the LSP1 interface. Its [`universalReceiver`](#universalreceiver) function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as the `to` address. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------------------------------------------------------------------------------------- | +| `tokenId` | `bytes32` | The token to burn. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the LSP1 hook on the token owner's address. | + +
+ +### \_transfer + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender/recipient via LSP1**. + +::: + +:::danger + +This internal function does not check if the sender is authorized or not to operate on the `tokenId`. + +::: + +```solidity +function _transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes data +) internal nonpayable; +``` + +Change the owner of the `tokenId` from `from` to `to`. +Both the sender and recipient will be notified of the `tokenId` being transferred through their LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The sender address. | +| `to` | `address` | @param tokenId The token to transfer. | +| `tokenId` | `bytes32` | The token to transfer. | +| `force` | `bool` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. | + +
+ +### \_setDataForTokenId + +```solidity +function _setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes dataValue +) internal nonpayable; +``` + +Sets data for a specific `tokenId` and `dataKey` in the ERC725Y storage +The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + +
+ +**Emitted events:** + +- [`TokenIdDataChanged`](#tokeniddatachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### \_getDataForTokenId + +```solidity +function _getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey +) internal view returns (bytes dataValues); +``` + +Retrieves data for a specific `tokenId` and `dataKey` from the ERC725Y storage +The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to retrieve. | + +#### Returns + +| Name | Type | Description | +| ------------ | :-----: | ----------------------------------------------------------------- | +| `dataValues` | `bytes` | The data value associated with the given `tokenId` and `dataKey`. | + +
+ +### \_beforeTokenTransfer + +```solidity +function _beforeTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes data +) internal nonpayable; +``` + +Hook that is called before any token transfer, including minting and burning. +Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `from` | `address` | The sender address | +| `to` | `address` | @param tokenId The tokenId to transfer | +| `tokenId` | `bytes32` | The tokenId to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_afterTokenTransfer + +```solidity +function _afterTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes data +) internal nonpayable; +``` + +Hook that is called after any token transfer, including minting and burning. +Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `from` | `address` | The sender address | +| `to` | `address` | @param tokenId The tokenId to transfer | +| `tokenId` | `bytes32` | The tokenId to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_notifyTokenOperator + +```solidity +function _notifyTokenOperator( + address operator, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the operator `operator` about the `tokenId` being authorized. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. +If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `operator` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `operator` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenSender + +```solidity +function _notifyTokenSender(address from, bytes lsp1Data) internal nonpayable; +``` + +Attempt to notify the token sender `from` about the `tokenId` being transferred. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. +If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `from` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `from` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenReceiver + +```solidity +function _notifyTokenReceiver( + address to, + bool force, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the token receiver `to` about the `tokenId` being received. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. +If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + +- if `force` is set to `true`, nothing will happen and no notification will be sent. + +- if `force` is set to `false, the transaction will revert. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | --------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `lsp1Data` | `bytes` | The data to be sent to the `to` address in the `universalReceiver(...)` call. | + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +
+ +### \_fallbackLSP17Extendable + +:::info + +The LSP8 Token contract should not hold any native tokens. Any native tokens received by the contract +will be forwarded to the extension address mapped to the selector from `msg.sig`. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call with the received value to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the address(0) will be returned. +We will always forward the value to the extension, as the LSP8 contract is not supposed to hold any native tokens. +Reverts if there is no extension for the function being called. +If there is an extension for the function selector being called, it calls the extension with the +CALL opcode, passing the [`msg.data`](#msg.data) appended with the 20 bytes of the [`msg.sender`](#msg.sender) and +32 bytes of the [`msg.value`](#msg.value) + +
+ +## Events + +### DataChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#datachanged) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### OperatorAuthorizationChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#operatorauthorizationchanged) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OperatorAuthorizationChanged(address,address,bytes32,bytes)` +- Event topic hash: `0x1b1b58aa2ec0cec2228b2d37124556d41f5a1f7b12f089171f896cc236671215` + +::: + +```solidity +event OperatorAuthorizationChanged( + address indexed operator, + address indexed tokenOwner, + bytes32 indexed tokenId, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` enables `operator` to transfer or burn the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address authorized as an operator. | +| `tokenOwner` **`indexed`** | `address` | The owner of the `tokenId`. | +| `tokenId` **`indexed`** | `bytes32` | The tokenId `operator` address has access on behalf of `tokenOwner`. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OperatorRevoked + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#operatorrevoked) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OperatorRevoked(address,address,bytes32,bool,bytes)` +- Event topic hash: `0xc78cd419d6136f9f1c1c6aec1d3fae098cffaf8bc86314a8f2685e32fe574e3c` + +::: + +```solidity +event OperatorRevoked( + address indexed operator, + address indexed tokenOwner, + bytes32 indexed tokenId, + bool notified, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` disables `operator` to transfer or burn `tokenId` on its behalf. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ---------------------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address revoked from the operator array ([`getOperatorsOf`](#getoperatorsof)). | +| `tokenOwner` **`indexed`** | `address` | The owner of the `tokenId`. | +| `tokenId` **`indexed`** | `bytes32` | The tokenId `operator` is revoked from operating on. | +| `notified` | `bool` | Bool indicating whether the operator has been notified or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownershiptransferred) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### TokenIdDataChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokeniddatachanged) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `TokenIdDataChanged(bytes32,bytes32,bytes)` +- Event topic hash: `0xa6e4251f855f750545fe414f120db91c76b88def14d120969e5bb2d3f05debbb` + +::: + +```solidity +event TokenIdDataChanged( + bytes32 indexed tokenId, + bytes32 indexed dataKey, + bytes dataValue +); +``` + +Emitted when setting data for `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `tokenId` **`indexed`** | `bytes32` | The tokenId which data is set for. | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### Transfer + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transfer) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `Transfer(address,address,address,bytes32,bool,bytes)` +- Event topic hash: `0xb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf` + +::: + +```solidity +event Transfer( + address operator, + address indexed from, + address indexed to, + bytes32 indexed tokenId, + bool force, + bytes data +); +``` + +Emitted when `tokenId` token is transferred from the `from` to the `to` address. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------- | +| `operator` | `address` | The address of operator that sent the `tokenId` | +| `from` **`indexed`** | `address` | The previous owner of the `tokenId` | +| `to` **`indexed`** | `address` | The new owner of `tokenId` | +| `tokenId` **`indexed`** | `bytes32` | The tokenId that was transferred | +| `force` | `bool` | If the token transfer enforces the `to` recipient address to be a contract that implements the LSP1 standard or not. | +| `data` | `bytes` | Any additional data the caller included by the caller during the transfer, and sent in the hooks to the `from` and `to` addresses. | + +
+ +## Errors + +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### InvalidExtensionAddress + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#invalidextensionaddress) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `InvalidExtensionAddress(bytes)` +- Error hash: `0x42bfe79f` + +::: + +```solidity +error InvalidExtensionAddress(bytes storedData); +``` + +reverts when the bytes retrieved from the LSP17 data key is not a valid address (not 20 bytes) + +#### Parameters + +| Name | Type | Description | +| ------------ | :-----: | ----------- | +| `storedData` | `bytes` | - | + +
+ +### InvalidFunctionSelector + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#invalidfunctionselector) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `InvalidFunctionSelector(bytes)` +- Error hash: `0xe5099ee3` + +::: + +```solidity +error InvalidFunctionSelector(bytes data); +``` + +reverts when the contract is called with a function selector not valid (less than 4 bytes of data) + +#### Parameters + +| Name | Type | Description | +| ------ | :-----: | ----------- | +| `data` | `bytes` | - | + +
+ +### LSP4TokenNameNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokennamenoteditable) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenNameNotEditable()` +- Error hash: `0x85c169bd` + +::: + +```solidity +error LSP4TokenNameNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenName` after the digital asset contract has been deployed / initialized. The `LSP4TokenName` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenSymbolNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokensymbolnoteditable) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenSymbolNotEditable()` +- Error hash: `0x76755b38` + +::: + +```solidity +error LSP4TokenSymbolNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenSymbol` after the digital asset contract has been deployed / initialized. The `LSP4TokenSymbol` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenTypeNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokentypenoteditable) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenTypeNotEditable()` +- Error hash: `0x4ef6d7fb` + +::: + +```solidity +error LSP4TokenTypeNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenType` after the digital asset contract has been deployed / initialized. The `LSP4TokenType` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor / initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP8BatchCallFailed + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8batchcallfailed) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8BatchCallFailed(uint256)` +- Error hash: `0x234eb819` + +::: + +```solidity +error LSP8BatchCallFailed(uint256 callIndex); +``` + +_Batch call failed._ + +Reverts when a batch call failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ----------- | +| `callIndex` | `uint256` | - | + +
+ +### LSP8CannotSendToAddressZero + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cannotsendtoaddresszero) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CannotSendToAddressZero()` +- Error hash: `0x24ecef4d` + +::: + +```solidity +error LSP8CannotSendToAddressZero(); +``` + +Reverts when trying to send token to the zero address. + +
+ +### LSP8CannotUseAddressZeroAsOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cannotuseaddresszeroasoperator) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CannotUseAddressZeroAsOperator()` +- Error hash: `0x9577b8b3` + +::: + +```solidity +error LSP8CannotUseAddressZeroAsOperator(); +``` + +Reverts when trying to set the zero address as an operator. + +
+ +### LSP8InvalidTransferBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8invalidtransferbatch) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8InvalidTransferBatch()` +- Error hash: `0x93a83119` + +::: + +```solidity +error LSP8InvalidTransferBatch(); +``` + +Reverts when the parameters used for `transferBatch` have different lengths. + +
+ +### LSP8NonExistentTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nonexistenttokenid) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NonExistentTokenId(bytes32)` +- Error hash: `0xae8f9a36` + +::: + +```solidity +error LSP8NonExistentTokenId(bytes32 tokenId); +``` + +Reverts when `tokenId` has not been minted. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8NonExistingOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nonexistingoperator) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NonExistingOperator(address,bytes32)` +- Error hash: `0x4aa31a8c` + +::: + +```solidity +error LSP8NonExistingOperator(address operator, bytes32 tokenId); +``` + +Reverts when `operator` is not an operator for the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8NotTokenOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nottokenoperator) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotTokenOperator(bytes32,address)` +- Error hash: `0x1294d2a9` + +::: + +```solidity +error LSP8NotTokenOperator(bytes32 tokenId, address caller); +``` + +Reverts when `caller` is not an allowed operator for `tokenId`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | +| `caller` | `address` | - | + +
+ +### LSP8NotTokenOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nottokenowner) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotTokenOwner(address,bytes32,address)` +- Error hash: `0x5b271ea2` + +::: + +```solidity +error LSP8NotTokenOwner(address tokenOwner, bytes32 tokenId, address caller); +``` + +Reverts when `caller` is not the `tokenOwner` of the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `tokenOwner` | `address` | - | +| `tokenId` | `bytes32` | - | +| `caller` | `address` | - | + +
+ +### LSP8NotifyTokenReceiverContractMissingLSP1Interface + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8notifytokenreceivercontractmissinglsp1interface) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotifyTokenReceiverContractMissingLSP1Interface(address)` +- Error hash: `0x4349776d` + +::: + +```solidity +error LSP8NotifyTokenReceiverContractMissingLSP1Interface( + address tokenReceiver +); +``` + +Reverts if the `tokenReceiver` does not implement LSP1 when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP8NotifyTokenReceiverIsEOA + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8notifytokenreceiveriseoa) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotifyTokenReceiverIsEOA(address)` +- Error hash: `0x03173137` + +::: + +```solidity +error LSP8NotifyTokenReceiverIsEOA(address tokenReceiver); +``` + +Reverts if the `tokenReceiver` is an EOA when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP8OperatorAlreadyAuthorized + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8operatoralreadyauthorized) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8OperatorAlreadyAuthorized(address,bytes32)` +- Error hash: `0xa7626b68` + +::: + +```solidity +error LSP8OperatorAlreadyAuthorized(address operator, bytes32 tokenId); +``` + +Reverts when `operator` is already authorized for the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8RevokeOperatorNotAuthorized + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8revokeoperatornotauthorized) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8RevokeOperatorNotAuthorized(address,address,bytes32)` +- Error hash: `0x760b5acd` + +::: + +```solidity +error LSP8RevokeOperatorNotAuthorized( + address caller, + address tokenOwner, + bytes32 tokenId +); +``` + +Reverts when the call to revoke operator is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8TokenContractCannotHoldValue + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokencontractcannotholdvalue) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenContractCannotHoldValue()` +- Error hash: `0x61f49442` + +::: + +```solidity +error LSP8TokenContractCannotHoldValue(); +``` + +_LSP8 contract cannot receive native tokens._ + +Error occurs when sending native tokens to the LSP8 contract without sending any data. E.g. Sending value without passing a bytes4 function selector to call a LSP17 Extension. + +
+ +### LSP8TokenIdFormatNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidformatnoteditable) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdFormatNotEditable()` +- Error hash: `0x3664800a` + +::: + +```solidity +error LSP8TokenIdFormatNotEditable(); +``` + +Reverts when trying to edit the data key `LSP8TokenIdFormat` after the identifiable digital asset contract has been deployed. The `LSP8TokenIdFormat` data key is located inside the ERC725Y Data key-value store of the identifiable digital asset contract. It can be set only once inside the constructor/initializer when the identifiable digital asset contract is being deployed. + +
+ +### LSP8TokenIdsDataEmptyArray + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidsdataemptyarray) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdsDataEmptyArray()` +- Error hash: `0x80c98305` + +::: + +```solidity +error LSP8TokenIdsDataEmptyArray(); +``` + +Reverts when empty arrays is passed to the function + +
+ +### LSP8TokenIdsDataLengthMismatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidsdatalengthmismatch) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdsDataLengthMismatch()` +- Error hash: `0x2fa71dfe` + +::: + +```solidity +error LSP8TokenIdsDataLengthMismatch(); +``` + +Reverts when the length of the token IDs data arrays is not equal + +
+ +### LSP8TokenOwnerCannotBeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenownercannotbeoperator) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenOwnerCannotBeOperator()` +- Error hash: `0x89fdad62` + +::: + +```solidity +error LSP8TokenOwnerCannotBeOperator(); +``` + +Reverts when trying to authorize or revoke the token's owner as an operator. + +
+ +### LSP8TokenOwnerChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenownerchanged) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenOwnerChanged(bytes32,address,address)` +- Error hash: `0x5a9c31d3` + +::: + +```solidity +error LSP8TokenOwnerChanged( + bytes32 tokenId, + address oldOwner, + address newOwner +); +``` + +Reverts when the token owner changed inside the [`_beforeTokenTransfer`](#_beforetokentransfer) hook. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | +| `oldOwner` | `address` | - | +| `newOwner` | `address` | - | + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownablecallernottheowner) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
+ +### OwnableCannotSetZeroAddressAsOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownablecannotsetzeroaddressasowner) +- Solidity implementation: [`LSP8IdentifiableDigitalAsset.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `OwnableCannotSetZeroAddressAsOwner()` +- Error hash: `0x1ad8836c` + +::: + +```solidity +error OwnableCannotSetZeroAddressAsOwner(); +``` + +Reverts when trying to set `address(0)` as the contract owner when deploying the contract, initializing it or transferring ownership of the contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Burnable.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Burnable.md new file mode 100644 index 000000000..3d623117a --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Burnable.md @@ -0,0 +1,2230 @@ + + + +# LSP8Burnable + +:::info Standard Specifications + +[`LSP-8-IdentifiableDigitalAsset`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md) + +::: +:::info Solidity implementation + +[`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +LSP8 token extension that allows token holders to destroy both their own tokens and those that they have an allowance for as an operator. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### fallback + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#fallback) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. + +
+ +### receive + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#receive) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +receive() external payable; +``` + +_LSP8 contract cannot receive native tokens._ + +Reverts whenever someone tries to send native tokens to a LSP8 contract. + +
+ +### authorizeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#authorizeoperator) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `authorizeOperator(address,bytes32,bytes)` +- Function selector: `0x86a10ddd` + +::: + +```solidity +function authorizeOperator( + address operator, + bytes32 tokenId, + bytes operatorNotificationData +) external nonpayable; +``` + +Allow an `operator` address to transfer or burn a specific `tokenId` on behalf of its token owner. See [`isOperatorFor`](#isoperatorfor). Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------- | +| `operator` | `address` | The address to authorize as an operator. | +| `tokenId` | `bytes32` | The token ID operator has access to. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### balanceOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#balanceof) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `balanceOf(address)` +- Function selector: `0x70a08231` + +::: + +```solidity +function balanceOf(address tokenOwner) external view returns (uint256); +``` + +Get the number of token IDs owned by `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------------------- | +| `tokenOwner` | `address` | The address to query \* | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------------------- | +| `0` | `uint256` | The total number of token IDs that `tokenOwner` owns. | + +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#batchcalls) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### burn + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#burn) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `burn(bytes32,bytes)` +- Function selector: `0x6c79b70b` + +::: + +```solidity +function burn(bytes32 tokenId, bytes data) external nonpayable; +``` + +_Burning tokenId `tokenId`. This tokenId will not be recoverable! (additional data sent: `data`)._ + +See internal [`_burn`](#_burn) function for details. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------- | +| `tokenId` | `bytes32` | The tokenId to burn. | +| `data` | `bytes` | Any extra data to be sent alongside burning the tokenId. | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdata) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatabatch) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### getDataBatchForTokenIds + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatabatchfortokenids) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataBatchForTokenIds(bytes32[],bytes32[])` +- Function selector: `0x1d26fce6` + +::: + +```solidity +function getDataBatchForTokenIds( + bytes32[] tokenIds, + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Retrieves data in batch for multiple `tokenId` and `dataKey` pairs._ + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ----------------------------------------------------- | +| `tokenIds` | `bytes32[]` | An array of token IDs. | +| `dataKeys` | `bytes32[]` | An array of data keys corresponding to the token IDs. | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------------------------------- | +| `dataValues` | `bytes[]` | An array of data values for each pair of `tokenId` and `dataKey`. | + +
+ +### getDataForTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatafortokenid) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataForTokenId(bytes32,bytes32)` +- Function selector: `0x16e023b3` + +::: + +```solidity +function getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey +) external view returns (bytes dataValue); +``` + +_Retrieves data for a specific `tokenId` and `dataKey`._ + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to retrieve. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------- | +| `dataValue` | `bytes` | The data value associated with the given `tokenId` and `dataKey`. | + +
+ +### getOperatorsOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getoperatorsof) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getOperatorsOf(bytes32)` +- Function selector: `0x49a6078d` + +::: + +```solidity +function getOperatorsOf(bytes32 tokenId) external view returns (address[]); +``` + +Returns all `operator` addresses that are allowed to transfer or burn a specific `tokenId` on behalf of its owner. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `tokenId` | `bytes32` | The token ID to get the operators for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ------------------------------------------------------------------------------------------------------------ | +| `0` | `address[]` | An array of operators allowed to transfer or burn a specific `tokenId`. Requirements - `tokenId` must exist. | + +
+ +### isOperatorFor + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#isoperatorfor) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `isOperatorFor(address,bytes32)` +- Function selector: `0x2a3654a4` + +::: + +```solidity +function isOperatorFor( + address operator, + bytes32 tokenId +) external view returns (bool); +``` + +Returns whether `operator` address is an operator for a given `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------- | +| `operator` | `address` | The address to query operator status for. | +| `tokenId` | `bytes32` | The token ID to check if `operator` is allowed to operate on. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | --------------------------------------------------------------------- | +| `0` | `bool` | `true` if `operator` is an operator for `tokenId`, `false` otherwise. | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#owner) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#renounceownership) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner. + +
+ +### revokeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#revokeoperator) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `revokeOperator(address,bytes32,bool,bytes)` +- Function selector: `0xdb8c9663` + +::: + +```solidity +function revokeOperator( + address operator, + bytes32 tokenId, + bool notify, + bytes operatorNotificationData +) external nonpayable; +``` + +Remove access of `operator` for a given `tokenId`, disallowing it to transfer `tokenId` on behalf of its owner. See also [`isOperatorFor`](#isoperatorfor). + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------------------------- | +| `operator` | `address` | The address to revoke as an operator. | +| `tokenId` | `bytes32` | The tokenId `operator` is revoked from operating on. | +| `notify` | `bool` | Boolean indicating whether to notify the operator or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### setData + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdata) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner). + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatabatch) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner) of the contract. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event **for each data key/value pair set**. + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### setDataBatchForTokenIds + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatabatchfortokenids) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataBatchForTokenIds(bytes32[],bytes32[],bytes[])` +- Function selector: `0xbe9f0e6f` + +::: + +```solidity +function setDataBatchForTokenIds( + bytes32[] tokenIds, + bytes32[] dataKeys, + bytes[] dataValues +) external nonpayable; +``` + +_Sets data in batch for multiple `tokenId` and `dataKey` pairs._ + +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ----------------------------------------------------- | +| `tokenIds` | `bytes32[]` | An array of token IDs. | +| `dataKeys` | `bytes32[]` | An array of data keys corresponding to the token IDs. | +| `dataValues` | `bytes[]` | An array of values to set for the given data keys. | + +
+ +### setDataForTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatafortokenid) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataForTokenId(bytes32,bytes32,bytes)` +- Function selector: `0xd6c1407c` + +::: + +```solidity +function setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes dataValue +) external nonpayable; +``` + +_Sets data for a specific `tokenId` and `dataKey`._ + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#supportsinterface) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### tokenIdsOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenidsof) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenIdsOf(address)` +- Function selector: `0xa3b261f2` + +::: + +```solidity +function tokenIdsOf(address tokenOwner) external view returns (bytes32[]); +``` + +Returns the list of token IDs that the `tokenOwner` address owns. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ---------------------------------------------------------- | +| `tokenOwner` | `address` | The address that we want to get the list of token IDs for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ------------------------------------------------------- | +| `0` | `bytes32[]` | An array of `bytes32[] tokenIds` owned by `tokenOwner`. | + +
+ +### tokenOwnerOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenownerof) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenOwnerOf(bytes32)` +- Function selector: `0x217b2270` + +::: + +```solidity +function tokenOwnerOf(bytes32 tokenId) external view returns (address); +``` + +Returns the address that owns a given `tokenId`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------ | +| `tokenId` | `bytes32` | The token ID to query the owner for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------- | +| `0` | `address` | The owner address of the given `tokenId`. | + +
+ +### totalSupply + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#totalsupply) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `totalSupply()` +- Function selector: `0x18160ddd` + +::: + +```solidity +function totalSupply() external view returns (uint256); +``` + +Returns the number of existing tokens that have been minted in this contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------ | +| `0` | `uint256` | The number of existing tokens. | + +
+ +### transfer + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transfer) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transfer(address,address,bytes32,bool,bytes)` +- Function selector: `0x511b6952` + +::: + +```solidity +function transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes data +) external nonpayable; +``` + +Transfer a given `tokenId` token from the `from` address to the `to` address. If operators are set for a specific `tokenId`, all the operators are revoked after the tokenId have been transferred. The `force` parameter MUST be set to `true` when transferring tokens to Externally Owned Accounts (EOAs) or contracts that do not implement the LSP1 standard. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address that owns the given `tokenId`. | +| `to` | `address` | The address that will receive the `tokenId`. | +| `tokenId` | `bytes32` | The token ID to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | + +
+ +### transferBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transferbatch) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transferBatch(address[],address[],bytes32[],bool[],bytes[])` +- Function selector: `0x7e87632c` + +::: + +```solidity +function transferBatch( + address[] from, + address[] to, + bytes32[] tokenId, + bool[] force, + bytes[] data +) external nonpayable; +``` + +Transfers multiple tokens at once based on the arrays of `from`, `to` and `tokenId`. If any transfer fails, the whole call will revert. + +#### Parameters + +| Name | Type | Description | +| --------- | :---------: | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address[]` | An array of sending addresses. | +| `to` | `address[]` | An array of recipient addresses. | +| `tokenId` | `bytes32[]` | An array of token IDs to transfer. | +| `force` | `bool[]` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard and not revert. | +| `data` | `bytes[]` | Any additional data the caller wants included in the emitted event, and sent in the hooks to the `from` and `to` addresses. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transferownership) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `newOwner` | `address` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +The ERC725Y data key `_LSP8_TOKENID_FORMAT_KEY` cannot be changed +once the identifiable digital asset contract has been deployed. + +
+ +### \_isOperatorOrOwner + +```solidity +function _isOperatorOrOwner( + address caller, + bytes32 tokenId +) internal view returns (bool); +``` + +verifies if the `caller` is operator or owner for the `tokenId` + +#### Returns + +| Name | Type | Description | +| ---- | :----: | -------------------------------------------- | +| `0` | `bool` | true if `caller` is either operator or owner | + +
+ +### \_revokeOperator + +```solidity +function _revokeOperator( + address operator, + address tokenOwner, + bytes32 tokenId, + bool notified, + bytes operatorNotificationData +) internal nonpayable; +``` + +removes `operator` from the list of operators for the `tokenId` + +
+ +### \_clearOperators + +```solidity +function _clearOperators( + address tokenOwner, + bytes32 tokenId +) internal nonpayable; +``` + +revoke all the current operators for a specific `tokenId` token which belongs to `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ------------------------------------------------- | +| `tokenOwner` | `address` | The address that is the owner of the `tokenId`. | +| `tokenId` | `bytes32` | The token to remove the associated operators for. | + +
+ +### \_exists + +```solidity +function _exists(bytes32 tokenId) internal view returns (bool); +``` + +Returns whether `tokenId` exists. +Tokens start existing when they are minted ([`_mint`](#_mint)), and stop existing when they are burned ([`_burn`](#_burn)). + +
+ +### \_existsOrError + +```solidity +function _existsOrError(bytes32 tokenId) internal view; +``` + +When `tokenId` does not exist then revert with an error. + +
+ +### \_mint + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the recipient via LSP1**. + +::: + +```solidity +function _mint( + address to, + bytes32 tokenId, + bool force, + bytes data +) internal nonpayable; +``` + +Create `tokenId` by minting it and transfers it to `to`. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as `from` address. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------- | +| `to` | `address` | @param tokenId The token ID to create (= mint). | +| `tokenId` | `bytes32` | The token ID to create (= mint). | +| `force` | `bool` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hook of the `to` address. | + +
+ +### \_burn + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender via LSP1**. + +::: + +:::tip Hint + +In dApps, you can know which addresses are burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + +::: + +```solidity +function _burn(bytes32 tokenId, bytes data) internal nonpayable; +``` + +Burn a specific `tokenId`, removing the `tokenId` from the [`tokenIdsOf`](#tokenidsof) the caller and decreasing its [`balanceOf`](#balanceof) by -1. +This will also clear all the operators allowed to transfer the `tokenId`. +The owner of the `tokenId` will be notified about the `tokenId` being transferred through its LSP1 [`universalReceiver`](#universalreceiver) +function, if it is a contract that supports the LSP1 interface. Its [`universalReceiver`](#universalreceiver) function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as the `to` address. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------------------------------------------------------------------------------------- | +| `tokenId` | `bytes32` | The token to burn. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the LSP1 hook on the token owner's address. | + +
+ +### \_transfer + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender/recipient via LSP1**. + +::: + +:::danger + +This internal function does not check if the sender is authorized or not to operate on the `tokenId`. + +::: + +```solidity +function _transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes data +) internal nonpayable; +``` + +Change the owner of the `tokenId` from `from` to `to`. +Both the sender and recipient will be notified of the `tokenId` being transferred through their LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The sender address. | +| `to` | `address` | @param tokenId The token to transfer. | +| `tokenId` | `bytes32` | The token to transfer. | +| `force` | `bool` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. | + +
+ +### \_setDataForTokenId + +```solidity +function _setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes dataValue +) internal nonpayable; +``` + +Sets data for a specific `tokenId` and `dataKey` in the ERC725Y storage +The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + +
+ +**Emitted events:** + +- [`TokenIdDataChanged`](#tokeniddatachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### \_getDataForTokenId + +```solidity +function _getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey +) internal view returns (bytes dataValues); +``` + +Retrieves data for a specific `tokenId` and `dataKey` from the ERC725Y storage +The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to retrieve. | + +#### Returns + +| Name | Type | Description | +| ------------ | :-----: | ----------------------------------------------------------------- | +| `dataValues` | `bytes` | The data value associated with the given `tokenId` and `dataKey`. | + +
+ +### \_beforeTokenTransfer + +```solidity +function _beforeTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes data +) internal nonpayable; +``` + +Hook that is called before any token transfer, including minting and burning. +Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `from` | `address` | The sender address | +| `to` | `address` | @param tokenId The tokenId to transfer | +| `tokenId` | `bytes32` | The tokenId to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_afterTokenTransfer + +```solidity +function _afterTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes data +) internal nonpayable; +``` + +Hook that is called after any token transfer, including minting and burning. +Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `from` | `address` | The sender address | +| `to` | `address` | @param tokenId The tokenId to transfer | +| `tokenId` | `bytes32` | The tokenId to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_notifyTokenOperator + +```solidity +function _notifyTokenOperator( + address operator, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the operator `operator` about the `tokenId` being authorized. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. +If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `operator` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `operator` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenSender + +```solidity +function _notifyTokenSender(address from, bytes lsp1Data) internal nonpayable; +``` + +Attempt to notify the token sender `from` about the `tokenId` being transferred. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. +If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `from` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `from` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenReceiver + +```solidity +function _notifyTokenReceiver( + address to, + bool force, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the token receiver `to` about the `tokenId` being received. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. +If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + +- if `force` is set to `true`, nothing will happen and no notification will be sent. + +- if `force` is set to `false, the transaction will revert. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | --------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `lsp1Data` | `bytes` | The data to be sent to the `to` address in the `universalReceiver(...)` call. | + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +
+ +### \_fallbackLSP17Extendable + +:::info + +The LSP8 Token contract should not hold any native tokens. Any native tokens received by the contract +will be forwarded to the extension address mapped to the selector from `msg.sig`. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call with the received value to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the address(0) will be returned. +We will always forward the value to the extension, as the LSP8 contract is not supposed to hold any native tokens. +Reverts if there is no extension for the function being called. +If there is an extension for the function selector being called, it calls the extension with the +CALL opcode, passing the [`msg.data`](#msg.data) appended with the 20 bytes of the [`msg.sender`](#msg.sender) and +32 bytes of the [`msg.value`](#msg.value) + +
+ +## Events + +### DataChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#datachanged) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### OperatorAuthorizationChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#operatorauthorizationchanged) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OperatorAuthorizationChanged(address,address,bytes32,bytes)` +- Event topic hash: `0x1b1b58aa2ec0cec2228b2d37124556d41f5a1f7b12f089171f896cc236671215` + +::: + +```solidity +event OperatorAuthorizationChanged( + address indexed operator, + address indexed tokenOwner, + bytes32 indexed tokenId, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` enables `operator` to transfer or burn the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address authorized as an operator. | +| `tokenOwner` **`indexed`** | `address` | The owner of the `tokenId`. | +| `tokenId` **`indexed`** | `bytes32` | The tokenId `operator` address has access on behalf of `tokenOwner`. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OperatorRevoked + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#operatorrevoked) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OperatorRevoked(address,address,bytes32,bool,bytes)` +- Event topic hash: `0xc78cd419d6136f9f1c1c6aec1d3fae098cffaf8bc86314a8f2685e32fe574e3c` + +::: + +```solidity +event OperatorRevoked( + address indexed operator, + address indexed tokenOwner, + bytes32 indexed tokenId, + bool notified, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` disables `operator` to transfer or burn `tokenId` on its behalf. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ---------------------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address revoked from the operator array ([`getOperatorsOf`](#getoperatorsof)). | +| `tokenOwner` **`indexed`** | `address` | The owner of the `tokenId`. | +| `tokenId` **`indexed`** | `bytes32` | The tokenId `operator` is revoked from operating on. | +| `notified` | `bool` | Bool indicating whether the operator has been notified or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownershiptransferred) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### TokenIdDataChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokeniddatachanged) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `TokenIdDataChanged(bytes32,bytes32,bytes)` +- Event topic hash: `0xa6e4251f855f750545fe414f120db91c76b88def14d120969e5bb2d3f05debbb` + +::: + +```solidity +event TokenIdDataChanged( + bytes32 indexed tokenId, + bytes32 indexed dataKey, + bytes dataValue +); +``` + +Emitted when setting data for `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `tokenId` **`indexed`** | `bytes32` | The tokenId which data is set for. | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### Transfer + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transfer) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `Transfer(address,address,address,bytes32,bool,bytes)` +- Event topic hash: `0xb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf` + +::: + +```solidity +event Transfer( + address operator, + address indexed from, + address indexed to, + bytes32 indexed tokenId, + bool force, + bytes data +); +``` + +Emitted when `tokenId` token is transferred from the `from` to the `to` address. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------- | +| `operator` | `address` | The address of operator that sent the `tokenId` | +| `from` **`indexed`** | `address` | The previous owner of the `tokenId` | +| `to` **`indexed`** | `address` | The new owner of `tokenId` | +| `tokenId` **`indexed`** | `bytes32` | The tokenId that was transferred | +| `force` | `bool` | If the token transfer enforces the `to` recipient address to be a contract that implements the LSP1 standard or not. | +| `data` | `bytes` | Any additional data the caller included by the caller during the transfer, and sent in the hooks to the `from` and `to` addresses. | + +
+ +## Errors + +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### InvalidExtensionAddress + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#invalidextensionaddress) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `InvalidExtensionAddress(bytes)` +- Error hash: `0x42bfe79f` + +::: + +```solidity +error InvalidExtensionAddress(bytes storedData); +``` + +reverts when the bytes retrieved from the LSP17 data key is not a valid address (not 20 bytes) + +#### Parameters + +| Name | Type | Description | +| ------------ | :-----: | ----------- | +| `storedData` | `bytes` | - | + +
+ +### InvalidFunctionSelector + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#invalidfunctionselector) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `InvalidFunctionSelector(bytes)` +- Error hash: `0xe5099ee3` + +::: + +```solidity +error InvalidFunctionSelector(bytes data); +``` + +reverts when the contract is called with a function selector not valid (less than 4 bytes of data) + +#### Parameters + +| Name | Type | Description | +| ------ | :-----: | ----------- | +| `data` | `bytes` | - | + +
+ +### LSP4TokenNameNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokennamenoteditable) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenNameNotEditable()` +- Error hash: `0x85c169bd` + +::: + +```solidity +error LSP4TokenNameNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenName` after the digital asset contract has been deployed / initialized. The `LSP4TokenName` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenSymbolNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokensymbolnoteditable) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenSymbolNotEditable()` +- Error hash: `0x76755b38` + +::: + +```solidity +error LSP4TokenSymbolNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenSymbol` after the digital asset contract has been deployed / initialized. The `LSP4TokenSymbol` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenTypeNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokentypenoteditable) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenTypeNotEditable()` +- Error hash: `0x4ef6d7fb` + +::: + +```solidity +error LSP4TokenTypeNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenType` after the digital asset contract has been deployed / initialized. The `LSP4TokenType` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor / initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP8BatchCallFailed + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8batchcallfailed) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8BatchCallFailed(uint256)` +- Error hash: `0x234eb819` + +::: + +```solidity +error LSP8BatchCallFailed(uint256 callIndex); +``` + +_Batch call failed._ + +Reverts when a batch call failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ----------- | +| `callIndex` | `uint256` | - | + +
+ +### LSP8CannotSendToAddressZero + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cannotsendtoaddresszero) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CannotSendToAddressZero()` +- Error hash: `0x24ecef4d` + +::: + +```solidity +error LSP8CannotSendToAddressZero(); +``` + +Reverts when trying to send token to the zero address. + +
+ +### LSP8CannotUseAddressZeroAsOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cannotuseaddresszeroasoperator) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CannotUseAddressZeroAsOperator()` +- Error hash: `0x9577b8b3` + +::: + +```solidity +error LSP8CannotUseAddressZeroAsOperator(); +``` + +Reverts when trying to set the zero address as an operator. + +
+ +### LSP8InvalidTransferBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8invalidtransferbatch) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8InvalidTransferBatch()` +- Error hash: `0x93a83119` + +::: + +```solidity +error LSP8InvalidTransferBatch(); +``` + +Reverts when the parameters used for `transferBatch` have different lengths. + +
+ +### LSP8NonExistentTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nonexistenttokenid) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NonExistentTokenId(bytes32)` +- Error hash: `0xae8f9a36` + +::: + +```solidity +error LSP8NonExistentTokenId(bytes32 tokenId); +``` + +Reverts when `tokenId` has not been minted. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8NonExistingOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nonexistingoperator) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NonExistingOperator(address,bytes32)` +- Error hash: `0x4aa31a8c` + +::: + +```solidity +error LSP8NonExistingOperator(address operator, bytes32 tokenId); +``` + +Reverts when `operator` is not an operator for the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8NotTokenOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nottokenoperator) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotTokenOperator(bytes32,address)` +- Error hash: `0x1294d2a9` + +::: + +```solidity +error LSP8NotTokenOperator(bytes32 tokenId, address caller); +``` + +Reverts when `caller` is not an allowed operator for `tokenId`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | +| `caller` | `address` | - | + +
+ +### LSP8NotTokenOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nottokenowner) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotTokenOwner(address,bytes32,address)` +- Error hash: `0x5b271ea2` + +::: + +```solidity +error LSP8NotTokenOwner(address tokenOwner, bytes32 tokenId, address caller); +``` + +Reverts when `caller` is not the `tokenOwner` of the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `tokenOwner` | `address` | - | +| `tokenId` | `bytes32` | - | +| `caller` | `address` | - | + +
+ +### LSP8NotifyTokenReceiverContractMissingLSP1Interface + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8notifytokenreceivercontractmissinglsp1interface) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotifyTokenReceiverContractMissingLSP1Interface(address)` +- Error hash: `0x4349776d` + +::: + +```solidity +error LSP8NotifyTokenReceiverContractMissingLSP1Interface( + address tokenReceiver +); +``` + +Reverts if the `tokenReceiver` does not implement LSP1 when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP8NotifyTokenReceiverIsEOA + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8notifytokenreceiveriseoa) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotifyTokenReceiverIsEOA(address)` +- Error hash: `0x03173137` + +::: + +```solidity +error LSP8NotifyTokenReceiverIsEOA(address tokenReceiver); +``` + +Reverts if the `tokenReceiver` is an EOA when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP8OperatorAlreadyAuthorized + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8operatoralreadyauthorized) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8OperatorAlreadyAuthorized(address,bytes32)` +- Error hash: `0xa7626b68` + +::: + +```solidity +error LSP8OperatorAlreadyAuthorized(address operator, bytes32 tokenId); +``` + +Reverts when `operator` is already authorized for the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8RevokeOperatorNotAuthorized + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8revokeoperatornotauthorized) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8RevokeOperatorNotAuthorized(address,address,bytes32)` +- Error hash: `0x760b5acd` + +::: + +```solidity +error LSP8RevokeOperatorNotAuthorized( + address caller, + address tokenOwner, + bytes32 tokenId +); +``` + +Reverts when the call to revoke operator is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8TokenContractCannotHoldValue + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokencontractcannotholdvalue) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenContractCannotHoldValue()` +- Error hash: `0x61f49442` + +::: + +```solidity +error LSP8TokenContractCannotHoldValue(); +``` + +_LSP8 contract cannot receive native tokens._ + +Error occurs when sending native tokens to the LSP8 contract without sending any data. E.g. Sending value without passing a bytes4 function selector to call a LSP17 Extension. + +
+ +### LSP8TokenIdFormatNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidformatnoteditable) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdFormatNotEditable()` +- Error hash: `0x3664800a` + +::: + +```solidity +error LSP8TokenIdFormatNotEditable(); +``` + +Reverts when trying to edit the data key `LSP8TokenIdFormat` after the identifiable digital asset contract has been deployed. The `LSP8TokenIdFormat` data key is located inside the ERC725Y Data key-value store of the identifiable digital asset contract. It can be set only once inside the constructor/initializer when the identifiable digital asset contract is being deployed. + +
+ +### LSP8TokenIdsDataEmptyArray + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidsdataemptyarray) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdsDataEmptyArray()` +- Error hash: `0x80c98305` + +::: + +```solidity +error LSP8TokenIdsDataEmptyArray(); +``` + +Reverts when empty arrays is passed to the function + +
+ +### LSP8TokenIdsDataLengthMismatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidsdatalengthmismatch) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdsDataLengthMismatch()` +- Error hash: `0x2fa71dfe` + +::: + +```solidity +error LSP8TokenIdsDataLengthMismatch(); +``` + +Reverts when the length of the token IDs data arrays is not equal + +
+ +### LSP8TokenOwnerCannotBeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenownercannotbeoperator) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenOwnerCannotBeOperator()` +- Error hash: `0x89fdad62` + +::: + +```solidity +error LSP8TokenOwnerCannotBeOperator(); +``` + +Reverts when trying to authorize or revoke the token's owner as an operator. + +
+ +### LSP8TokenOwnerChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenownerchanged) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenOwnerChanged(bytes32,address,address)` +- Error hash: `0x5a9c31d3` + +::: + +```solidity +error LSP8TokenOwnerChanged( + bytes32 tokenId, + address oldOwner, + address newOwner +); +``` + +Reverts when the token owner changed inside the [`_beforeTokenTransfer`](#_beforetokentransfer) hook. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | +| `oldOwner` | `address` | - | +| `newOwner` | `address` | - | + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownablecallernottheowner) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
+ +### OwnableCannotSetZeroAddressAsOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownablecannotsetzeroaddressasowner) +- Solidity implementation: [`LSP8Burnable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `OwnableCannotSetZeroAddressAsOwner()` +- Error hash: `0x1ad8836c` + +::: + +```solidity +error OwnableCannotSetZeroAddressAsOwner(); +``` + +Reverts when trying to set `address(0)` as the contract owner when deploying the contract, initializing it or transferring ownership of the contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8CappedSupply.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8CappedSupply.md new file mode 100644 index 000000000..9841715d8 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8CappedSupply.md @@ -0,0 +1,2246 @@ + + + +# LSP8CappedSupply + +:::info Standard Specifications + +[`LSP-8-IdentifiableDigitalAsset`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md) + +::: +:::info Solidity implementation + +[`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +LSP8 token extension to add a max token supply cap. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### fallback + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#fallback) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. + +
+ +### receive + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#receive) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +receive() external payable; +``` + +_LSP8 contract cannot receive native tokens._ + +Reverts whenever someone tries to send native tokens to a LSP8 contract. + +
+ +### authorizeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#authorizeoperator) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `authorizeOperator(address,bytes32,bytes)` +- Function selector: `0x86a10ddd` + +::: + +```solidity +function authorizeOperator( + address operator, + bytes32 tokenId, + bytes operatorNotificationData +) external nonpayable; +``` + +Allow an `operator` address to transfer or burn a specific `tokenId` on behalf of its token owner. See [`isOperatorFor`](#isoperatorfor). Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------- | +| `operator` | `address` | The address to authorize as an operator. | +| `tokenId` | `bytes32` | The token ID operator has access to. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### balanceOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#balanceof) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `balanceOf(address)` +- Function selector: `0x70a08231` + +::: + +```solidity +function balanceOf(address tokenOwner) external view returns (uint256); +``` + +Get the number of token IDs owned by `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------------------- | +| `tokenOwner` | `address` | The address to query \* | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------------------- | +| `0` | `uint256` | The total number of token IDs that `tokenOwner` owns. | + +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#batchcalls) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdata) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatabatch) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### getDataBatchForTokenIds + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatabatchfortokenids) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataBatchForTokenIds(bytes32[],bytes32[])` +- Function selector: `0x1d26fce6` + +::: + +```solidity +function getDataBatchForTokenIds( + bytes32[] tokenIds, + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Retrieves data in batch for multiple `tokenId` and `dataKey` pairs._ + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ----------------------------------------------------- | +| `tokenIds` | `bytes32[]` | An array of token IDs. | +| `dataKeys` | `bytes32[]` | An array of data keys corresponding to the token IDs. | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------------------------------- | +| `dataValues` | `bytes[]` | An array of data values for each pair of `tokenId` and `dataKey`. | + +
+ +### getDataForTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatafortokenid) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataForTokenId(bytes32,bytes32)` +- Function selector: `0x16e023b3` + +::: + +```solidity +function getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey +) external view returns (bytes dataValue); +``` + +_Retrieves data for a specific `tokenId` and `dataKey`._ + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to retrieve. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------- | +| `dataValue` | `bytes` | The data value associated with the given `tokenId` and `dataKey`. | + +
+ +### getOperatorsOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getoperatorsof) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getOperatorsOf(bytes32)` +- Function selector: `0x49a6078d` + +::: + +```solidity +function getOperatorsOf(bytes32 tokenId) external view returns (address[]); +``` + +Returns all `operator` addresses that are allowed to transfer or burn a specific `tokenId` on behalf of its owner. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `tokenId` | `bytes32` | The token ID to get the operators for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ------------------------------------------------------------------------------------------------------------ | +| `0` | `address[]` | An array of operators allowed to transfer or burn a specific `tokenId`. Requirements - `tokenId` must exist. | + +
+ +### isOperatorFor + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#isoperatorfor) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `isOperatorFor(address,bytes32)` +- Function selector: `0x2a3654a4` + +::: + +```solidity +function isOperatorFor( + address operator, + bytes32 tokenId +) external view returns (bool); +``` + +Returns whether `operator` address is an operator for a given `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------- | +| `operator` | `address` | The address to query operator status for. | +| `tokenId` | `bytes32` | The token ID to check if `operator` is allowed to operate on. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | --------------------------------------------------------------------- | +| `0` | `bool` | `true` if `operator` is an operator for `tokenId`, `false` otherwise. | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#owner) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#renounceownership) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner. + +
+ +### revokeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#revokeoperator) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `revokeOperator(address,bytes32,bool,bytes)` +- Function selector: `0xdb8c9663` + +::: + +```solidity +function revokeOperator( + address operator, + bytes32 tokenId, + bool notify, + bytes operatorNotificationData +) external nonpayable; +``` + +Remove access of `operator` for a given `tokenId`, disallowing it to transfer `tokenId` on behalf of its owner. See also [`isOperatorFor`](#isoperatorfor). + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------------------------- | +| `operator` | `address` | The address to revoke as an operator. | +| `tokenId` | `bytes32` | The tokenId `operator` is revoked from operating on. | +| `notify` | `bool` | Boolean indicating whether to notify the operator or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### setData + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdata) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner). + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatabatch) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner) of the contract. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event **for each data key/value pair set**. + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### setDataBatchForTokenIds + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatabatchfortokenids) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataBatchForTokenIds(bytes32[],bytes32[],bytes[])` +- Function selector: `0xbe9f0e6f` + +::: + +```solidity +function setDataBatchForTokenIds( + bytes32[] tokenIds, + bytes32[] dataKeys, + bytes[] dataValues +) external nonpayable; +``` + +_Sets data in batch for multiple `tokenId` and `dataKey` pairs._ + +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ----------------------------------------------------- | +| `tokenIds` | `bytes32[]` | An array of token IDs. | +| `dataKeys` | `bytes32[]` | An array of data keys corresponding to the token IDs. | +| `dataValues` | `bytes[]` | An array of values to set for the given data keys. | + +
+ +### setDataForTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatafortokenid) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataForTokenId(bytes32,bytes32,bytes)` +- Function selector: `0xd6c1407c` + +::: + +```solidity +function setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes dataValue +) external nonpayable; +``` + +_Sets data for a specific `tokenId` and `dataKey`._ + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#supportsinterface) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### tokenIdsOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenidsof) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenIdsOf(address)` +- Function selector: `0xa3b261f2` + +::: + +```solidity +function tokenIdsOf(address tokenOwner) external view returns (bytes32[]); +``` + +Returns the list of token IDs that the `tokenOwner` address owns. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ---------------------------------------------------------- | +| `tokenOwner` | `address` | The address that we want to get the list of token IDs for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ------------------------------------------------------- | +| `0` | `bytes32[]` | An array of `bytes32[] tokenIds` owned by `tokenOwner`. | + +
+ +### tokenOwnerOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenownerof) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenOwnerOf(bytes32)` +- Function selector: `0x217b2270` + +::: + +```solidity +function tokenOwnerOf(bytes32 tokenId) external view returns (address); +``` + +Returns the address that owns a given `tokenId`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------ | +| `tokenId` | `bytes32` | The token ID to query the owner for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------- | +| `0` | `address` | The owner address of the given `tokenId`. | + +
+ +### tokenSupplyCap + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokensupplycap) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenSupplyCap()` +- Function selector: `0x52058d8a` + +::: + +```solidity +function tokenSupplyCap() external view returns (uint256); +``` + +_The maximum supply amount of tokens allowed to exist is `_TOKEN_SUPPLY_CAP`._ + +Get the maximum number of tokens that can exist to circulate. Once [`totalSupply`](#totalsupply) reaches reaches [`totalSuuplyCap`](#totalsuuplycap), it is not possible to mint more tokens. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------------ | +| `0` | `uint256` | The maximum number of tokens that can exist in the contract. | + +
+ +### totalSupply + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#totalsupply) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `totalSupply()` +- Function selector: `0x18160ddd` + +::: + +```solidity +function totalSupply() external view returns (uint256); +``` + +Returns the number of existing tokens that have been minted in this contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------ | +| `0` | `uint256` | The number of existing tokens. | + +
+ +### transfer + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transfer) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transfer(address,address,bytes32,bool,bytes)` +- Function selector: `0x511b6952` + +::: + +```solidity +function transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes data +) external nonpayable; +``` + +Transfer a given `tokenId` token from the `from` address to the `to` address. If operators are set for a specific `tokenId`, all the operators are revoked after the tokenId have been transferred. The `force` parameter MUST be set to `true` when transferring tokens to Externally Owned Accounts (EOAs) or contracts that do not implement the LSP1 standard. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address that owns the given `tokenId`. | +| `to` | `address` | The address that will receive the `tokenId`. | +| `tokenId` | `bytes32` | The token ID to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | + +
+ +### transferBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transferbatch) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transferBatch(address[],address[],bytes32[],bool[],bytes[])` +- Function selector: `0x7e87632c` + +::: + +```solidity +function transferBatch( + address[] from, + address[] to, + bytes32[] tokenId, + bool[] force, + bytes[] data +) external nonpayable; +``` + +Transfers multiple tokens at once based on the arrays of `from`, `to` and `tokenId`. If any transfer fails, the whole call will revert. + +#### Parameters + +| Name | Type | Description | +| --------- | :---------: | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address[]` | An array of sending addresses. | +| `to` | `address[]` | An array of recipient addresses. | +| `tokenId` | `bytes32[]` | An array of token IDs to transfer. | +| `force` | `bool[]` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard and not revert. | +| `data` | `bytes[]` | Any additional data the caller wants included in the emitted event, and sent in the hooks to the `from` and `to` addresses. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transferownership) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `newOwner` | `address` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +The ERC725Y data key `_LSP8_TOKENID_FORMAT_KEY` cannot be changed +once the identifiable digital asset contract has been deployed. + +
+ +### \_isOperatorOrOwner + +```solidity +function _isOperatorOrOwner( + address caller, + bytes32 tokenId +) internal view returns (bool); +``` + +verifies if the `caller` is operator or owner for the `tokenId` + +#### Returns + +| Name | Type | Description | +| ---- | :----: | -------------------------------------------- | +| `0` | `bool` | true if `caller` is either operator or owner | + +
+ +### \_revokeOperator + +```solidity +function _revokeOperator( + address operator, + address tokenOwner, + bytes32 tokenId, + bool notified, + bytes operatorNotificationData +) internal nonpayable; +``` + +removes `operator` from the list of operators for the `tokenId` + +
+ +### \_clearOperators + +```solidity +function _clearOperators( + address tokenOwner, + bytes32 tokenId +) internal nonpayable; +``` + +revoke all the current operators for a specific `tokenId` token which belongs to `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ------------------------------------------------- | +| `tokenOwner` | `address` | The address that is the owner of the `tokenId`. | +| `tokenId` | `bytes32` | The token to remove the associated operators for. | + +
+ +### \_exists + +```solidity +function _exists(bytes32 tokenId) internal view returns (bool); +``` + +Returns whether `tokenId` exists. +Tokens start existing when they are minted ([`_mint`](#_mint)), and stop existing when they are burned ([`_burn`](#_burn)). + +
+ +### \_existsOrError + +```solidity +function _existsOrError(bytes32 tokenId) internal view; +``` + +When `tokenId` does not exist then revert with an error. + +
+ +### \_mint + +```solidity +function _mint( + address to, + bytes32 tokenId, + bool force, + bytes data +) internal nonpayable; +``` + +Same as [`_mint`](#_mint) but allows to mint only if newly minted `tokenId` does not increase the [`totalSupply`](#totalsupply) +over the [`tokenSupplyCap`](#tokensupplycap). +after a new `tokenId` has of tokens have been minted. + +
+ +### \_burn + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender via LSP1**. + +::: + +:::tip Hint + +In dApps, you can know which addresses are burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + +::: + +```solidity +function _burn(bytes32 tokenId, bytes data) internal nonpayable; +``` + +Burn a specific `tokenId`, removing the `tokenId` from the [`tokenIdsOf`](#tokenidsof) the caller and decreasing its [`balanceOf`](#balanceof) by -1. +This will also clear all the operators allowed to transfer the `tokenId`. +The owner of the `tokenId` will be notified about the `tokenId` being transferred through its LSP1 [`universalReceiver`](#universalreceiver) +function, if it is a contract that supports the LSP1 interface. Its [`universalReceiver`](#universalreceiver) function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as the `to` address. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------------------------------------------------------------------------------------- | +| `tokenId` | `bytes32` | The token to burn. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the LSP1 hook on the token owner's address. | + +
+ +### \_transfer + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender/recipient via LSP1**. + +::: + +:::danger + +This internal function does not check if the sender is authorized or not to operate on the `tokenId`. + +::: + +```solidity +function _transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes data +) internal nonpayable; +``` + +Change the owner of the `tokenId` from `from` to `to`. +Both the sender and recipient will be notified of the `tokenId` being transferred through their LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The sender address. | +| `to` | `address` | @param tokenId The token to transfer. | +| `tokenId` | `bytes32` | The token to transfer. | +| `force` | `bool` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. | + +
+ +### \_setDataForTokenId + +```solidity +function _setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes dataValue +) internal nonpayable; +``` + +Sets data for a specific `tokenId` and `dataKey` in the ERC725Y storage +The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + +
+ +**Emitted events:** + +- [`TokenIdDataChanged`](#tokeniddatachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### \_getDataForTokenId + +```solidity +function _getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey +) internal view returns (bytes dataValues); +``` + +Retrieves data for a specific `tokenId` and `dataKey` from the ERC725Y storage +The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to retrieve. | + +#### Returns + +| Name | Type | Description | +| ------------ | :-----: | ----------------------------------------------------------------- | +| `dataValues` | `bytes` | The data value associated with the given `tokenId` and `dataKey`. | + +
+ +### \_beforeTokenTransfer + +```solidity +function _beforeTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes data +) internal nonpayable; +``` + +Hook that is called before any token transfer, including minting and burning. +Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `from` | `address` | The sender address | +| `to` | `address` | @param tokenId The tokenId to transfer | +| `tokenId` | `bytes32` | The tokenId to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_afterTokenTransfer + +```solidity +function _afterTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes data +) internal nonpayable; +``` + +Hook that is called after any token transfer, including minting and burning. +Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `from` | `address` | The sender address | +| `to` | `address` | @param tokenId The tokenId to transfer | +| `tokenId` | `bytes32` | The tokenId to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_notifyTokenOperator + +```solidity +function _notifyTokenOperator( + address operator, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the operator `operator` about the `tokenId` being authorized. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. +If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `operator` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `operator` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenSender + +```solidity +function _notifyTokenSender(address from, bytes lsp1Data) internal nonpayable; +``` + +Attempt to notify the token sender `from` about the `tokenId` being transferred. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. +If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `from` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `from` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenReceiver + +```solidity +function _notifyTokenReceiver( + address to, + bool force, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the token receiver `to` about the `tokenId` being received. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. +If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + +- if `force` is set to `true`, nothing will happen and no notification will be sent. + +- if `force` is set to `false, the transaction will revert. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | --------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `lsp1Data` | `bytes` | The data to be sent to the `to` address in the `universalReceiver(...)` call. | + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +
+ +### \_fallbackLSP17Extendable + +:::info + +The LSP8 Token contract should not hold any native tokens. Any native tokens received by the contract +will be forwarded to the extension address mapped to the selector from `msg.sig`. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call with the received value to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the address(0) will be returned. +We will always forward the value to the extension, as the LSP8 contract is not supposed to hold any native tokens. +Reverts if there is no extension for the function being called. +If there is an extension for the function selector being called, it calls the extension with the +CALL opcode, passing the [`msg.data`](#msg.data) appended with the 20 bytes of the [`msg.sender`](#msg.sender) and +32 bytes of the [`msg.value`](#msg.value) + +
+ +## Events + +### DataChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#datachanged) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### OperatorAuthorizationChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#operatorauthorizationchanged) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OperatorAuthorizationChanged(address,address,bytes32,bytes)` +- Event topic hash: `0x1b1b58aa2ec0cec2228b2d37124556d41f5a1f7b12f089171f896cc236671215` + +::: + +```solidity +event OperatorAuthorizationChanged( + address indexed operator, + address indexed tokenOwner, + bytes32 indexed tokenId, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` enables `operator` to transfer or burn the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address authorized as an operator. | +| `tokenOwner` **`indexed`** | `address` | The owner of the `tokenId`. | +| `tokenId` **`indexed`** | `bytes32` | The tokenId `operator` address has access on behalf of `tokenOwner`. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OperatorRevoked + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#operatorrevoked) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OperatorRevoked(address,address,bytes32,bool,bytes)` +- Event topic hash: `0xc78cd419d6136f9f1c1c6aec1d3fae098cffaf8bc86314a8f2685e32fe574e3c` + +::: + +```solidity +event OperatorRevoked( + address indexed operator, + address indexed tokenOwner, + bytes32 indexed tokenId, + bool notified, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` disables `operator` to transfer or burn `tokenId` on its behalf. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ---------------------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address revoked from the operator array ([`getOperatorsOf`](#getoperatorsof)). | +| `tokenOwner` **`indexed`** | `address` | The owner of the `tokenId`. | +| `tokenId` **`indexed`** | `bytes32` | The tokenId `operator` is revoked from operating on. | +| `notified` | `bool` | Bool indicating whether the operator has been notified or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownershiptransferred) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### TokenIdDataChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokeniddatachanged) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `TokenIdDataChanged(bytes32,bytes32,bytes)` +- Event topic hash: `0xa6e4251f855f750545fe414f120db91c76b88def14d120969e5bb2d3f05debbb` + +::: + +```solidity +event TokenIdDataChanged( + bytes32 indexed tokenId, + bytes32 indexed dataKey, + bytes dataValue +); +``` + +Emitted when setting data for `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `tokenId` **`indexed`** | `bytes32` | The tokenId which data is set for. | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### Transfer + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transfer) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `Transfer(address,address,address,bytes32,bool,bytes)` +- Event topic hash: `0xb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf` + +::: + +```solidity +event Transfer( + address operator, + address indexed from, + address indexed to, + bytes32 indexed tokenId, + bool force, + bytes data +); +``` + +Emitted when `tokenId` token is transferred from the `from` to the `to` address. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------- | +| `operator` | `address` | The address of operator that sent the `tokenId` | +| `from` **`indexed`** | `address` | The previous owner of the `tokenId` | +| `to` **`indexed`** | `address` | The new owner of `tokenId` | +| `tokenId` **`indexed`** | `bytes32` | The tokenId that was transferred | +| `force` | `bool` | If the token transfer enforces the `to` recipient address to be a contract that implements the LSP1 standard or not. | +| `data` | `bytes` | Any additional data the caller included by the caller during the transfer, and sent in the hooks to the `from` and `to` addresses. | + +
+ +## Errors + +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### InvalidExtensionAddress + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#invalidextensionaddress) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `InvalidExtensionAddress(bytes)` +- Error hash: `0x42bfe79f` + +::: + +```solidity +error InvalidExtensionAddress(bytes storedData); +``` + +reverts when the bytes retrieved from the LSP17 data key is not a valid address (not 20 bytes) + +#### Parameters + +| Name | Type | Description | +| ------------ | :-----: | ----------- | +| `storedData` | `bytes` | - | + +
+ +### InvalidFunctionSelector + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#invalidfunctionselector) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `InvalidFunctionSelector(bytes)` +- Error hash: `0xe5099ee3` + +::: + +```solidity +error InvalidFunctionSelector(bytes data); +``` + +reverts when the contract is called with a function selector not valid (less than 4 bytes of data) + +#### Parameters + +| Name | Type | Description | +| ------ | :-----: | ----------- | +| `data` | `bytes` | - | + +
+ +### LSP4TokenNameNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokennamenoteditable) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenNameNotEditable()` +- Error hash: `0x85c169bd` + +::: + +```solidity +error LSP4TokenNameNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenName` after the digital asset contract has been deployed / initialized. The `LSP4TokenName` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenSymbolNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokensymbolnoteditable) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenSymbolNotEditable()` +- Error hash: `0x76755b38` + +::: + +```solidity +error LSP4TokenSymbolNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenSymbol` after the digital asset contract has been deployed / initialized. The `LSP4TokenSymbol` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenTypeNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokentypenoteditable) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenTypeNotEditable()` +- Error hash: `0x4ef6d7fb` + +::: + +```solidity +error LSP4TokenTypeNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenType` after the digital asset contract has been deployed / initialized. The `LSP4TokenType` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor / initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP8BatchCallFailed + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8batchcallfailed) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8BatchCallFailed(uint256)` +- Error hash: `0x234eb819` + +::: + +```solidity +error LSP8BatchCallFailed(uint256 callIndex); +``` + +_Batch call failed._ + +Reverts when a batch call failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ----------- | +| `callIndex` | `uint256` | - | + +
+ +### LSP8CannotSendToAddressZero + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cannotsendtoaddresszero) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CannotSendToAddressZero()` +- Error hash: `0x24ecef4d` + +::: + +```solidity +error LSP8CannotSendToAddressZero(); +``` + +Reverts when trying to send token to the zero address. + +
+ +### LSP8CannotUseAddressZeroAsOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cannotuseaddresszeroasoperator) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CannotUseAddressZeroAsOperator()` +- Error hash: `0x9577b8b3` + +::: + +```solidity +error LSP8CannotUseAddressZeroAsOperator(); +``` + +Reverts when trying to set the zero address as an operator. + +
+ +### LSP8CappedSupplyCannotMintOverCap + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cappedsupplycannotmintovercap) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CappedSupplyCannotMintOverCap()` +- Error hash: `0xe8ba2291` + +::: + +```solidity +error LSP8CappedSupplyCannotMintOverCap(); +``` + +_Cannot mint anymore as total supply reached the maximum cap._ + +Reverts when trying to mint tokens but the [`totalSupply`](#totalsupply) has reached the maximum [`tokenSupplyCap`](#tokensupplycap). + +
+ +### LSP8CappedSupplyRequired + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cappedsupplyrequired) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CappedSupplyRequired()` +- Error hash: `0x38d9fc30` + +::: + +```solidity +error LSP8CappedSupplyRequired(); +``` + +_The `tokenSupplyCap` must be set and cannot be `0`._ + +Reverts when setting `0` for the [`tokenSupplyCap`](#tokensupplycap). The max token supply MUST be set to a number greater than 0. + +
+ +### LSP8InvalidTransferBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8invalidtransferbatch) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8InvalidTransferBatch()` +- Error hash: `0x93a83119` + +::: + +```solidity +error LSP8InvalidTransferBatch(); +``` + +Reverts when the parameters used for `transferBatch` have different lengths. + +
+ +### LSP8NonExistentTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nonexistenttokenid) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NonExistentTokenId(bytes32)` +- Error hash: `0xae8f9a36` + +::: + +```solidity +error LSP8NonExistentTokenId(bytes32 tokenId); +``` + +Reverts when `tokenId` has not been minted. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8NonExistingOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nonexistingoperator) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NonExistingOperator(address,bytes32)` +- Error hash: `0x4aa31a8c` + +::: + +```solidity +error LSP8NonExistingOperator(address operator, bytes32 tokenId); +``` + +Reverts when `operator` is not an operator for the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8NotTokenOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nottokenoperator) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotTokenOperator(bytes32,address)` +- Error hash: `0x1294d2a9` + +::: + +```solidity +error LSP8NotTokenOperator(bytes32 tokenId, address caller); +``` + +Reverts when `caller` is not an allowed operator for `tokenId`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | +| `caller` | `address` | - | + +
+ +### LSP8NotTokenOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nottokenowner) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotTokenOwner(address,bytes32,address)` +- Error hash: `0x5b271ea2` + +::: + +```solidity +error LSP8NotTokenOwner(address tokenOwner, bytes32 tokenId, address caller); +``` + +Reverts when `caller` is not the `tokenOwner` of the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `tokenOwner` | `address` | - | +| `tokenId` | `bytes32` | - | +| `caller` | `address` | - | + +
+ +### LSP8NotifyTokenReceiverContractMissingLSP1Interface + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8notifytokenreceivercontractmissinglsp1interface) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotifyTokenReceiverContractMissingLSP1Interface(address)` +- Error hash: `0x4349776d` + +::: + +```solidity +error LSP8NotifyTokenReceiverContractMissingLSP1Interface( + address tokenReceiver +); +``` + +Reverts if the `tokenReceiver` does not implement LSP1 when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP8NotifyTokenReceiverIsEOA + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8notifytokenreceiveriseoa) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotifyTokenReceiverIsEOA(address)` +- Error hash: `0x03173137` + +::: + +```solidity +error LSP8NotifyTokenReceiverIsEOA(address tokenReceiver); +``` + +Reverts if the `tokenReceiver` is an EOA when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP8OperatorAlreadyAuthorized + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8operatoralreadyauthorized) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8OperatorAlreadyAuthorized(address,bytes32)` +- Error hash: `0xa7626b68` + +::: + +```solidity +error LSP8OperatorAlreadyAuthorized(address operator, bytes32 tokenId); +``` + +Reverts when `operator` is already authorized for the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8RevokeOperatorNotAuthorized + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8revokeoperatornotauthorized) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8RevokeOperatorNotAuthorized(address,address,bytes32)` +- Error hash: `0x760b5acd` + +::: + +```solidity +error LSP8RevokeOperatorNotAuthorized( + address caller, + address tokenOwner, + bytes32 tokenId +); +``` + +Reverts when the call to revoke operator is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8TokenContractCannotHoldValue + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokencontractcannotholdvalue) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenContractCannotHoldValue()` +- Error hash: `0x61f49442` + +::: + +```solidity +error LSP8TokenContractCannotHoldValue(); +``` + +_LSP8 contract cannot receive native tokens._ + +Error occurs when sending native tokens to the LSP8 contract without sending any data. E.g. Sending value without passing a bytes4 function selector to call a LSP17 Extension. + +
+ +### LSP8TokenIdFormatNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidformatnoteditable) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdFormatNotEditable()` +- Error hash: `0x3664800a` + +::: + +```solidity +error LSP8TokenIdFormatNotEditable(); +``` + +Reverts when trying to edit the data key `LSP8TokenIdFormat` after the identifiable digital asset contract has been deployed. The `LSP8TokenIdFormat` data key is located inside the ERC725Y Data key-value store of the identifiable digital asset contract. It can be set only once inside the constructor/initializer when the identifiable digital asset contract is being deployed. + +
+ +### LSP8TokenIdsDataEmptyArray + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidsdataemptyarray) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdsDataEmptyArray()` +- Error hash: `0x80c98305` + +::: + +```solidity +error LSP8TokenIdsDataEmptyArray(); +``` + +Reverts when empty arrays is passed to the function + +
+ +### LSP8TokenIdsDataLengthMismatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidsdatalengthmismatch) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdsDataLengthMismatch()` +- Error hash: `0x2fa71dfe` + +::: + +```solidity +error LSP8TokenIdsDataLengthMismatch(); +``` + +Reverts when the length of the token IDs data arrays is not equal + +
+ +### LSP8TokenOwnerCannotBeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenownercannotbeoperator) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenOwnerCannotBeOperator()` +- Error hash: `0x89fdad62` + +::: + +```solidity +error LSP8TokenOwnerCannotBeOperator(); +``` + +Reverts when trying to authorize or revoke the token's owner as an operator. + +
+ +### LSP8TokenOwnerChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenownerchanged) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenOwnerChanged(bytes32,address,address)` +- Error hash: `0x5a9c31d3` + +::: + +```solidity +error LSP8TokenOwnerChanged( + bytes32 tokenId, + address oldOwner, + address newOwner +); +``` + +Reverts when the token owner changed inside the [`_beforeTokenTransfer`](#_beforetokentransfer) hook. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | +| `oldOwner` | `address` | - | +| `newOwner` | `address` | - | + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownablecallernottheowner) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
+ +### OwnableCannotSetZeroAddressAsOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownablecannotsetzeroaddressasowner) +- Solidity implementation: [`LSP8CappedSupply.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `OwnableCannotSetZeroAddressAsOwner()` +- Error hash: `0x1ad8836c` + +::: + +```solidity +error OwnableCannotSetZeroAddressAsOwner(); +``` + +Reverts when trying to set `address(0)` as the contract owner when deploying the contract, initializing it or transferring ownership of the contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Enumerable.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Enumerable.md new file mode 100644 index 000000000..37095361c --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Enumerable.md @@ -0,0 +1,2232 @@ + + + +# LSP8Enumerable + +:::info Standard Specifications + +[`LSP-8-IdentifiableDigitalAsset`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md) + +::: +:::info Solidity implementation + +[`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +LSP8 extension that enables to enumerate over all the `tokenIds` ever minted. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### fallback + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#fallback) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. + +
+ +### receive + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#receive) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +receive() external payable; +``` + +_LSP8 contract cannot receive native tokens._ + +Reverts whenever someone tries to send native tokens to a LSP8 contract. + +
+ +### authorizeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#authorizeoperator) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `authorizeOperator(address,bytes32,bytes)` +- Function selector: `0x86a10ddd` + +::: + +```solidity +function authorizeOperator( + address operator, + bytes32 tokenId, + bytes operatorNotificationData +) external nonpayable; +``` + +Allow an `operator` address to transfer or burn a specific `tokenId` on behalf of its token owner. See [`isOperatorFor`](#isoperatorfor). Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------- | +| `operator` | `address` | The address to authorize as an operator. | +| `tokenId` | `bytes32` | The token ID operator has access to. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### balanceOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#balanceof) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `balanceOf(address)` +- Function selector: `0x70a08231` + +::: + +```solidity +function balanceOf(address tokenOwner) external view returns (uint256); +``` + +Get the number of token IDs owned by `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------------------- | +| `tokenOwner` | `address` | The address to query \* | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------------------- | +| `0` | `uint256` | The total number of token IDs that `tokenOwner` owns. | + +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#batchcalls) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdata) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatabatch) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### getDataBatchForTokenIds + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatabatchfortokenids) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataBatchForTokenIds(bytes32[],bytes32[])` +- Function selector: `0x1d26fce6` + +::: + +```solidity +function getDataBatchForTokenIds( + bytes32[] tokenIds, + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Retrieves data in batch for multiple `tokenId` and `dataKey` pairs._ + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ----------------------------------------------------- | +| `tokenIds` | `bytes32[]` | An array of token IDs. | +| `dataKeys` | `bytes32[]` | An array of data keys corresponding to the token IDs. | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------------------------------- | +| `dataValues` | `bytes[]` | An array of data values for each pair of `tokenId` and `dataKey`. | + +
+ +### getDataForTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatafortokenid) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataForTokenId(bytes32,bytes32)` +- Function selector: `0x16e023b3` + +::: + +```solidity +function getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey +) external view returns (bytes dataValue); +``` + +_Retrieves data for a specific `tokenId` and `dataKey`._ + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to retrieve. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------- | +| `dataValue` | `bytes` | The data value associated with the given `tokenId` and `dataKey`. | + +
+ +### getOperatorsOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getoperatorsof) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getOperatorsOf(bytes32)` +- Function selector: `0x49a6078d` + +::: + +```solidity +function getOperatorsOf(bytes32 tokenId) external view returns (address[]); +``` + +Returns all `operator` addresses that are allowed to transfer or burn a specific `tokenId` on behalf of its owner. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `tokenId` | `bytes32` | The token ID to get the operators for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ------------------------------------------------------------------------------------------------------------ | +| `0` | `address[]` | An array of operators allowed to transfer or burn a specific `tokenId`. Requirements - `tokenId` must exist. | + +
+ +### isOperatorFor + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#isoperatorfor) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `isOperatorFor(address,bytes32)` +- Function selector: `0x2a3654a4` + +::: + +```solidity +function isOperatorFor( + address operator, + bytes32 tokenId +) external view returns (bool); +``` + +Returns whether `operator` address is an operator for a given `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------- | +| `operator` | `address` | The address to query operator status for. | +| `tokenId` | `bytes32` | The token ID to check if `operator` is allowed to operate on. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | --------------------------------------------------------------------- | +| `0` | `bool` | `true` if `operator` is an operator for `tokenId`, `false` otherwise. | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#owner) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#renounceownership) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner. + +
+ +### revokeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#revokeoperator) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `revokeOperator(address,bytes32,bool,bytes)` +- Function selector: `0xdb8c9663` + +::: + +```solidity +function revokeOperator( + address operator, + bytes32 tokenId, + bool notify, + bytes operatorNotificationData +) external nonpayable; +``` + +Remove access of `operator` for a given `tokenId`, disallowing it to transfer `tokenId` on behalf of its owner. See also [`isOperatorFor`](#isoperatorfor). + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------------------------- | +| `operator` | `address` | The address to revoke as an operator. | +| `tokenId` | `bytes32` | The tokenId `operator` is revoked from operating on. | +| `notify` | `bool` | Boolean indicating whether to notify the operator or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### setData + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdata) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner). + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatabatch) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner) of the contract. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event **for each data key/value pair set**. + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### setDataBatchForTokenIds + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatabatchfortokenids) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataBatchForTokenIds(bytes32[],bytes32[],bytes[])` +- Function selector: `0xbe9f0e6f` + +::: + +```solidity +function setDataBatchForTokenIds( + bytes32[] tokenIds, + bytes32[] dataKeys, + bytes[] dataValues +) external nonpayable; +``` + +_Sets data in batch for multiple `tokenId` and `dataKey` pairs._ + +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ----------------------------------------------------- | +| `tokenIds` | `bytes32[]` | An array of token IDs. | +| `dataKeys` | `bytes32[]` | An array of data keys corresponding to the token IDs. | +| `dataValues` | `bytes[]` | An array of values to set for the given data keys. | + +
+ +### setDataForTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatafortokenid) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataForTokenId(bytes32,bytes32,bytes)` +- Function selector: `0xd6c1407c` + +::: + +```solidity +function setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes dataValue +) external nonpayable; +``` + +_Sets data for a specific `tokenId` and `dataKey`._ + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#supportsinterface) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### tokenAt + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenat) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenAt(uint256)` +- Function selector: `0x92a91a3a` + +::: + +```solidity +function tokenAt(uint256 index) external view returns (bytes32); +``` + +_Retrieving the `tokenId` for `msg.sender` located in its list at index number `index`._ + +Returns a token id at index. See [`totalSupply`](#totalsupply) to get total number of minted tokens. + +#### Parameters + +| Name | Type | Description | +| ------- | :-------: | -------------------------------------------------------- | +| `index` | `uint256` | The index to search to search in the enumerable mapping. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------- | +| `0` | `bytes32` | TokenId or `bytes32(0)` if no tokenId exist at `index`. | + +
+ +### tokenIdsOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenidsof) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenIdsOf(address)` +- Function selector: `0xa3b261f2` + +::: + +```solidity +function tokenIdsOf(address tokenOwner) external view returns (bytes32[]); +``` + +Returns the list of token IDs that the `tokenOwner` address owns. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ---------------------------------------------------------- | +| `tokenOwner` | `address` | The address that we want to get the list of token IDs for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ------------------------------------------------------- | +| `0` | `bytes32[]` | An array of `bytes32[] tokenIds` owned by `tokenOwner`. | + +
+ +### tokenOwnerOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenownerof) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenOwnerOf(bytes32)` +- Function selector: `0x217b2270` + +::: + +```solidity +function tokenOwnerOf(bytes32 tokenId) external view returns (address); +``` + +Returns the address that owns a given `tokenId`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------ | +| `tokenId` | `bytes32` | The token ID to query the owner for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------- | +| `0` | `address` | The owner address of the given `tokenId`. | + +
+ +### totalSupply + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#totalsupply) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `totalSupply()` +- Function selector: `0x18160ddd` + +::: + +```solidity +function totalSupply() external view returns (uint256); +``` + +Returns the number of existing tokens that have been minted in this contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------ | +| `0` | `uint256` | The number of existing tokens. | + +
+ +### transfer + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transfer) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transfer(address,address,bytes32,bool,bytes)` +- Function selector: `0x511b6952` + +::: + +```solidity +function transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes data +) external nonpayable; +``` + +Transfer a given `tokenId` token from the `from` address to the `to` address. If operators are set for a specific `tokenId`, all the operators are revoked after the tokenId have been transferred. The `force` parameter MUST be set to `true` when transferring tokens to Externally Owned Accounts (EOAs) or contracts that do not implement the LSP1 standard. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address that owns the given `tokenId`. | +| `to` | `address` | The address that will receive the `tokenId`. | +| `tokenId` | `bytes32` | The token ID to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | + +
+ +### transferBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transferbatch) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transferBatch(address[],address[],bytes32[],bool[],bytes[])` +- Function selector: `0x7e87632c` + +::: + +```solidity +function transferBatch( + address[] from, + address[] to, + bytes32[] tokenId, + bool[] force, + bytes[] data +) external nonpayable; +``` + +Transfers multiple tokens at once based on the arrays of `from`, `to` and `tokenId`. If any transfer fails, the whole call will revert. + +#### Parameters + +| Name | Type | Description | +| --------- | :---------: | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address[]` | An array of sending addresses. | +| `to` | `address[]` | An array of recipient addresses. | +| `tokenId` | `bytes32[]` | An array of token IDs to transfer. | +| `force` | `bool[]` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard and not revert. | +| `data` | `bytes[]` | Any additional data the caller wants included in the emitted event, and sent in the hooks to the `from` and `to` addresses. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transferownership) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `newOwner` | `address` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +The ERC725Y data key `_LSP8_TOKENID_FORMAT_KEY` cannot be changed +once the identifiable digital asset contract has been deployed. + +
+ +### \_isOperatorOrOwner + +```solidity +function _isOperatorOrOwner( + address caller, + bytes32 tokenId +) internal view returns (bool); +``` + +verifies if the `caller` is operator or owner for the `tokenId` + +#### Returns + +| Name | Type | Description | +| ---- | :----: | -------------------------------------------- | +| `0` | `bool` | true if `caller` is either operator or owner | + +
+ +### \_revokeOperator + +```solidity +function _revokeOperator( + address operator, + address tokenOwner, + bytes32 tokenId, + bool notified, + bytes operatorNotificationData +) internal nonpayable; +``` + +removes `operator` from the list of operators for the `tokenId` + +
+ +### \_clearOperators + +```solidity +function _clearOperators( + address tokenOwner, + bytes32 tokenId +) internal nonpayable; +``` + +revoke all the current operators for a specific `tokenId` token which belongs to `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ------------------------------------------------- | +| `tokenOwner` | `address` | The address that is the owner of the `tokenId`. | +| `tokenId` | `bytes32` | The token to remove the associated operators for. | + +
+ +### \_exists + +```solidity +function _exists(bytes32 tokenId) internal view returns (bool); +``` + +Returns whether `tokenId` exists. +Tokens start existing when they are minted ([`_mint`](#_mint)), and stop existing when they are burned ([`_burn`](#_burn)). + +
+ +### \_existsOrError + +```solidity +function _existsOrError(bytes32 tokenId) internal view; +``` + +When `tokenId` does not exist then revert with an error. + +
+ +### \_mint + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the recipient via LSP1**. + +::: + +```solidity +function _mint( + address to, + bytes32 tokenId, + bool force, + bytes data +) internal nonpayable; +``` + +Create `tokenId` by minting it and transfers it to `to`. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as `from` address. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------- | +| `to` | `address` | @param tokenId The token ID to create (= mint). | +| `tokenId` | `bytes32` | The token ID to create (= mint). | +| `force` | `bool` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hook of the `to` address. | + +
+ +### \_burn + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender via LSP1**. + +::: + +:::tip Hint + +In dApps, you can know which addresses are burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + +::: + +```solidity +function _burn(bytes32 tokenId, bytes data) internal nonpayable; +``` + +Burn a specific `tokenId`, removing the `tokenId` from the [`tokenIdsOf`](#tokenidsof) the caller and decreasing its [`balanceOf`](#balanceof) by -1. +This will also clear all the operators allowed to transfer the `tokenId`. +The owner of the `tokenId` will be notified about the `tokenId` being transferred through its LSP1 [`universalReceiver`](#universalreceiver) +function, if it is a contract that supports the LSP1 interface. Its [`universalReceiver`](#universalreceiver) function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as the `to` address. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------------------------------------------------------------------------------------- | +| `tokenId` | `bytes32` | The token to burn. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the LSP1 hook on the token owner's address. | + +
+ +### \_transfer + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender/recipient via LSP1**. + +::: + +:::danger + +This internal function does not check if the sender is authorized or not to operate on the `tokenId`. + +::: + +```solidity +function _transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes data +) internal nonpayable; +``` + +Change the owner of the `tokenId` from `from` to `to`. +Both the sender and recipient will be notified of the `tokenId` being transferred through their LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The sender address. | +| `to` | `address` | @param tokenId The token to transfer. | +| `tokenId` | `bytes32` | The token to transfer. | +| `force` | `bool` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. | + +
+ +### \_setDataForTokenId + +```solidity +function _setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes dataValue +) internal nonpayable; +``` + +Sets data for a specific `tokenId` and `dataKey` in the ERC725Y storage +The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + +
+ +**Emitted events:** + +- [`TokenIdDataChanged`](#tokeniddatachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### \_getDataForTokenId + +```solidity +function _getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey +) internal view returns (bytes dataValues); +``` + +Retrieves data for a specific `tokenId` and `dataKey` from the ERC725Y storage +The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to retrieve. | + +#### Returns + +| Name | Type | Description | +| ------------ | :-----: | ----------------------------------------------------------------- | +| `dataValues` | `bytes` | The data value associated with the given `tokenId` and `dataKey`. | + +
+ +### \_beforeTokenTransfer + +```solidity +function _beforeTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes data +) internal nonpayable; +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------- | +| `from` | `address` | The address sending the `tokenId` (`address(0)` when `tokenId` is being minted). | +| `to` | `address` | @param tokenId The bytes32 identifier of the token being transferred. | +| `tokenId` | `bytes32` | The bytes32 identifier of the token being transferred. | +| `data` | `bytes` | The data sent alongside the the token transfer. | + +
+ +### \_afterTokenTransfer + +```solidity +function _afterTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes data +) internal nonpayable; +``` + +Hook that is called after any token transfer, including minting and burning. +Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `from` | `address` | The sender address | +| `to` | `address` | @param tokenId The tokenId to transfer | +| `tokenId` | `bytes32` | The tokenId to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_notifyTokenOperator + +```solidity +function _notifyTokenOperator( + address operator, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the operator `operator` about the `tokenId` being authorized. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. +If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `operator` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `operator` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenSender + +```solidity +function _notifyTokenSender(address from, bytes lsp1Data) internal nonpayable; +``` + +Attempt to notify the token sender `from` about the `tokenId` being transferred. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. +If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `from` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `from` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenReceiver + +```solidity +function _notifyTokenReceiver( + address to, + bool force, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the token receiver `to` about the `tokenId` being received. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. +If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + +- if `force` is set to `true`, nothing will happen and no notification will be sent. + +- if `force` is set to `false, the transaction will revert. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | --------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `lsp1Data` | `bytes` | The data to be sent to the `to` address in the `universalReceiver(...)` call. | + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +
+ +### \_fallbackLSP17Extendable + +:::info + +The LSP8 Token contract should not hold any native tokens. Any native tokens received by the contract +will be forwarded to the extension address mapped to the selector from `msg.sig`. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call with the received value to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the address(0) will be returned. +We will always forward the value to the extension, as the LSP8 contract is not supposed to hold any native tokens. +Reverts if there is no extension for the function being called. +If there is an extension for the function selector being called, it calls the extension with the +CALL opcode, passing the [`msg.data`](#msg.data) appended with the 20 bytes of the [`msg.sender`](#msg.sender) and +32 bytes of the [`msg.value`](#msg.value) + +
+ +## Events + +### DataChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#datachanged) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### OperatorAuthorizationChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#operatorauthorizationchanged) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OperatorAuthorizationChanged(address,address,bytes32,bytes)` +- Event topic hash: `0x1b1b58aa2ec0cec2228b2d37124556d41f5a1f7b12f089171f896cc236671215` + +::: + +```solidity +event OperatorAuthorizationChanged( + address indexed operator, + address indexed tokenOwner, + bytes32 indexed tokenId, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` enables `operator` to transfer or burn the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address authorized as an operator. | +| `tokenOwner` **`indexed`** | `address` | The owner of the `tokenId`. | +| `tokenId` **`indexed`** | `bytes32` | The tokenId `operator` address has access on behalf of `tokenOwner`. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OperatorRevoked + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#operatorrevoked) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OperatorRevoked(address,address,bytes32,bool,bytes)` +- Event topic hash: `0xc78cd419d6136f9f1c1c6aec1d3fae098cffaf8bc86314a8f2685e32fe574e3c` + +::: + +```solidity +event OperatorRevoked( + address indexed operator, + address indexed tokenOwner, + bytes32 indexed tokenId, + bool notified, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` disables `operator` to transfer or burn `tokenId` on its behalf. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ---------------------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address revoked from the operator array ([`getOperatorsOf`](#getoperatorsof)). | +| `tokenOwner` **`indexed`** | `address` | The owner of the `tokenId`. | +| `tokenId` **`indexed`** | `bytes32` | The tokenId `operator` is revoked from operating on. | +| `notified` | `bool` | Bool indicating whether the operator has been notified or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownershiptransferred) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### TokenIdDataChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokeniddatachanged) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `TokenIdDataChanged(bytes32,bytes32,bytes)` +- Event topic hash: `0xa6e4251f855f750545fe414f120db91c76b88def14d120969e5bb2d3f05debbb` + +::: + +```solidity +event TokenIdDataChanged( + bytes32 indexed tokenId, + bytes32 indexed dataKey, + bytes dataValue +); +``` + +Emitted when setting data for `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `tokenId` **`indexed`** | `bytes32` | The tokenId which data is set for. | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### Transfer + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transfer) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `Transfer(address,address,address,bytes32,bool,bytes)` +- Event topic hash: `0xb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf` + +::: + +```solidity +event Transfer( + address operator, + address indexed from, + address indexed to, + bytes32 indexed tokenId, + bool force, + bytes data +); +``` + +Emitted when `tokenId` token is transferred from the `from` to the `to` address. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------- | +| `operator` | `address` | The address of operator that sent the `tokenId` | +| `from` **`indexed`** | `address` | The previous owner of the `tokenId` | +| `to` **`indexed`** | `address` | The new owner of `tokenId` | +| `tokenId` **`indexed`** | `bytes32` | The tokenId that was transferred | +| `force` | `bool` | If the token transfer enforces the `to` recipient address to be a contract that implements the LSP1 standard or not. | +| `data` | `bytes` | Any additional data the caller included by the caller during the transfer, and sent in the hooks to the `from` and `to` addresses. | + +
+ +## Errors + +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### InvalidExtensionAddress + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#invalidextensionaddress) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `InvalidExtensionAddress(bytes)` +- Error hash: `0x42bfe79f` + +::: + +```solidity +error InvalidExtensionAddress(bytes storedData); +``` + +reverts when the bytes retrieved from the LSP17 data key is not a valid address (not 20 bytes) + +#### Parameters + +| Name | Type | Description | +| ------------ | :-----: | ----------- | +| `storedData` | `bytes` | - | + +
+ +### InvalidFunctionSelector + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#invalidfunctionselector) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `InvalidFunctionSelector(bytes)` +- Error hash: `0xe5099ee3` + +::: + +```solidity +error InvalidFunctionSelector(bytes data); +``` + +reverts when the contract is called with a function selector not valid (less than 4 bytes of data) + +#### Parameters + +| Name | Type | Description | +| ------ | :-----: | ----------- | +| `data` | `bytes` | - | + +
+ +### LSP4TokenNameNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokennamenoteditable) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenNameNotEditable()` +- Error hash: `0x85c169bd` + +::: + +```solidity +error LSP4TokenNameNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenName` after the digital asset contract has been deployed / initialized. The `LSP4TokenName` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenSymbolNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokensymbolnoteditable) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenSymbolNotEditable()` +- Error hash: `0x76755b38` + +::: + +```solidity +error LSP4TokenSymbolNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenSymbol` after the digital asset contract has been deployed / initialized. The `LSP4TokenSymbol` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenTypeNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokentypenoteditable) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenTypeNotEditable()` +- Error hash: `0x4ef6d7fb` + +::: + +```solidity +error LSP4TokenTypeNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenType` after the digital asset contract has been deployed / initialized. The `LSP4TokenType` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor / initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP8BatchCallFailed + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8batchcallfailed) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8BatchCallFailed(uint256)` +- Error hash: `0x234eb819` + +::: + +```solidity +error LSP8BatchCallFailed(uint256 callIndex); +``` + +_Batch call failed._ + +Reverts when a batch call failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ----------- | +| `callIndex` | `uint256` | - | + +
+ +### LSP8CannotSendToAddressZero + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cannotsendtoaddresszero) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CannotSendToAddressZero()` +- Error hash: `0x24ecef4d` + +::: + +```solidity +error LSP8CannotSendToAddressZero(); +``` + +Reverts when trying to send token to the zero address. + +
+ +### LSP8CannotUseAddressZeroAsOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cannotuseaddresszeroasoperator) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CannotUseAddressZeroAsOperator()` +- Error hash: `0x9577b8b3` + +::: + +```solidity +error LSP8CannotUseAddressZeroAsOperator(); +``` + +Reverts when trying to set the zero address as an operator. + +
+ +### LSP8InvalidTransferBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8invalidtransferbatch) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8InvalidTransferBatch()` +- Error hash: `0x93a83119` + +::: + +```solidity +error LSP8InvalidTransferBatch(); +``` + +Reverts when the parameters used for `transferBatch` have different lengths. + +
+ +### LSP8NonExistentTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nonexistenttokenid) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NonExistentTokenId(bytes32)` +- Error hash: `0xae8f9a36` + +::: + +```solidity +error LSP8NonExistentTokenId(bytes32 tokenId); +``` + +Reverts when `tokenId` has not been minted. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8NonExistingOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nonexistingoperator) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NonExistingOperator(address,bytes32)` +- Error hash: `0x4aa31a8c` + +::: + +```solidity +error LSP8NonExistingOperator(address operator, bytes32 tokenId); +``` + +Reverts when `operator` is not an operator for the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8NotTokenOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nottokenoperator) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotTokenOperator(bytes32,address)` +- Error hash: `0x1294d2a9` + +::: + +```solidity +error LSP8NotTokenOperator(bytes32 tokenId, address caller); +``` + +Reverts when `caller` is not an allowed operator for `tokenId`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | +| `caller` | `address` | - | + +
+ +### LSP8NotTokenOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nottokenowner) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotTokenOwner(address,bytes32,address)` +- Error hash: `0x5b271ea2` + +::: + +```solidity +error LSP8NotTokenOwner(address tokenOwner, bytes32 tokenId, address caller); +``` + +Reverts when `caller` is not the `tokenOwner` of the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `tokenOwner` | `address` | - | +| `tokenId` | `bytes32` | - | +| `caller` | `address` | - | + +
+ +### LSP8NotifyTokenReceiverContractMissingLSP1Interface + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8notifytokenreceivercontractmissinglsp1interface) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotifyTokenReceiverContractMissingLSP1Interface(address)` +- Error hash: `0x4349776d` + +::: + +```solidity +error LSP8NotifyTokenReceiverContractMissingLSP1Interface( + address tokenReceiver +); +``` + +Reverts if the `tokenReceiver` does not implement LSP1 when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP8NotifyTokenReceiverIsEOA + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8notifytokenreceiveriseoa) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotifyTokenReceiverIsEOA(address)` +- Error hash: `0x03173137` + +::: + +```solidity +error LSP8NotifyTokenReceiverIsEOA(address tokenReceiver); +``` + +Reverts if the `tokenReceiver` is an EOA when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP8OperatorAlreadyAuthorized + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8operatoralreadyauthorized) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8OperatorAlreadyAuthorized(address,bytes32)` +- Error hash: `0xa7626b68` + +::: + +```solidity +error LSP8OperatorAlreadyAuthorized(address operator, bytes32 tokenId); +``` + +Reverts when `operator` is already authorized for the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8RevokeOperatorNotAuthorized + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8revokeoperatornotauthorized) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8RevokeOperatorNotAuthorized(address,address,bytes32)` +- Error hash: `0x760b5acd` + +::: + +```solidity +error LSP8RevokeOperatorNotAuthorized( + address caller, + address tokenOwner, + bytes32 tokenId +); +``` + +Reverts when the call to revoke operator is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8TokenContractCannotHoldValue + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokencontractcannotholdvalue) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenContractCannotHoldValue()` +- Error hash: `0x61f49442` + +::: + +```solidity +error LSP8TokenContractCannotHoldValue(); +``` + +_LSP8 contract cannot receive native tokens._ + +Error occurs when sending native tokens to the LSP8 contract without sending any data. E.g. Sending value without passing a bytes4 function selector to call a LSP17 Extension. + +
+ +### LSP8TokenIdFormatNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidformatnoteditable) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdFormatNotEditable()` +- Error hash: `0x3664800a` + +::: + +```solidity +error LSP8TokenIdFormatNotEditable(); +``` + +Reverts when trying to edit the data key `LSP8TokenIdFormat` after the identifiable digital asset contract has been deployed. The `LSP8TokenIdFormat` data key is located inside the ERC725Y Data key-value store of the identifiable digital asset contract. It can be set only once inside the constructor/initializer when the identifiable digital asset contract is being deployed. + +
+ +### LSP8TokenIdsDataEmptyArray + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidsdataemptyarray) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdsDataEmptyArray()` +- Error hash: `0x80c98305` + +::: + +```solidity +error LSP8TokenIdsDataEmptyArray(); +``` + +Reverts when empty arrays is passed to the function + +
+ +### LSP8TokenIdsDataLengthMismatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidsdatalengthmismatch) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdsDataLengthMismatch()` +- Error hash: `0x2fa71dfe` + +::: + +```solidity +error LSP8TokenIdsDataLengthMismatch(); +``` + +Reverts when the length of the token IDs data arrays is not equal + +
+ +### LSP8TokenOwnerCannotBeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenownercannotbeoperator) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenOwnerCannotBeOperator()` +- Error hash: `0x89fdad62` + +::: + +```solidity +error LSP8TokenOwnerCannotBeOperator(); +``` + +Reverts when trying to authorize or revoke the token's owner as an operator. + +
+ +### LSP8TokenOwnerChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenownerchanged) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenOwnerChanged(bytes32,address,address)` +- Error hash: `0x5a9c31d3` + +::: + +```solidity +error LSP8TokenOwnerChanged( + bytes32 tokenId, + address oldOwner, + address newOwner +); +``` + +Reverts when the token owner changed inside the [`_beforeTokenTransfer`](#_beforetokentransfer) hook. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | +| `oldOwner` | `address` | - | +| `newOwner` | `address` | - | + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownablecallernottheowner) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
+ +### OwnableCannotSetZeroAddressAsOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownablecannotsetzeroaddressasowner) +- Solidity implementation: [`LSP8Enumerable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `OwnableCannotSetZeroAddressAsOwner()` +- Error hash: `0x1ad8836c` + +::: + +```solidity +error OwnableCannotSetZeroAddressAsOwner(); +``` + +Reverts when trying to set `address(0)` as the contract owner when deploying the contract, initializing it or transferring ownership of the contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/presets/LSP8Mintable.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/presets/LSP8Mintable.md new file mode 100644 index 000000000..bdaaa1fce --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/presets/LSP8Mintable.md @@ -0,0 +1,2295 @@ + + + +# LSP8Mintable + +:::info Standard Specifications + +[`LSP-8-IdentifiableDigitalAsset`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md) + +::: +:::info Solidity implementation + +[`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +> LSP8IdentifiableDigitalAsset deployable preset contract with a public [`mint`](#mint) function callable only by the contract [`owner`](#owner). + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### constructor + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#constructor) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +constructor( + string name_, + string symbol_, + address newOwner_, + uint256 lsp4TokenType_, + uint256 lsp8TokenIdFormat_ +); +``` + +_Deploying a `LSP8Mintable` token contract with: token name = `name_`, token symbol = `symbol_`, and address `newOwner_` as the token contract owner._ + +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | ---------------------------------------------------------------------------------------------------- | +| `name_` | `string` | The name of the token. | +| `symbol_` | `string` | The symbol of the token. | +| `newOwner_` | `address` | The owner of the token contract. | +| `lsp4TokenType_` | `uint256` | The type of token this digital asset contract represents (`0` = Token, `1` = NFT, `2` = Collection). | +| `lsp8TokenIdFormat_` | `uint256` | The format of tokenIds (= NFTs) that this contract will create. | + +
+ +### fallback + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#fallback) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. + +
+ +### receive + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#receive) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) + +::: + +```solidity +receive() external payable; +``` + +_LSP8 contract cannot receive native tokens._ + +Reverts whenever someone tries to send native tokens to a LSP8 contract. + +
+ +### authorizeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#authorizeoperator) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `authorizeOperator(address,bytes32,bytes)` +- Function selector: `0x86a10ddd` + +::: + +```solidity +function authorizeOperator( + address operator, + bytes32 tokenId, + bytes operatorNotificationData +) external nonpayable; +``` + +Allow an `operator` address to transfer or burn a specific `tokenId` on behalf of its token owner. See [`isOperatorFor`](#isoperatorfor). Notify the operator based on the LSP1-UniversalReceiver standard + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ----------------------------------------------- | +| `operator` | `address` | The address to authorize as an operator. | +| `tokenId` | `bytes32` | The token ID operator has access to. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### balanceOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#balanceof) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `balanceOf(address)` +- Function selector: `0x70a08231` + +::: + +```solidity +function balanceOf(address tokenOwner) external view returns (uint256); +``` + +Get the number of token IDs owned by `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------------------- | +| `tokenOwner` | `address` | The address to query \* | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------------------- | +| `0` | `uint256` | The total number of token IDs that `tokenOwner` owns. | + +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#batchcalls) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdata) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatabatch) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### getDataBatchForTokenIds + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatabatchfortokenids) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataBatchForTokenIds(bytes32[],bytes32[])` +- Function selector: `0x1d26fce6` + +::: + +```solidity +function getDataBatchForTokenIds( + bytes32[] tokenIds, + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Retrieves data in batch for multiple `tokenId` and `dataKey` pairs._ + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ----------------------------------------------------- | +| `tokenIds` | `bytes32[]` | An array of token IDs. | +| `dataKeys` | `bytes32[]` | An array of data keys corresponding to the token IDs. | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------------------------------- | +| `dataValues` | `bytes[]` | An array of data values for each pair of `tokenId` and `dataKey`. | + +
+ +### getDataForTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatafortokenid) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getDataForTokenId(bytes32,bytes32)` +- Function selector: `0x16e023b3` + +::: + +```solidity +function getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey +) external view returns (bytes dataValue); +``` + +_Retrieves data for a specific `tokenId` and `dataKey`._ + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to retrieve. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------- | +| `dataValue` | `bytes` | The data value associated with the given `tokenId` and `dataKey`. | + +
+ +### getOperatorsOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getoperatorsof) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `getOperatorsOf(bytes32)` +- Function selector: `0x49a6078d` + +::: + +```solidity +function getOperatorsOf(bytes32 tokenId) external view returns (address[]); +``` + +Returns all `operator` addresses that are allowed to transfer or burn a specific `tokenId` on behalf of its owner. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `tokenId` | `bytes32` | The token ID to get the operators for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ------------------------------------------------------------------------------------------------------------ | +| `0` | `address[]` | An array of operators allowed to transfer or burn a specific `tokenId`. Requirements - `tokenId` must exist. | + +
+ +### isOperatorFor + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#isoperatorfor) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `isOperatorFor(address,bytes32)` +- Function selector: `0x2a3654a4` + +::: + +```solidity +function isOperatorFor( + address operator, + bytes32 tokenId +) external view returns (bool); +``` + +Returns whether `operator` address is an operator for a given `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------- | +| `operator` | `address` | The address to query operator status for. | +| `tokenId` | `bytes32` | The token ID to check if `operator` is allowed to operate on. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | --------------------------------------------------------------------- | +| `0` | `bool` | `true` if `operator` is an operator for `tokenId`, `false` otherwise. | + +
+ +### mint + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#mint) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `mint(address,bytes32,bool,bytes)` +- Function selector: `0xaf255b61` + +::: + +```solidity +function mint( + address to, + bytes32 tokenId, + bool force, + bytes data +) external nonpayable; +``` + +_Minting tokenId `tokenId` for address `to` with the additional data `data` (Note: allow non-LSP1 recipient is set to `force`)._ + +Public [`_mint`](#_mint) function only callable by the [`owner`](#owner). + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------ | +| `to` | `address` | The address that will receive the minted `tokenId`. | +| `tokenId` | `bytes32` | The tokenId to mint. | +| `force` | `bool` | Set to `false` to ensure that you are minting for a recipient that implements LSP1, `false` otherwise for forcing the minting. | +| `data` | `bytes` | Any addition data to be sent alongside the minting. | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#owner) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#renounceownership) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner. + +
+ +### revokeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#revokeoperator) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `revokeOperator(address,bytes32,bool,bytes)` +- Function selector: `0xdb8c9663` + +::: + +```solidity +function revokeOperator( + address operator, + bytes32 tokenId, + bool notify, + bytes operatorNotificationData +) external nonpayable; +``` + +Remove access of `operator` for a given `tokenId`, disallowing it to transfer `tokenId` on behalf of its owner. See also [`isOperatorFor`](#isoperatorfor). + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------------------------- | +| `operator` | `address` | The address to revoke as an operator. | +| `tokenId` | `bytes32` | The tokenId `operator` is revoked from operating on. | +| `notify` | `bool` | Boolean indicating whether to notify the operator or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### setData + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdata) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner). + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatabatch) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +:::caution Warning + +**Note for developers:** despite the fact that this function is set as `payable`, if the function is not intended to receive value (= native tokens), **an additional check should be implemented to ensure that `msg.value` sent was equal to 0**. + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- SHOULD only be callable by the [`owner`](#owner) of the contract. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event **for each data key/value pair set**. + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### setDataBatchForTokenIds + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatabatchfortokenids) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataBatchForTokenIds(bytes32[],bytes32[],bytes[])` +- Function selector: `0xbe9f0e6f` + +::: + +```solidity +function setDataBatchForTokenIds( + bytes32[] tokenIds, + bytes32[] dataKeys, + bytes[] dataValues +) external nonpayable; +``` + +_Sets data in batch for multiple `tokenId` and `dataKey` pairs._ + +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ----------------------------------------------------- | +| `tokenIds` | `bytes32[]` | An array of token IDs. | +| `dataKeys` | `bytes32[]` | An array of data keys corresponding to the token IDs. | +| `dataValues` | `bytes[]` | An array of values to set for the given data keys. | + +
+ +### setDataForTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#setdatafortokenid) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `setDataForTokenId(bytes32,bytes32,bytes)` +- Function selector: `0xd6c1407c` + +::: + +```solidity +function setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes dataValue +) external nonpayable; +``` + +_Sets data for a specific `tokenId` and `dataKey`._ + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#supportsinterface) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ----------- | +| `interfaceId` | `bytes4` | - | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ----------- | +| `0` | `bool` | - | + +
+ +### tokenIdsOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenidsof) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenIdsOf(address)` +- Function selector: `0xa3b261f2` + +::: + +```solidity +function tokenIdsOf(address tokenOwner) external view returns (bytes32[]); +``` + +Returns the list of token IDs that the `tokenOwner` address owns. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ---------------------------------------------------------- | +| `tokenOwner` | `address` | The address that we want to get the list of token IDs for. | + +#### Returns + +| Name | Type | Description | +| ---- | :---------: | ------------------------------------------------------- | +| `0` | `bytes32[]` | An array of `bytes32[] tokenIds` owned by `tokenOwner`. | + +
+ +### tokenOwnerOf + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokenownerof) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `tokenOwnerOf(bytes32)` +- Function selector: `0x217b2270` + +::: + +```solidity +function tokenOwnerOf(bytes32 tokenId) external view returns (address); +``` + +Returns the address that owns a given `tokenId`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------ | +| `tokenId` | `bytes32` | The token ID to query the owner for. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------- | +| `0` | `address` | The owner address of the given `tokenId`. | + +
+ +### totalSupply + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#totalsupply) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `totalSupply()` +- Function selector: `0x18160ddd` + +::: + +```solidity +function totalSupply() external view returns (uint256); +``` + +Returns the number of existing tokens that have been minted in this contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------ | +| `0` | `uint256` | The number of existing tokens. | + +
+ +### transfer + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transfer) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transfer(address,address,bytes32,bool,bytes)` +- Function selector: `0x511b6952` + +::: + +```solidity +function transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes data +) external nonpayable; +``` + +Transfer a given `tokenId` token from the `from` address to the `to` address. If operators are set for a specific `tokenId`, all the operators are revoked after the tokenId have been transferred. The `force` parameter MUST be set to `true` when transferring tokens to Externally Owned Accounts (EOAs) or contracts that do not implement the LSP1 standard. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address that owns the given `tokenId`. | +| `to` | `address` | The address that will receive the `tokenId`. | +| `tokenId` | `bytes32` | The token ID to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | + +
+ +### transferBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transferbatch) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transferBatch(address[],address[],bytes32[],bool[],bytes[])` +- Function selector: `0x7e87632c` + +::: + +```solidity +function transferBatch( + address[] from, + address[] to, + bytes32[] tokenId, + bool[] force, + bytes[] data +) external nonpayable; +``` + +Transfers multiple tokens at once based on the arrays of `from`, `to` and `tokenId`. If any transfer fails, the whole call will revert. + +#### Parameters + +| Name | Type | Description | +| --------- | :---------: | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address[]` | An array of sending addresses. | +| `to` | `address[]` | An array of recipient addresses. | +| `tokenId` | `bytes32[]` | An array of token IDs to transfer. | +| `force` | `bool[]` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard and not revert. | +| `data` | `bytes[]` | Any additional data the caller wants included in the emitted event, and sent in the hooks to the `from` and `to` addresses. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transferownership) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `newOwner` | `address` | - | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +The ERC725Y data key `_LSP8_TOKENID_FORMAT_KEY` cannot be changed +once the identifiable digital asset contract has been deployed. + +
+ +### \_isOperatorOrOwner + +```solidity +function _isOperatorOrOwner( + address caller, + bytes32 tokenId +) internal view returns (bool); +``` + +verifies if the `caller` is operator or owner for the `tokenId` + +#### Returns + +| Name | Type | Description | +| ---- | :----: | -------------------------------------------- | +| `0` | `bool` | true if `caller` is either operator or owner | + +
+ +### \_revokeOperator + +```solidity +function _revokeOperator( + address operator, + address tokenOwner, + bytes32 tokenId, + bool notified, + bytes operatorNotificationData +) internal nonpayable; +``` + +removes `operator` from the list of operators for the `tokenId` + +
+ +### \_clearOperators + +```solidity +function _clearOperators( + address tokenOwner, + bytes32 tokenId +) internal nonpayable; +``` + +revoke all the current operators for a specific `tokenId` token which belongs to `tokenOwner`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ------------------------------------------------- | +| `tokenOwner` | `address` | The address that is the owner of the `tokenId`. | +| `tokenId` | `bytes32` | The token to remove the associated operators for. | + +
+ +### \_exists + +```solidity +function _exists(bytes32 tokenId) internal view returns (bool); +``` + +Returns whether `tokenId` exists. +Tokens start existing when they are minted ([`_mint`](#_mint)), and stop existing when they are burned ([`_burn`](#_burn)). + +
+ +### \_existsOrError + +```solidity +function _existsOrError(bytes32 tokenId) internal view; +``` + +When `tokenId` does not exist then revert with an error. + +
+ +### \_mint + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the recipient via LSP1**. + +::: + +```solidity +function _mint( + address to, + bytes32 tokenId, + bool force, + bytes data +) internal nonpayable; +``` + +Create `tokenId` by minting it and transfers it to `to`. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as `from` address. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------- | +| `to` | `address` | @param tokenId The token ID to create (= mint). | +| `tokenId` | `bytes32` | The token ID to create (= mint). | +| `force` | `bool` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hook of the `to` address. | + +
+ +### \_burn + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender via LSP1**. + +::: + +:::tip Hint + +In dApps, you can know which addresses are burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + +::: + +```solidity +function _burn(bytes32 tokenId, bytes data) internal nonpayable; +``` + +Burn a specific `tokenId`, removing the `tokenId` from the [`tokenIdsOf`](#tokenidsof) the caller and decreasing its [`balanceOf`](#balanceof) by -1. +This will also clear all the operators allowed to transfer the `tokenId`. +The owner of the `tokenId` will be notified about the `tokenId` being transferred through its LSP1 [`universalReceiver`](#universalreceiver) +function, if it is a contract that supports the LSP1 interface. Its [`universalReceiver`](#universalreceiver) function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event with `address(0)` as the `to` address. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------------------------------------------------------------------------------------- | +| `tokenId` | `bytes32` | The token to burn. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the LSP1 hook on the token owner's address. | + +
+ +### \_transfer + +:::info + +Any logic in the: + +- [`_beforeTokenTransfer`](#_beforetokentransfer) function will run before updating the balances and ownership of `tokenId`s. + +- [`_afterTokenTransfer`](#_aftertokentransfer) function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender/recipient via LSP1**. + +::: + +:::danger + +This internal function does not check if the sender is authorized or not to operate on the `tokenId`. + +::: + +```solidity +function _transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes data +) internal nonpayable; +``` + +Change the owner of the `tokenId` from `from` to `to`. +Both the sender and recipient will be notified of the `tokenId` being transferred through their LSP1 [`universalReceiver`](#universalreceiver) +function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive +all the parameters in the calldata packed encoded. + +
+ +**Emitted events:** + +- [`Transfer`](#transfer) event. + +
+ +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The sender address. | +| `to` | `address` | @param tokenId The token to transfer. | +| `tokenId` | `bytes32` | The token to transfer. | +| `force` | `bool` | When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. | +| `data` | `bytes` | Additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. | + +
+ +### \_setDataForTokenId + +```solidity +function _setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes dataValue +) internal nonpayable; +``` + +Sets data for a specific `tokenId` and `dataKey` in the ERC725Y storage +The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + +
+ +**Emitted events:** + +- [`TokenIdDataChanged`](#tokeniddatachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### \_getDataForTokenId + +```solidity +function _getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey +) internal view returns (bytes dataValues); +``` + +Retrieves data for a specific `tokenId` and `dataKey` from the ERC725Y storage +The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------- | +| `tokenId` | `bytes32` | The unique identifier for a token. | +| `dataKey` | `bytes32` | The key for the data to retrieve. | + +#### Returns + +| Name | Type | Description | +| ------------ | :-----: | ----------------------------------------------------------------- | +| `dataValues` | `bytes` | The data value associated with the given `tokenId` and `dataKey`. | + +
+ +### \_beforeTokenTransfer + +```solidity +function _beforeTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes data +) internal nonpayable; +``` + +Hook that is called before any token transfer, including minting and burning. +Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `from` | `address` | The sender address | +| `to` | `address` | @param tokenId The tokenId to transfer | +| `tokenId` | `bytes32` | The tokenId to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_afterTokenTransfer + +```solidity +function _afterTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes data +) internal nonpayable; +``` + +Hook that is called after any token transfer, including minting and burning. +Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------- | +| `from` | `address` | The sender address | +| `to` | `address` | @param tokenId The tokenId to transfer | +| `tokenId` | `bytes32` | The tokenId to transfer | +| `data` | `bytes` | The data sent alongside the transfer | + +
+ +### \_notifyTokenOperator + +```solidity +function _notifyTokenOperator( + address operator, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the operator `operator` about the `tokenId` being authorized. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. +If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `operator` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `operator` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenSender + +```solidity +function _notifyTokenSender(address from, bytes lsp1Data) internal nonpayable; +``` + +Attempt to notify the token sender `from` about the `tokenId` being transferred. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. +If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------------------------------------------------ | +| `from` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `lsp1Data` | `bytes` | the data to be sent to the `from` address in the `universalReceiver` call. | + +
+ +### \_notifyTokenReceiver + +```solidity +function _notifyTokenReceiver( + address to, + bool force, + bytes lsp1Data +) internal nonpayable; +``` + +Attempt to notify the token receiver `to` about the `tokenId` being received. +This is done by calling its [`universalReceiver`](#universalreceiver) function with the `_TYPEID_LSP8_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. +If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + +- if `force` is set to `true`, nothing will happen and no notification will be sent. + +- if `force` is set to `false, the transaction will revert. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | --------------------------------------------------------------------------------------------------- | +| `to` | `address` | The address to call the [`universalReceiver`](#universalreceiver) function on. | +| `force` | `bool` | A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. | +| `lsp1Data` | `bytes` | The data to be sent to the `to` address in the `universalReceiver(...)` call. | + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +
+ +### \_fallbackLSP17Extendable + +:::info + +The LSP8 Token contract should not hold any native tokens. Any native tokens received by the contract +will be forwarded to the extension address mapped to the selector from `msg.sig`. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call with the received value to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the address(0) will be returned. +We will always forward the value to the extension, as the LSP8 contract is not supposed to hold any native tokens. +Reverts if there is no extension for the function being called. +If there is an extension for the function selector being called, it calls the extension with the +CALL opcode, passing the [`msg.data`](#msg.data) appended with the 20 bytes of the [`msg.sender`](#msg.sender) and +32 bytes of the [`msg.value`](#msg.value) + +
+ +## Events + +### DataChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#datachanged) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### OperatorAuthorizationChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#operatorauthorizationchanged) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OperatorAuthorizationChanged(address,address,bytes32,bytes)` +- Event topic hash: `0x1b1b58aa2ec0cec2228b2d37124556d41f5a1f7b12f089171f896cc236671215` + +::: + +```solidity +event OperatorAuthorizationChanged( + address indexed operator, + address indexed tokenOwner, + bytes32 indexed tokenId, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` enables `operator` to transfer or burn the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | -------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address authorized as an operator. | +| `tokenOwner` **`indexed`** | `address` | The owner of the `tokenId`. | +| `tokenId` **`indexed`** | `bytes32` | The tokenId `operator` address has access on behalf of `tokenOwner`. | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OperatorRevoked + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#operatorrevoked) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OperatorRevoked(address,address,bytes32,bool,bytes)` +- Event topic hash: `0xc78cd419d6136f9f1c1c6aec1d3fae098cffaf8bc86314a8f2685e32fe574e3c` + +::: + +```solidity +event OperatorRevoked( + address indexed operator, + address indexed tokenOwner, + bytes32 indexed tokenId, + bool notified, + bytes operatorNotificationData +); +``` + +Emitted when `tokenOwner` disables `operator` to transfer or burn `tokenId` on its behalf. + +#### Parameters + +| Name | Type | Description | +| -------------------------- | :-------: | ---------------------------------------------------------------------------------- | +| `operator` **`indexed`** | `address` | The address revoked from the operator array ([`getOperatorsOf`](#getoperatorsof)). | +| `tokenOwner` **`indexed`** | `address` | The owner of the `tokenId`. | +| `tokenId` **`indexed`** | `bytes32` | The tokenId `operator` is revoked from operating on. | +| `notified` | `bool` | Bool indicating whether the operator has been notified or not | +| `operatorNotificationData` | `bytes` | The data to notify the operator about via LSP1. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownershiptransferred) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### TokenIdDataChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#tokeniddatachanged) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `TokenIdDataChanged(bytes32,bytes32,bytes)` +- Event topic hash: `0xa6e4251f855f750545fe414f120db91c76b88def14d120969e5bb2d3f05debbb` + +::: + +```solidity +event TokenIdDataChanged( + bytes32 indexed tokenId, + bytes32 indexed dataKey, + bytes dataValue +); +``` + +Emitted when setting data for `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `tokenId` **`indexed`** | `bytes32` | The tokenId which data is set for. | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### Transfer + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#transfer) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Event signature: `Transfer(address,address,address,bytes32,bool,bytes)` +- Event topic hash: `0xb333c813a7426a7a11e2b190cad52c44119421594b47f6f32ace6d8c7207b2bf` + +::: + +```solidity +event Transfer( + address operator, + address indexed from, + address indexed to, + bytes32 indexed tokenId, + bool force, + bytes data +); +``` + +Emitted when `tokenId` token is transferred from the `from` to the `to` address. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | ---------------------------------------------------------------------------------------------------------------------------------- | +| `operator` | `address` | The address of operator that sent the `tokenId` | +| `from` **`indexed`** | `address` | The previous owner of the `tokenId` | +| `to` **`indexed`** | `address` | The new owner of `tokenId` | +| `tokenId` **`indexed`** | `bytes32` | The tokenId that was transferred | +| `force` | `bool` | If the token transfer enforces the `to` recipient address to be a contract that implements the LSP1 standard or not. | +| `data` | `bytes` | Any additional data the caller included by the caller during the transfer, and sent in the hooks to the `from` and `to` addresses. | + +
+ +## Errors + +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### InvalidExtensionAddress + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#invalidextensionaddress) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `InvalidExtensionAddress(bytes)` +- Error hash: `0x42bfe79f` + +::: + +```solidity +error InvalidExtensionAddress(bytes storedData); +``` + +reverts when the bytes retrieved from the LSP17 data key is not a valid address (not 20 bytes) + +#### Parameters + +| Name | Type | Description | +| ------------ | :-----: | ----------- | +| `storedData` | `bytes` | - | + +
+ +### InvalidFunctionSelector + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#invalidfunctionselector) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `InvalidFunctionSelector(bytes)` +- Error hash: `0xe5099ee3` + +::: + +```solidity +error InvalidFunctionSelector(bytes data); +``` + +reverts when the contract is called with a function selector not valid (less than 4 bytes of data) + +#### Parameters + +| Name | Type | Description | +| ------ | :-----: | ----------- | +| `data` | `bytes` | - | + +
+ +### LSP4TokenNameNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokennamenoteditable) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenNameNotEditable()` +- Error hash: `0x85c169bd` + +::: + +```solidity +error LSP4TokenNameNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenName` after the digital asset contract has been deployed / initialized. The `LSP4TokenName` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenSymbolNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokensymbolnoteditable) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenSymbolNotEditable()` +- Error hash: `0x76755b38` + +::: + +```solidity +error LSP4TokenSymbolNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenSymbol` after the digital asset contract has been deployed / initialized. The `LSP4TokenSymbol` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor/initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP4TokenTypeNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp4tokentypenoteditable) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP4TokenTypeNotEditable()` +- Error hash: `0x4ef6d7fb` + +::: + +```solidity +error LSP4TokenTypeNotEditable(); +``` + +Reverts when trying to edit the data key `LSP4TokenType` after the digital asset contract has been deployed / initialized. The `LSP4TokenType` data key is located inside the ERC725Y data key-value store of the digital asset contract. It can be set only once inside the constructor / initializer when the digital asset contract is being deployed / initialized. + +
+ +### LSP8BatchCallFailed + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8batchcallfailed) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8BatchCallFailed(uint256)` +- Error hash: `0x234eb819` + +::: + +```solidity +error LSP8BatchCallFailed(uint256 callIndex); +``` + +_Batch call failed._ + +Reverts when a batch call failed. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ----------- | +| `callIndex` | `uint256` | - | + +
+ +### LSP8CannotSendToAddressZero + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cannotsendtoaddresszero) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CannotSendToAddressZero()` +- Error hash: `0x24ecef4d` + +::: + +```solidity +error LSP8CannotSendToAddressZero(); +``` + +Reverts when trying to send token to the zero address. + +
+ +### LSP8CannotUseAddressZeroAsOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8cannotuseaddresszeroasoperator) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8CannotUseAddressZeroAsOperator()` +- Error hash: `0x9577b8b3` + +::: + +```solidity +error LSP8CannotUseAddressZeroAsOperator(); +``` + +Reverts when trying to set the zero address as an operator. + +
+ +### LSP8InvalidTransferBatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8invalidtransferbatch) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8InvalidTransferBatch()` +- Error hash: `0x93a83119` + +::: + +```solidity +error LSP8InvalidTransferBatch(); +``` + +Reverts when the parameters used for `transferBatch` have different lengths. + +
+ +### LSP8NonExistentTokenId + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nonexistenttokenid) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NonExistentTokenId(bytes32)` +- Error hash: `0xae8f9a36` + +::: + +```solidity +error LSP8NonExistentTokenId(bytes32 tokenId); +``` + +Reverts when `tokenId` has not been minted. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8NonExistingOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nonexistingoperator) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NonExistingOperator(address,bytes32)` +- Error hash: `0x4aa31a8c` + +::: + +```solidity +error LSP8NonExistingOperator(address operator, bytes32 tokenId); +``` + +Reverts when `operator` is not an operator for the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8NotTokenOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nottokenoperator) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotTokenOperator(bytes32,address)` +- Error hash: `0x1294d2a9` + +::: + +```solidity +error LSP8NotTokenOperator(bytes32 tokenId, address caller); +``` + +Reverts when `caller` is not an allowed operator for `tokenId`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | +| `caller` | `address` | - | + +
+ +### LSP8NotTokenOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8nottokenowner) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotTokenOwner(address,bytes32,address)` +- Error hash: `0x5b271ea2` + +::: + +```solidity +error LSP8NotTokenOwner(address tokenOwner, bytes32 tokenId, address caller); +``` + +Reverts when `caller` is not the `tokenOwner` of the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `tokenOwner` | `address` | - | +| `tokenId` | `bytes32` | - | +| `caller` | `address` | - | + +
+ +### LSP8NotifyTokenReceiverContractMissingLSP1Interface + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8notifytokenreceivercontractmissinglsp1interface) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotifyTokenReceiverContractMissingLSP1Interface(address)` +- Error hash: `0x4349776d` + +::: + +```solidity +error LSP8NotifyTokenReceiverContractMissingLSP1Interface( + address tokenReceiver +); +``` + +Reverts if the `tokenReceiver` does not implement LSP1 when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP8NotifyTokenReceiverIsEOA + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8notifytokenreceiveriseoa) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8NotifyTokenReceiverIsEOA(address)` +- Error hash: `0x03173137` + +::: + +```solidity +error LSP8NotifyTokenReceiverIsEOA(address tokenReceiver); +``` + +Reverts if the `tokenReceiver` is an EOA when minting or transferring tokens with `bool force` set as `false`. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------- | +| `tokenReceiver` | `address` | - | + +
+ +### LSP8OperatorAlreadyAuthorized + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8operatoralreadyauthorized) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8OperatorAlreadyAuthorized(address,bytes32)` +- Error hash: `0xa7626b68` + +::: + +```solidity +error LSP8OperatorAlreadyAuthorized(address operator, bytes32 tokenId); +``` + +Reverts when `operator` is already authorized for the `tokenId`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `operator` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8RevokeOperatorNotAuthorized + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8revokeoperatornotauthorized) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8RevokeOperatorNotAuthorized(address,address,bytes32)` +- Error hash: `0x760b5acd` + +::: + +```solidity +error LSP8RevokeOperatorNotAuthorized( + address caller, + address tokenOwner, + bytes32 tokenId +); +``` + +Reverts when the call to revoke operator is not authorized. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------- | +| `caller` | `address` | - | +| `tokenOwner` | `address` | - | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8TokenContractCannotHoldValue + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokencontractcannotholdvalue) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenContractCannotHoldValue()` +- Error hash: `0x61f49442` + +::: + +```solidity +error LSP8TokenContractCannotHoldValue(); +``` + +_LSP8 contract cannot receive native tokens._ + +Error occurs when sending native tokens to the LSP8 contract without sending any data. E.g. Sending value without passing a bytes4 function selector to call a LSP17 Extension. + +
+ +### LSP8TokenIdAlreadyMinted + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidalreadyminted) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdAlreadyMinted(bytes32)` +- Error hash: `0x34c7b511` + +::: + +```solidity +error LSP8TokenIdAlreadyMinted(bytes32 tokenId); +``` + +Reverts when `tokenId` has already been minted. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | + +
+ +### LSP8TokenIdFormatNotEditable + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidformatnoteditable) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdFormatNotEditable()` +- Error hash: `0x3664800a` + +::: + +```solidity +error LSP8TokenIdFormatNotEditable(); +``` + +Reverts when trying to edit the data key `LSP8TokenIdFormat` after the identifiable digital asset contract has been deployed. The `LSP8TokenIdFormat` data key is located inside the ERC725Y Data key-value store of the identifiable digital asset contract. It can be set only once inside the constructor/initializer when the identifiable digital asset contract is being deployed. + +
+ +### LSP8TokenIdsDataEmptyArray + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidsdataemptyarray) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdsDataEmptyArray()` +- Error hash: `0x80c98305` + +::: + +```solidity +error LSP8TokenIdsDataEmptyArray(); +``` + +Reverts when empty arrays is passed to the function + +
+ +### LSP8TokenIdsDataLengthMismatch + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidsdatalengthmismatch) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenIdsDataLengthMismatch()` +- Error hash: `0x2fa71dfe` + +::: + +```solidity +error LSP8TokenIdsDataLengthMismatch(); +``` + +Reverts when the length of the token IDs data arrays is not equal + +
+ +### LSP8TokenOwnerCannotBeOperator + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenownercannotbeoperator) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenOwnerCannotBeOperator()` +- Error hash: `0x89fdad62` + +::: + +```solidity +error LSP8TokenOwnerCannotBeOperator(); +``` + +Reverts when trying to authorize or revoke the token's owner as an operator. + +
+ +### LSP8TokenOwnerChanged + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenownerchanged) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `LSP8TokenOwnerChanged(bytes32,address,address)` +- Error hash: `0x5a9c31d3` + +::: + +```solidity +error LSP8TokenOwnerChanged( + bytes32 tokenId, + address oldOwner, + address newOwner +); +``` + +Reverts when the token owner changed inside the [`_beforeTokenTransfer`](#_beforetokentransfer) hook. + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------- | +| `tokenId` | `bytes32` | - | +| `oldOwner` | `address` | - | +| `newOwner` | `address` | - | + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownablecallernottheowner) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
+ +### OwnableCannotSetZeroAddressAsOwner + +:::note References + +- Specification details: [**LSP-8-IdentifiableDigitalAsset**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#ownablecannotsetzeroaddressasowner) +- Solidity implementation: [`LSP8Mintable.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol) +- Error signature: `OwnableCannotSetZeroAddressAsOwner()` +- Error hash: `0x1ad8836c` + +::: + +```solidity +error OwnableCannotSetZeroAddressAsOwner(); +``` + +Reverts when trying to set `address(0)` as the contract owner when deploying the contract, initializing it or transferring ownership of the contract. + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/contracts/LSP9Vault.md b/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/contracts/LSP9Vault.md new file mode 100644 index 000000000..f66fbb91d --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/contracts/LSP9Vault.md @@ -0,0 +1,1807 @@ + + + +# LSP9Vault + +:::info Standard Specifications + +[`LSP-9-Vault`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md) + +::: +:::info Solidity implementation + +[`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) + +::: + +> Implementation of LSP9Vault built on top of [ERC725], [LSP-1-UniversalReceiver] + +Could be owned by an EOA or by a contract and is able to receive and send assets. Also allows for registering received assets by leveraging the key-value storage. + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### constructor + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#constructor) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) + +::: + +```solidity +constructor(address newOwner); +``` + +_Deploying a LSP9Vault contract with owner set to address `initialOwner`._ + +Sets `initialOwner` as the contract owner and the `SupportedStandards:LSP9Vault` Data Key. The `constructor` also allows funding the contract on deployment. + +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) event when funding the contract on deployment. +- [`OwnershipTransferred`](#ownershiptransferred) event when `initialOwner` is set as the contract [`owner`](#owner). +- [`DataChanged`](#datachanged) event when setting the [`_LSP9_SUPPORTED_STANDARDS_KEY`](#_lsp9_supported_standards_key). +- [`UniversalReceiver`](#universalreceiver) event when notifying the `initialOwner`. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------ | +| `newOwner` | `address` | The new owner of the contract. | + +
+ +### fallback + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#fallback) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) + +::: + +```solidity +fallback(bytes calldata callData) external payable returns (bytes memory); +``` + +_The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`._ + +Achieves the goal of [LSP-17-ContractExtension] standard by extending the contract to handle calls of functions that do not exist natively, +forwarding the function call to the extension address mapped to the function being called. +This function is executed when: + +- Sending data of length less than 4 bytes to the contract. + +- The first 4 bytes of the calldata do not match any publicly callable functions from the contract ABI. + +- Receiving native tokens with some calldata. + +1. If the data is equal or longer than 4 bytes, the [ERC-725Y] storage is queried with the following data key: [_LSP17_EXTENSION_PREFIX] + `bytes4(msg.sig)` (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is no address stored under the following data key, revert with [`NoExtensionFoundForFunctionSelector(bytes4)`](#noextensionfoundforfunctionselector). The data key relative to `bytes4(0)` is an exception, where no reverts occurs if there is no extension address stored under. This exception is made to allow users to send random data (graffiti) to the account and to be able to react on it. + +- If there is an address, forward the `msg.data` to the extension using the CALL opcode, appending 52 bytes (20 bytes of `msg.sender` and 32 bytes of `msg.value`). Return what the calls returns, or revert if the call failed. + +2. If the data sent to this function is of length less than 4 bytes (not a function selector), return. + +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens and extension function selector is not found or not payable. + +
+ +
+ +### receive + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#receive) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) + +::: + +```solidity +receive() external payable; +``` + +Executed: + +- When receiving some native tokens without any additional data. + +- On empty calls to the contract. + +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) when receiving native tokens. + +
+ +
+ +### RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#renounce_ownership_confirmation_delay) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY()` +- Function selector: `0xead3fbdf` + +::: + +```solidity +function RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY() + external + view + returns (uint256); +``` + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `uint256` | - | + +
+ +### RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#renounce_ownership_confirmation_period) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD()` +- Function selector: `0x01bfba61` + +::: + +```solidity +function RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD() + external + view + returns (uint256); +``` + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `uint256` | - | + +
+ +### VERSION + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#version) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `VERSION()` +- Function selector: `0xffa1ad74` + +::: + +```solidity +function VERSION() external view returns (string); +``` + +_Contract version._ + +#### Returns + +| Name | Type | Description | +| ---- | :------: | ----------- | +| `0` | `string` | - | + +
+ +### acceptOwnership + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#acceptownership) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `acceptOwnership()` +- Function selector: `0x79ba5097` + +::: + +```solidity +function acceptOwnership() external nonpayable; +``` + +_`msg.sender` is accepting ownership of contract: `address(this)`._ + +Transfer ownership of the contract from the current [`owner()`](#owner) to the [`pendingOwner()`](#pendingowner). Once this function is called: + +- The current [`owner()`](#owner) will lose access to the functions restricted to the [`owner()`](#owner) only. + +- The [`pendingOwner()`](#pendingowner) will gain access to the functions restricted to the [`owner()`](#owner) only. + +
+ +**Requirements:** + +- Only the [`pendingOwner`](#pendingowner) can call this function. +- When notifying the previous owner via LSP1, the typeId used must be the `keccak256(...)` hash of [LSP0OwnershipTransferred_SenderNotification]. +- When notifying the new owner via LSP1, the typeId used must be the `keccak256(...)` hash of [LSP0OwnershipTransferred_RecipientNotification]. + +
+ +
+ +### batchCalls + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#batchcalls) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### execute + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#execute) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `execute(uint256,address,uint256,bytes)` +- Function selector: `0x44c028fe` + +::: + +:::info + +The `operationType` 4 `DELEGATECALL` is disabled by default in the LSP9 Vault. + +::: + +```solidity +function execute( + uint256 operationType, + address target, + uint256 value, + bytes data +) external payable returns (bytes); +``` + +_Calling address `target` using `operationType`, transferring `value` wei and data: `data`._ + +Generic executor function to: + +- send native tokens to any address. + +- interact with any contract by passing an abi-encoded function call in the `data` parameter. + +- deploy a contract by providing its creation bytecode in the `data` parameter. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. +- If a `value` is provided, the contract must have at least this amount in its balance to execute successfully. +- If the operation type is `CREATE` (1) or `CREATE2` (2), `target` must be `address(0)`. +- If the operation type is `STATICCALL` (3), `value` transfer is disallowed and must be 0. + +
+ +
+ +**Emitted events:** + +- [`Executed`](#executed) event for each call that uses under `operationType`: `CALL` (0) and `STATICCALL` (3). +- [`ContractCreated`](#contractcreated) event, when a contract is created under `operationType`: `CREATE` (1) and `CREATE2` (2). +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens. + +
+ +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------------------------------------------------------------------------------------------------- | +| `operationType` | `uint256` | The operation type used: CALL = 0; CREATE = 1; CREATE2 = 2; STATICCALL = 3; DELEGATECALL = 4 | +| `target` | `address` | The address of the EOA or smart contract. (unused if a contract is created via operation type 1 or 2) | +| `value` | `uint256` | The amount of native tokens to transfer (in Wei) | +| `data` | `bytes` | The call data, or the creation bytecode of the contract to deploy if `operationType` is `1` or `2`. | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ----------- | +| `0` | `bytes` | - | + +
+ +### executeBatch + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#executebatch) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `executeBatch(uint256[],address[],uint256[],bytes[])` +- Function selector: `0x31858452` + +::: + +:::info + +The `operationType` 4 `DELEGATECALL` is disabled by default in the LSP9 Vault. + +::: + +```solidity +function executeBatch( + uint256[] operationsType, + address[] targets, + uint256[] values, + bytes[] datas +) external payable returns (bytes[]); +``` + +_Calling multiple addresses `targets` using `operationsType`, transferring `values` wei and data: `datas`._ + +Batch executor function that behaves the same as [`execute`](#execute) but allowing multiple operations in the same transaction. + +
+ +**Requirements:** + +- The length of the parameters provided must be equal. +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. +- If a `value` is provided, the contract must have at least this amount in its balance to execute successfully. +- If the operation type is `CREATE` (1) or `CREATE2` (2), `target` must be `address(0)`. +- If the operation type is `STATICCALL` (3), `value` transfer is disallowed and must be 0. + +
+ +
+ +**Emitted events:** + +- [`Executed`](#executed) event for each call that uses under `operationType`: `CALL` (0) and `STATICCALL` (3). (each iteration) +- [`ContractCreated`](#contractcreated) event, when a contract is created under `operationType`: `CREATE` (1) and `CREATE2` (2). (each iteration) +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------------- | :---------: | --------------------------------------------------------------------------------------------------------------- | +| `operationsType` | `uint256[]` | The list of operations type used: `CALL = 0`; `CREATE = 1`; `CREATE2 = 2`; `STATICCALL = 3`; `DELEGATECALL = 4` | +| `targets` | `address[]` | The list of addresses to call. `targets` will be unused if a contract is created (operation types 1 and 2). | +| `values` | `uint256[]` | The list of native token amounts to transfer (in Wei). | +| `datas` | `bytes[]` | The list of calldata, or the creation bytecode of the contract to deploy if `operationType` is `1` or `2`. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `bytes[]` | - | + +
+ +### getData + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#getdata) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#getdatabatch) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### owner + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#owner) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### pendingOwner + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#pendingowner) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `pendingOwner()` +- Function selector: `0xe30c3978` + +::: + +:::info + +If no ownership transfer is in progress, the pendingOwner will be `address(0).`. + +::: + +```solidity +function pendingOwner() external view returns (address); +``` + +The address that ownership of the contract is transferred to. This address may use [`acceptOwnership()`](#acceptownership) to gain ownership of the contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#renounceownership) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +:::danger + +Leaves the contract without an owner. Once ownership of the contract has been renounced, any functions that are restricted to be called by the owner will be permanently inaccessible, making these functions not callable anymore and unusable. + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +_`msg.sender` is renouncing ownership of contract `address(this)`._ + +Renounce ownership of the contract in a 2-step process. + +1. The first call will initiate the process of renouncing ownership. + +2. The second call is used as a confirmation and will leave the contract without an owner. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. + +
+ +
+ +### setData + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#setdata) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#setdatabatch) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. + +
+ +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event. (on each iteration of setting data) + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#supportsinterface) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +_Checking if this contract supports the interface defined by the `bytes4` interface ID `interfaceId`._ + +Achieves the goal of [ERC-165] to detect supported interfaces and [LSP-17-ContractExtension] by checking if the interfaceId being queried is supported on another linked extension. If the contract doesn't support the `interfaceId`, it forwards the call to the `supportsInterface` extension according to [LSP-17-ContractExtension], and checks if the extension implements the interface defined by `interfaceId`. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ------------------------------------------------------ | +| `interfaceId` | `bytes4` | The interface ID to check if the contract supports it. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | --------------------------------------------------------------------------------------------- | +| `0` | `bool` | `true` if this contract implements the interface defined by `interfaceId`, `false` otherwise. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#transferownership) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address newOwner) external nonpayable; +``` + +_Transfer ownership initiated by `newOwner`._ + +Initiate the process of transferring ownership of the contract by setting the new owner as the pending owner. If the new owner is a contract that supports + implements LSP1, this will also attempt to notify the new owner that ownership has been transferred to them by calling the [`universalReceiver()`](#universalreceiver) function on the `newOwner` contract. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. +- When notifying the new owner via LSP1, the `typeId` used must be the `keccak256(...)` hash of [LSP0OwnershipTransferStarted]. +- Pending owner cannot accept ownership in the same tx via the LSP1 hook. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------------------------- | +| `newOwner` | `address` | The address of the new owner. | + +
+ +### universalReceiver + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#universalreceiver) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Function signature: `universalReceiver(bytes32,bytes)` +- Function selector: `0x6bb56a14` + +::: + +```solidity +function universalReceiver( + bytes32 typeId, + bytes receivedData +) external payable returns (bytes returnedValues); +``` + +_Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`._ + +Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. The function performs the following steps: + +1. Query the [ERC-725Y] storage with the data key [_LSP1_UNIVERSAL_RECEIVER_DELEGATE_KEY]. + +- If there is an address stored under the data key, check if this address supports the LSP1 interfaceId. + +- If yes, call this address with the typeId and data (params), along with additional calldata consisting of 20 bytes of `msg.sender` and 32 bytes of `msg.value`. If not, continue the execution of the function. + +2. Query the [ERC-725Y] storage with the data key [_LSP1_UNIVERSAL_RECEIVER_DELEGATE_PREFIX] + `bytes32(typeId)`. (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is an address stored under the data key, check if this address supports the LSP1 interfaceId. + +- If yes, call this address with the typeId and data (params), along with additional calldata consisting of 20 bytes of `msg.sender` and 32 bytes of `msg.value`. If not, continue the execution of the function. + +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) event with the function parameters, call options, and the response of the UniversalReceiverDelegates (URD) contract that was called. + +
+ +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | -------------------------- | +| `typeId` | `bytes32` | The type of call received. | +| `receivedData` | `bytes` | The data received. | + +#### Returns + +| Name | Type | Description | +| ---------------- | :-----: | ------------------------------------------------------------------------------------------------------- | +| `returnedValues` | `bytes` | The ABI encoded return value of the LSP1UniversalReceiverDelegate call and the LSP1TypeIdDelegate call. | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_execute + +:::caution Warning + +Providing operation type DELEGATECALL (4) as argument will result in custom error [`ERC725X_UnknownOperationType(4)`](#erc725x_unknownoperationtype) + +::: + +```solidity +function _execute( + uint256 operationType, + address target, + uint256 value, + bytes data +) internal nonpayable returns (bytes); +``` + +This function overrides the [`ERC725XCore`](#erc725xcore) internal [`_execute`](#_execute) function to disable operation type DELEGATECALL (4). + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ------------------------------------------------------------------------------------------------------ | +| `operationType` | `uint256` | The operation type used: CALL = 0; CREATE = 1; CREATE2 = 2; STATICCALL = 3. | +| `target` | `address` | The address of the EOA or smart contract. (unused if a contract is created via operation type 1 or 2). | +| `value` | `uint256` | The amount of native tokens to transfer (in Wei). | +| `data` | `bytes` | The call data, or the creation bytecode of the contract to deploy if `operationType` is `1` or `2`. | + +
+ +### \_executeBatch + +```solidity +function _executeBatch( + uint256[] operationsType, + address[] targets, + uint256[] values, + bytes[] datas +) internal nonpayable returns (bytes[]); +``` + +check each `operationType` provided in the batch and perform the associated low-level opcode after checking for requirements (see [`executeBatch`](#executebatch)). + +
+ +### \_executeCall + +```solidity +function _executeCall( + address target, + uint256 value, + bytes data +) internal nonpayable returns (bytes result); +``` + +Perform low-level call (operation type = 0) + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------- | +| `target` | `address` | The address on which call is executed | +| `value` | `uint256` | The value to be sent with the call | +| `data` | `bytes` | The data to be sent with the call | + +#### Returns + +| Name | Type | Description | +| -------- | :-----: | ---------------------- | +| `result` | `bytes` | The data from the call | + +
+ +### \_executeStaticCall + +```solidity +function _executeStaticCall( + address target, + bytes data +) internal nonpayable returns (bytes result); +``` + +Perform low-level staticcall (operation type = 3) + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------- | +| `target` | `address` | The address on which staticcall is executed | +| `data` | `bytes` | The data to be sent with the staticcall | + +#### Returns + +| Name | Type | Description | +| -------- | :-----: | ------------------------------------- | +| `result` | `bytes` | The data returned from the staticcall | + +
+ +### \_executeDelegateCall + +:::caution Warning + +The `msg.value` should not be trusted for any method called with `operationType`: `DELEGATECALL` (4). + +::: + +```solidity +function _executeDelegateCall( + address target, + bytes data +) internal nonpayable returns (bytes result); +``` + +Perform low-level delegatecall (operation type = 4) + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | --------------------------------------------- | +| `target` | `address` | The address on which delegatecall is executed | +| `data` | `bytes` | The data to be sent with the delegatecall | + +#### Returns + +| Name | Type | Description | +| -------- | :-----: | --------------------------------------- | +| `result` | `bytes` | The data returned from the delegatecall | + +
+ +### \_deployCreate + +```solidity +function _deployCreate( + uint256 value, + bytes creationCode +) internal nonpayable returns (bytes newContract); +``` + +Deploy a contract using the `CREATE` opcode (operation type = 1) + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ---------------------------------------------------------------------------------- | +| `value` | `uint256` | The value to be sent to the contract created | +| `creationCode` | `bytes` | The contract creation bytecode to deploy appended with the constructor argument(s) | + +#### Returns + +| Name | Type | Description | +| ------------- | :-----: | -------------------------------------------- | +| `newContract` | `bytes` | The address of the contract created as bytes | + +
+ +### \_deployCreate2 + +```solidity +function _deployCreate2( + uint256 value, + bytes creationCode +) internal nonpayable returns (bytes newContract); +``` + +Deploy a contract using the `CREATE2` opcode (operation type = 2) + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ----------------------------------------------------------------------------------------------------- | +| `value` | `uint256` | The value to be sent to the contract created | +| `creationCode` | `bytes` | The contract creation bytecode to deploy appended with the constructor argument(s) and a bytes32 salt | + +#### Returns + +| Name | Type | Description | +| ------------- | :-----: | -------------------------------------------- | +| `newContract` | `bytes` | The address of the contract created as bytes | + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +Write a `dataValue` to the underlying ERC725Y storage, represented as a mapping of +`bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event emitted after a successful `setData` call. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to write the associated `bytes` value to the store. | +| `dataValue` | `bytes` | The `bytes` value to associate with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_transferOwnership + +```solidity +function _transferOwnership(address newOwner) internal nonpayable; +``` + +Set the pending owner of the contract and cancel any renounce ownership process that was previously started. + +
+ +**Requirements:** + +- `newOwner` cannot be the address of the contract itself. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------- | +| `newOwner` | `address` | The address of the new pending owner. | + +
+ +### \_acceptOwnership + +```solidity +function _acceptOwnership() internal nonpayable; +``` + +Set the pending owner of the contract as the new owner. + +
+ +### \_renounceOwnership + +```solidity +function _renounceOwnership() internal nonpayable; +``` + +Initiate or confirm the process of renouncing ownership after a specific delay of blocks have passed. + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +
+ +### \_fallbackLSP17Extendable + +:::tip Hint + +This function does not forward to the extension contract the `msg.value` received by the contract that inherits `LSP17Extendable`. +If you would like to forward the `msg.value` to the extension contract, you can override the code of this internal function as follow: + +```solidity +(bool success, bytes memory result) = extension.call{value: msg.value}( + abi.encodePacked(callData, msg.sender, msg.value) +); +``` + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the `address(0)` will be returned. +Forwards the value if the extension is payable. +Reverts if there is no extension for the function being called, except for the `bytes4(0)` function selector, which passes even if there is no extension for it. +If there is an extension for the function selector being called, it calls the extension with the +`CALL` opcode, passing the `msg.data` appended with the 20 bytes of the [`msg.sender`](#msg.sender) and 32 bytes of the `msg.value`. + +
+ +### \_validateAndIdentifyCaller + +```solidity +function _validateAndIdentifyCaller() internal view returns (bool isURD); +``` + +Internal method restricting the call to the owner of the contract and the UniversalReceiverDelegate + +
+ +## Events + +### ContractCreated + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#contractcreated) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Event signature: `ContractCreated(uint256,address,uint256,bytes32)` +- Event topic hash: `0xa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c3` + +::: + +```solidity +event ContractCreated( + uint256 indexed operationType, + address indexed contractAddress, + uint256 value, + bytes32 indexed salt +); +``` + +_Deployed new contract at address `contractAddress` and funded with `value` wei (deployed using opcode: `operationType`)._ + +Emitted when a new contract was created and deployed. + +#### Parameters + +| Name | Type | Description | +| ------------------------------- | :-------: | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `operationType` **`indexed`** | `uint256` | The opcode used to deploy the contract (`CREATE` or `CREATE2`). | +| `contractAddress` **`indexed`** | `address` | The created contract address. | +| `value` | `uint256` | The amount of native tokens (in Wei) sent to fund the created contract on deployment. | +| `salt` **`indexed`** | `bytes32` | The salt used to deterministically deploy the contract (`CREATE2` only). If `CREATE` opcode is used, the salt value will be `bytes32(0)`. | + +
+ +### DataChanged + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#datachanged) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### Executed + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#executed) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Event signature: `Executed(uint256,address,uint256,bytes4)` +- Event topic hash: `0x4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e` + +::: + +```solidity +event Executed( + uint256 indexed operationType, + address indexed target, + uint256 value, + bytes4 indexed selector +); +``` + +_Called address `target` using `operationType` with `value` wei and `data`._ + +Emitted when calling an address `target` (EOA or contract) with `value`. + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ---------------------------------------------------------------------------------------------------- | +| `operationType` **`indexed`** | `uint256` | The low-level call opcode used to call the `target` address (`CALL`, `STATICALL` or `DELEGATECALL`). | +| `target` **`indexed`** | `address` | The address to call. `target` will be unused if a contract is created (operation types 1 and 2). | +| `value` | `uint256` | The amount of native tokens transferred along the call (in Wei). | +| `selector` **`indexed`** | `bytes4` | The first 4 bytes (= function selector) of the data sent with the call. | + +
+ +### OwnershipRenounced + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#ownershiprenounced) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Event signature: `OwnershipRenounced()` +- Event topic hash: `0xd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce` + +::: + +```solidity +event OwnershipRenounced(); +``` + +_Successfully renounced ownership of the contract. This contract is now owned by anyone, it's owner is `address(0)`._ + +Emitted when the ownership of the contract has been renounced. + +
+ +### OwnershipTransferStarted + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#ownershiptransferstarted) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Event signature: `OwnershipTransferStarted(address,address)` +- Event topic hash: `0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700` + +::: + +```solidity +event OwnershipTransferStarted( + address indexed previousOwner, + address indexed newOwner +); +``` + +_The transfer of ownership of the contract was initiated. Pending new owner set to: `newOwner`._ + +Emitted when [`transferOwnership(..)`](#transferownership) was called and the first step of transferring ownership completed successfully which leads to [`pendingOwner`](#pendingowner) being updated. + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ---------------------------------- | +| `previousOwner` **`indexed`** | `address` | The address of the previous owner. | +| `newOwner` **`indexed`** | `address` | The address of the new owner. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#ownershiptransferred) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### RenounceOwnershipStarted + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#renounceownershipstarted) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Event signature: `RenounceOwnershipStarted()` +- Event topic hash: `0x81b7f830f1f0084db6497c486cbe6974c86488dcc4e3738eab94ab6d6b1653e7` + +::: + +```solidity +event RenounceOwnershipStarted(); +``` + +_Ownership renouncement initiated._ + +Emitted when starting the [`renounceOwnership(..)`](#renounceownership) 2-step process. + +
+ +### UniversalReceiver + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#universalreceiver) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Event signature: `UniversalReceiver(address,uint256,bytes32,bytes,bytes)` +- Event topic hash: `0x9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c2` + +::: + +```solidity +event UniversalReceiver( + address indexed from, + uint256 indexed value, + bytes32 indexed typeId, + bytes receivedData, + bytes returnedValue +); +``` + +\*Address `from` called the `universalReceiver(...)` function while sending `value` LYX. Notification type (typeId): `typeId` + +- Data received: `receivedData`.\* + +Emitted when the [`universalReceiver`](#universalreceiver) function was called with a specific `typeId` and some `receivedData` + +#### Parameters + +| Name | Type | Description | +| ---------------------- | :-------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` **`indexed`** | `address` | The address of the EOA or smart contract that called the [`universalReceiver(...)`](#universalreceiver) function. | +| `value` **`indexed`** | `uint256` | The amount sent to the [`universalReceiver(...)`](#universalreceiver) function. | +| `typeId` **`indexed`** | `bytes32` | A `bytes32` unique identifier (= _"hook"_)that describe the type of notification, information or transaction received by the contract. Can be related to a specific standard or a hook. | +| `receivedData` | `bytes` | Any arbitrary data that was sent to the [`universalReceiver(...)`](#universalreceiver) function. | +| `returnedValue` | `bytes` | The value returned by the [`universalReceiver(...)`](#universalreceiver) function. | + +
+ +## Errors + +### ERC725X_ContractDeploymentFailed + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#erc725x_contractdeploymentfailed) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `ERC725X_ContractDeploymentFailed()` +- Error hash: `0x0b07489b` + +::: + +```solidity +error ERC725X_ContractDeploymentFailed(); +``` + +Reverts when contract deployment failed via [`execute`](#execute) or [`executeBatch`](#executebatch) functions, This error can occur using either operation type 1 (`CREATE`) or 2 (`CREATE2`). + +
+ +### ERC725X_CreateOperationsRequireEmptyRecipientAddress + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#erc725x_createoperationsrequireemptyrecipientaddress) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `ERC725X_CreateOperationsRequireEmptyRecipientAddress()` +- Error hash: `0x3041824a` + +::: + +```solidity +error ERC725X_CreateOperationsRequireEmptyRecipientAddress(); +``` + +Reverts when passing a `to` address that is not `address(0)` (= address zero) while deploying a contract via [`execute`](#execute) or [`executeBatch`](#executebatch) functions. This error can occur using either operation type 1 (`CREATE`) or 2 (`CREATE2`). + +
+ +### ERC725X_ExecuteParametersEmptyArray + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#erc725x_executeparametersemptyarray) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `ERC725X_ExecuteParametersEmptyArray()` +- Error hash: `0xe9ad2b5f` + +::: + +```solidity +error ERC725X_ExecuteParametersEmptyArray(); +``` + +Reverts when one of the array parameter provided to the [`executeBatch`](#executebatch) function is an empty array. + +
+ +### ERC725X_ExecuteParametersLengthMismatch + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#erc725x_executeparameterslengthmismatch) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `ERC725X_ExecuteParametersLengthMismatch()` +- Error hash: `0x3ff55f4d` + +::: + +```solidity +error ERC725X_ExecuteParametersLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `operationTypes`, `targets` addresses, `values`, and `datas` array parameters provided when calling the [`executeBatch`](#executebatch) function. + +
+ +### ERC725X_InsufficientBalance + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#erc725x_insufficientbalance) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `ERC725X_InsufficientBalance(uint256,uint256)` +- Error hash: `0x0df9a8f8` + +::: + +```solidity +error ERC725X_InsufficientBalance(uint256 balance, uint256 value); +``` + +Reverts when trying to send more native tokens `value` than available in current `balance`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------- | +| `balance` | `uint256` | The balance of native tokens of the ERC725X smart contract. | +| `value` | `uint256` | The amount of native tokens sent via `ERC725X.execute(...)`/`ERC725X.executeBatch(...)` that is greater than the contract's `balance`. | + +
+ +### ERC725X_MsgValueDisallowedInStaticCall + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#erc725x_msgvaluedisallowedinstaticcall) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `ERC725X_MsgValueDisallowedInStaticCall()` +- Error hash: `0x72f2bc6a` + +::: + +```solidity +error ERC725X_MsgValueDisallowedInStaticCall(); +``` + +Reverts when trying to send native tokens (`value` / `values[]` parameter of [`execute`](#execute) or [`executeBatch`](#executebatch) functions) while making a `staticcall` (`operationType == 3`). Sending native tokens via `staticcall` is not allowed because it is a state changing operation. + +
+ +### ERC725X_NoContractBytecodeProvided + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#erc725x_nocontractbytecodeprovided) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `ERC725X_NoContractBytecodeProvided()` +- Error hash: `0xb81cd8d9` + +::: + +```solidity +error ERC725X_NoContractBytecodeProvided(); +``` + +Reverts when no contract bytecode was provided as parameter when trying to deploy a contract via [`execute`](#execute) or [`executeBatch`](#executebatch). This error can occur using either operation type 1 (`CREATE`) or 2 (`CREATE2`). + +
+ +### ERC725X_UnknownOperationType + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#erc725x_unknownoperationtype) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `ERC725X_UnknownOperationType(uint256)` +- Error hash: `0x7583b3bc` + +::: + +```solidity +error ERC725X_UnknownOperationType(uint256 operationTypeProvided); +``` + +Reverts when the `operationTypeProvided` is none of the default operation types available. (CALL = 0; CREATE = 1; CREATE2 = 2; STATICCALL = 3; DELEGATECALL = 4) + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | ------------------------------------------------------------------------------------------------------ | +| `operationTypeProvided` | `uint256` | The unrecognised operation type number provided to `ERC725X.execute(...)`/`ERC725X.executeBatch(...)`. | + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### ERC725Y_MsgValueDisallowed + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `ERC725Y_MsgValueDisallowed()` +- Error hash: `0xf36ba737` + +::: + +```solidity +error ERC725Y_MsgValueDisallowed(); +``` + +Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#setdatabatch) function. + +
+ +### LSP14CallerNotPendingOwner + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#lsp14callernotpendingowner) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `LSP14CallerNotPendingOwner(address)` +- Error hash: `0x451e4528` + +::: + +```solidity +error LSP14CallerNotPendingOwner(address caller); +``` + +Reverts when the `caller` that is trying to accept ownership of the contract is not the pending owner. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------- | +| `caller` | `address` | The address that tried to accept ownership. | + +
+ +### LSP14CannotTransferOwnershipToSelf + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#lsp14cannottransferownershiptoself) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `LSP14CannotTransferOwnershipToSelf()` +- Error hash: `0xe052a6f8` + +::: + +```solidity +error LSP14CannotTransferOwnershipToSelf(); +``` + +_Cannot transfer ownership to the address of the contract itself._ + +Reverts when trying to transfer ownership to the `address(this)`. + +
+ +### LSP14MustAcceptOwnershipInSeparateTransaction + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#lsp14mustacceptownershipinseparatetransaction) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `LSP14MustAcceptOwnershipInSeparateTransaction()` +- Error hash: `0x5758dd07` + +::: + +```solidity +error LSP14MustAcceptOwnershipInSeparateTransaction(); +``` + +_Cannot accept ownership in the same transaction with [`transferOwnership(...)`](#transferownership)._ + +Reverts when pending owner accept ownership in the same transaction of transferring ownership. + +
+ +### LSP14NotInRenounceOwnershipInterval + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#lsp14notinrenounceownershipinterval) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `LSP14NotInRenounceOwnershipInterval(uint256,uint256)` +- Error hash: `0x1b080942` + +::: + +```solidity +error LSP14NotInRenounceOwnershipInterval( + uint256 renounceOwnershipStart, + uint256 renounceOwnershipEnd +); +``` + +_Cannot confirm ownership renouncement yet. The ownership renouncement is allowed from: `renounceOwnershipStart` until: `renounceOwnershipEnd`._ + +Reverts when trying to renounce ownership before the initial confirmation delay. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ----------------------------------------------------------------------- | +| `renounceOwnershipStart` | `uint256` | The start timestamp when one can confirm the renouncement of ownership. | +| `renounceOwnershipEnd` | `uint256` | The end timestamp when one can confirm the renouncement of ownership. | + +
+ +### LSP1DelegateNotAllowedToSetDataKey + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#lsp1delegatenotallowedtosetdatakey) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `LSP1DelegateNotAllowedToSetDataKey(bytes32)` +- Error hash: `0x199611f1` + +::: + +```solidity +error LSP1DelegateNotAllowedToSetDataKey(bytes32 dataKey); +``` + +_The `LSP1UniversalReceiverDelegate` is not allowed to set the following data key: `dataKey`._ + +Reverts when the Vault version of [LSP1UniversalReceiverDelegate] sets @lukso/lsp1-contracts/6/17 Data Keys. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------------------------------------------------------- | +| `dataKey` | `bytes32` | The data key that the Vault version of [LSP1UniversalReceiverDelegate] is not allowed to set. | + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
+ +### OwnableCallerNotTheOwner + +:::note References + +- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-9-Vault.md#ownablecallernottheowner) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp9-contracts/contracts/LSP9Vault.sol) +- Error signature: `OwnableCallerNotTheOwner(address)` +- Error hash: `0xbf1169c5` + +::: + +```solidity +error OwnableCallerNotTheOwner(address callerAddress); +``` + +Reverts when only the owner is allowed to call the function. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ---------------------------------------- | +| `callerAddress` | `address` | The address that tried to make the call. | + +
diff --git a/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/contracts/UniversalProfile.md b/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/contracts/UniversalProfile.md new file mode 100644 index 000000000..593901c01 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/contracts/UniversalProfile.md @@ -0,0 +1,1869 @@ + + + +# UniversalProfile + +:::info Standard Specifications + +[`UniversalProfile`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md) + +::: +:::info Solidity implementation + +[`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) + +::: + +> implementation of a LUKSO's Universal Profile based on LSP3 + +Implementation of the ERC725Account + LSP1 universalReceiver + +## Public Methods + +Public methods are accessible externally from users, allowing interaction with this function from dApps or other smart contracts. +When marked as 'public', a method can be called both externally and internally, on the other hand, when marked as 'external', a method can only be called externally. + +### constructor + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#constructor) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) + +::: + +```solidity +constructor(address initialOwner); +``` + +_Deploying a UniversalProfile contract with owner set to address `initialOwner`._ + +Set `initialOwner` as the contract owner and the `SupportedStandards:LSP3Profile` data key in the ERC725Y data key/value store. + +- The `constructor` is payable and allows funding the contract on deployment. + +- The `initialOwner` will then be allowed to call protected functions marked with the `onlyOwner` modifier. + +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) event when funding the contract on deployment. +- [`OwnershipTransferred`](#ownershiptransferred) event when `initialOwner` is set as the contract [`owner`](#owner). +- [`DataChanged`](#datachanged) event when setting the [`_LSP3_SUPPORTED_STANDARDS_KEY`](#_lsp3_supported_standards_key). + +
+ +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ------------------------- | +| `initialOwner` | `address` | the owner of the contract | + +
+ +### fallback + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#fallback) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) + +::: + +```solidity +fallback() external payable; +``` + +
+ +### receive + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#receive) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) + +::: + +```solidity +receive() external payable; +``` + +
+ +### RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#renounce_ownership_confirmation_delay) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY()` +- Function selector: `0xead3fbdf` + +::: + +```solidity +function RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY() + external + view + returns (uint256); +``` + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `uint256` | - | + +
+ +### RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#renounce_ownership_confirmation_period) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD()` +- Function selector: `0x01bfba61` + +::: + +```solidity +function RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD() + external + view + returns (uint256); +``` + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `uint256` | - | + +
+ +### VERSION + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#version) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `VERSION()` +- Function selector: `0xffa1ad74` + +::: + +```solidity +function VERSION() external view returns (string); +``` + +_Contract version._ + +#### Returns + +| Name | Type | Description | +| ---- | :------: | ----------- | +| `0` | `string` | - | + +
+ +### acceptOwnership + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#acceptownership) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `acceptOwnership()` +- Function selector: `0x79ba5097` + +::: + +```solidity +function acceptOwnership() external nonpayable; +``` + +_`msg.sender` is accepting ownership of contract: `address(this)`._ + +Transfer ownership of the contract from the current [`owner()`](#owner) to the [`pendingOwner()`](#pendingowner). Once this function is called: + +- The current [`owner()`](#owner) will lose access to the functions restricted to the [`owner()`](#owner) only. + +- The [`pendingOwner()`](#pendingowner) will gain access to the functions restricted to the [`owner()`](#owner) only. + +
+ +**Requirements:** + +- Only the [`pendingOwner`](#pendingowner) can call this function. +- When notifying the previous owner via LSP1, the typeId used must be the `keccak256(...)` hash of [LSP0OwnershipTransferred_SenderNotification]. +- When notifying the new owner via LSP1, the typeId used must be the `keccak256(...)` hash of [LSP0OwnershipTransferred_RecipientNotification]. + +
+ +
+ +### batchCalls + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#batchcalls) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `batchCalls(bytes[])` +- Function selector: `0x6963d438` + +::: + +:::info + +It's not possible to send value along the functions call due to the use of `delegatecall`. + +::: + +```solidity +function batchCalls(bytes[] data) external nonpayable returns (bytes[] results); +``` + +_Executing the following batch of abi-encoded function calls on the contract: `data`._ + +Allows a caller to batch different function calls in one call. Perform a `delegatecall` on self, to call different functions with preserving the context. + +#### Parameters + +| Name | Type | Description | +| ------ | :-------: | -------------------------------------------------------------------- | +| `data` | `bytes[]` | An array of ABI encoded function calls to be called on the contract. | + +#### Returns + +| Name | Type | Description | +| --------- | :-------: | ---------------------------------------------------------------- | +| `results` | `bytes[]` | An array of abi-encoded data returned by the functions executed. | + +
+ +### execute + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#execute) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `execute(uint256,address,uint256,bytes)` +- Function selector: `0x44c028fe` + +::: + +```solidity +function execute( + uint256 operationType, + address target, + uint256 value, + bytes data +) external payable returns (bytes); +``` + +_Calling address `target` using `operationType`, transferring `value` wei and data: `data`._ + +Generic executor function to: + +- send native tokens to any address. + +- interact with any contract by passing an abi-encoded function call in the `data` parameter. + +- deploy a contract by providing its creation bytecode in the `data` parameter. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. +- If a `value` is provided, the contract must have at least this amount in its balance to execute successfully. +- If the operation type is `CREATE` (1) or `CREATE2` (2), `target` must be `address(0)`. +- If the operation type is `STATICCALL` (3) or `DELEGATECALL` (4), `value` transfer is disallowed and must be 0. + +
+ +
+ +**Emitted events:** + +- [`Executed`](#executed) event for each call that uses under `operationType`: `CALL` (0), `STATICCALL` (3) and `DELEGATECALL` (4). +- [`ContractCreated`](#contractcreated) event, when a contract is created under `operationType`: `CREATE` (1) and `CREATE2` (2). +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens. + +
+ +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | ----------------------------------------------------------------------------------------------------- | +| `operationType` | `uint256` | The operation type used: CALL = 0; CREATE = 1; CREATE2 = 2; STATICCALL = 3; DELEGATECALL = 4 | +| `target` | `address` | The address of the EOA or smart contract. (unused if a contract is created via operation type 1 or 2) | +| `value` | `uint256` | The amount of native tokens to transfer (in Wei) | +| `data` | `bytes` | The call data, or the creation bytecode of the contract to deploy if `operationType` is `1` or `2`. | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ----------- | +| `0` | `bytes` | - | + +
+ +### executeBatch + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#executebatch) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `executeBatch(uint256[],address[],uint256[],bytes[])` +- Function selector: `0x31858452` + +::: + +:::caution Warning + +- The `msg.value` should not be trusted for any method called within the batch with `operationType`: `DELEGATECALL` (4). + +::: + +```solidity +function executeBatch( + uint256[] operationsType, + address[] targets, + uint256[] values, + bytes[] datas +) external payable returns (bytes[]); +``` + +_Calling multiple addresses `targets` using `operationsType`, transferring `values` wei and data: `datas`._ + +Batch executor function that behaves the same as [`execute`](#execute) but allowing multiple operations in the same transaction. + +
+ +**Requirements:** + +- The length of the parameters provided must be equal. +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. +- If a `value` is provided, the contract must have at least this amount in its balance to execute successfully. +- If the operation type is `CREATE` (1) or `CREATE2` (2), `target` must be `address(0)`. +- If the operation type is `STATICCALL` (3) or `DELEGATECALL` (4), `value` transfer is disallowed and must be 0. + +
+ +
+ +**Emitted events:** + +- [`Executed`](#executed) event for each call that uses under `operationType`: `CALL` (0), `STATICCALL` (3) and `DELEGATECALL` (4). (each iteration) +- [`ContractCreated`](#contractcreated) event, when a contract is created under `operationType`: `CREATE` (1) and `CREATE2` (2) (each iteration) +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------------- | :---------: | --------------------------------------------------------------------------------------------------------------- | +| `operationsType` | `uint256[]` | The list of operations type used: `CALL = 0`; `CREATE = 1`; `CREATE2 = 2`; `STATICCALL = 3`; `DELEGATECALL = 4` | +| `targets` | `address[]` | The list of addresses to call. `targets` will be unused if a contract is created (operation types 1 and 2). | +| `values` | `uint256[]` | The list of native token amounts to transfer (in Wei). | +| `datas` | `bytes[]` | The list of calldata, or the creation bytecode of the contract to deploy if `operationType` is `1` or `2`. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `bytes[]` | - | + +
+ +### getData + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#getdata) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `getData(bytes32)` +- Function selector: `0x54f6127f` + +::: + +```solidity +function getData(bytes32 dataKey) external view returns (bytes dataValue); +``` + +_Reading the ERC725Y storage for data key `dataKey` returned the following value: `dataValue`._ + +Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | --------------------------------------------- | +| `dataKey` | `bytes32` | The data key for which to retrieve the value. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ---------------------------------------------------- | +| `dataValue` | `bytes` | The bytes value stored under the specified data key. | + +
+ +### getDataBatch + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#getdatabatch) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `getDataBatch(bytes32[])` +- Function selector: `0xdedff9c6` + +::: + +```solidity +function getDataBatch( + bytes32[] dataKeys +) external view returns (bytes[] dataValues); +``` + +_Reading the ERC725Y storage for data keys `dataKeys` returned the following values: `dataValues`._ + +Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys`. + +#### Parameters + +| Name | Type | Description | +| ---------- | :---------: | ------------------------------------------ | +| `dataKeys` | `bytes32[]` | The array of keys which values to retrieve | + +#### Returns + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------- | +| `dataValues` | `bytes[]` | The array of data stored at multiple keys | + +
+ +### isValidSignature + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#isvalidsignature) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `isValidSignature(bytes32,bytes)` +- Function selector: `0x1626ba7e` + +::: + +:::caution Warning + +This function does not enforce by default the inclusion of the address of this contract in the signature digest. It is recommended that protocols or applications using this contract include the targeted address (= this contract) in the data to sign. To ensure that a signature is valid for a specific LSP0ERC725Account and prevent signatures from the same EOA to be replayed across different LSP0ERC725Accounts. + +::: + +```solidity +function isValidSignature( + bytes32 dataHash, + bytes signature +) external view returns (bytes4 returnedStatus); +``` + +_Achieves the goal of [EIP-1271] by validating signatures of smart contracts according to their own logic._ + +Handles two cases: + +1. If the owner is an EOA, recovers an address from the hash and the signature provided: + +- Returns the `_ERC1271_SUCCESSVALUE` if the address recovered is the same as the owner, indicating that it was a valid signature. + +- If the address is different, it returns the `_ERC1271_FAILVALUE` indicating that the signature is not valid. + +2. If the owner is a smart contract, it forwards the call of [`isValidSignature()`](#isvalidsignature) to the owner contract: + +- If the contract fails or returns the `_ERC1271_FAILVALUE`, the [`isValidSignature()`](#isvalidsignature) on the account returns the `_ERC1271_FAILVALUE`, indicating that the signature is not valid. + +- If the [`isValidSignature()`](#isvalidsignature) on the owner returned the `_ERC1271_SUCCESSVALUE`, the [`isValidSignature()`](#isvalidsignature) on the account returns the `_ERC1271_SUCCESSVALUE`, indicating that it's a valid signature. + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------------------------ | +| `dataHash` | `bytes32` | The hash of the data to be validated. | +| `signature` | `bytes` | A signature that can validate the previous parameter (Hash). | + +#### Returns + +| Name | Type | Description | +| ---------------- | :------: | ----------------------------------------------------------------- | +| `returnedStatus` | `bytes4` | A `bytes4` value that indicates if the signature is valid or not. | + +
+ +### owner + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#owner) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `owner()` +- Function selector: `0x8da5cb5b` + +::: + +```solidity +function owner() external view returns (address); +``` + +Returns the address of the current owner. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### pendingOwner + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#pendingowner) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `pendingOwner()` +- Function selector: `0xe30c3978` + +::: + +:::info + +If no ownership transfer is in progress, the pendingOwner will be `address(0).`. + +::: + +```solidity +function pendingOwner() external view returns (address); +``` + +The address that ownership of the contract is transferred to. This address may use [`acceptOwnership()`](#acceptownership) to gain ownership of the contract. + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------- | +| `0` | `address` | - | + +
+ +### renounceOwnership + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#renounceownership) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `renounceOwnership()` +- Function selector: `0x715018a6` + +::: + +:::danger + +Leaves the contract without an owner. Once ownership of the contract has been renounced, any functions that are restricted to be called by the owner or an address allowed by the owner will be permanently inaccessible, making these functions not callable anymore and unusable. + +::: + +```solidity +function renounceOwnership() external nonpayable; +``` + +_`msg.sender` is renouncing ownership of contract `address(this)`._ + +Renounce ownership of the contract in a 2-step process. + +1. The first call will initiate the process of renouncing ownership. + +2. The second call is used as a confirmation and will leave the contract without an owner. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. + +
+ +
+ +### setData + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#setdata) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `setData(bytes32,bytes)` +- Function selector: `0x7f23690c` + +::: + +```solidity +function setData(bytes32 dataKey, bytes dataValue) external payable; +``` + +_Setting the following data key value pair in the ERC725Y storage. Data key: `dataKey`, data value: `dataValue`._ + +Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data key `dataKey`. The function is marked as payable to enable flexibility on child contracts. For instance to implement a fee mechanism for setting specific data. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. + +
+ +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens. +- [`DataChanged`](#datachanged) event. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------ | +| `dataKey` | `bytes32` | The data key for which to set a new value. | +| `dataValue` | `bytes` | The new bytes value to set. | + +
+ +### setDataBatch + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#setdatabatch) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `setDataBatch(bytes32[],bytes[])` +- Function selector: `0x97902421` + +::: + +```solidity +function setDataBatch(bytes32[] dataKeys, bytes[] dataValues) external payable; +``` + +_Setting the following data key value pairs in the ERC725Y storage. Data keys: `dataKeys`, data values: `dataValues`._ + +Batch data setting function that behaves the same as [`setData`](#setdata) but allowing to set multiple data key/value pairs in the ERC725Y storage in the same transaction. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. + +
+ +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) event when receiving native tokens. +- [`DataChanged`](#datachanged) event. (on each iteration of setting data) + +
+ +#### Parameters + +| Name | Type | Description | +| ------------ | :---------: | ---------------------------------------------------- | +| `dataKeys` | `bytes32[]` | An array of data keys to set bytes values for. | +| `dataValues` | `bytes[]` | An array of bytes values to set for each `dataKeys`. | + +
+ +### supportsInterface + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#supportsinterface) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `supportsInterface(bytes4)` +- Function selector: `0x01ffc9a7` + +::: + +```solidity +function supportsInterface(bytes4 interfaceId) external view returns (bool); +``` + +_Checking if this contract supports the interface defined by the `bytes4` interface ID `interfaceId`._ + +Achieves the goal of [ERC-165] to detect supported interfaces and [LSP-17-ContractExtension] by checking if the interfaceId being queried is supported on another linked extension. If the contract doesn't support the `interfaceId`, it forwards the call to the `supportsInterface` extension according to [LSP-17-ContractExtension], and checks if the extension implements the interface defined by `interfaceId`. + +#### Parameters + +| Name | Type | Description | +| ------------- | :------: | ------------------------------------------------------ | +| `interfaceId` | `bytes4` | The interface ID to check if the contract supports it. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | --------------------------------------------------------------------------------------------- | +| `0` | `bool` | `true` if this contract implements the interface defined by `interfaceId`, `false` otherwise. | + +
+ +### transferOwnership + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#transferownership) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `transferOwnership(address)` +- Function selector: `0xf2fde38b` + +::: + +```solidity +function transferOwnership(address pendingNewOwner) external nonpayable; +``` + +_Transfer ownership initiated by `newOwner`._ + +Initiate the process of transferring ownership of the contract by setting the new owner as the pending owner. If the new owner is a contract that supports + implements LSP1, this will also attempt to notify the new owner that ownership has been transferred to them by calling the [`universalReceiver()`](#universalreceiver) function on the `newOwner` contract. + +
+ +**Requirements:** + +- Can be only called by the [`owner`](#owner) or by an authorised address that pass the verification check performed on the owner. +- When notifying the new owner via LSP1, the `typeId` used must be the `keccak256(...)` hash of [LSP0OwnershipTransferStarted]. +- Pending owner cannot accept ownership in the same tx via the LSP1 hook. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------------- | :-------: | ----------- | +| `pendingNewOwner` | `address` | - | + +
+ +### universalReceiver + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#universalreceiver) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Function signature: `universalReceiver(bytes32,bytes)` +- Function selector: `0x6bb56a14` + +::: + +```solidity +function universalReceiver( + bytes32 typeId, + bytes receivedData +) external payable returns (bytes returnedValues); +``` + +_Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`._ + +Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. The function performs the following steps: + +1. Query the [ERC-725Y] storage with the data key [_LSP1_UNIVERSAL_RECEIVER_DELEGATE_KEY]. + +- If there is an address stored under the data key, check if this address supports the LSP1 interfaceId. + +- If yes, call this address with the typeId and data (params), along with additional calldata consisting of 20 bytes of `msg.sender` and 32 bytes of `msg.value`. If not, continue the execution of the function. + +2. Query the [ERC-725Y] storage with the data key [_LSP1_UNIVERSAL_RECEIVER_DELEGATE_PREFIX] + `bytes32(typeId)`. (Check [LSP-2-ERC725YJSONSchema] for encoding the data key) + +- If there is an address stored under the data key, check if this address supports the LSP1 interfaceId. + +- If yes, call this address with the typeId and data (params), along with additional calldata consisting of 20 bytes of `msg.sender` and 32 bytes of `msg.value`. If not, continue the execution of the function. This function delegates internally the handling of native tokens to the [`universalReceiver`](#universalreceiver) function itself passing `_TYPEID_LSP0_VALUE_RECEIVED` as typeId and the calldata as received data. + +
+ +**Emitted events:** + +- [`UniversalReceiver`](#universalreceiver) when receiving native tokens. +- [`UniversalReceiver`](#universalreceiver) event with the function parameters, call options, and the response of the UniversalReceiverDelegates (URD) contract that was called. + +
+ +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | -------------------------- | +| `typeId` | `bytes32` | The type of call received. | +| `receivedData` | `bytes` | The data received. | + +#### Returns + +| Name | Type | Description | +| ---------------- | :-----: | ------------------------------------------------------------------------------------------------------- | +| `returnedValues` | `bytes` | The ABI encoded return value of the LSP1UniversalReceiverDelegate call and the LSP1TypeIdDelegate call. | + +
+ +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### \_checkOwner + +```solidity +function _checkOwner() internal view; +``` + +Throws if the sender is not the owner. + +
+ +### \_setOwner + +```solidity +function _setOwner(address newOwner) internal nonpayable; +``` + +Changes the owner if `newOwner` and oldOwner are different +This pattern is useful in inheritance. + +
+ +### \_execute + +```solidity +function _execute( + uint256 operationType, + address target, + uint256 value, + bytes data +) internal nonpayable returns (bytes); +``` + +check the `operationType` provided and perform the associated low-level opcode after checking for requirements (see [`execute`](#execute)). + +
+ +### \_executeBatch + +```solidity +function _executeBatch( + uint256[] operationsType, + address[] targets, + uint256[] values, + bytes[] datas +) internal nonpayable returns (bytes[]); +``` + +check each `operationType` provided in the batch and perform the associated low-level opcode after checking for requirements (see [`executeBatch`](#executebatch)). + +
+ +### \_executeCall + +```solidity +function _executeCall( + address target, + uint256 value, + bytes data +) internal nonpayable returns (bytes result); +``` + +Perform low-level call (operation type = 0) + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------- | +| `target` | `address` | The address on which call is executed | +| `value` | `uint256` | The value to be sent with the call | +| `data` | `bytes` | The data to be sent with the call | + +#### Returns + +| Name | Type | Description | +| -------- | :-----: | ---------------------- | +| `result` | `bytes` | The data from the call | + +
+ +### \_executeStaticCall + +```solidity +function _executeStaticCall( + address target, + bytes data +) internal nonpayable returns (bytes result); +``` + +Perform low-level staticcall (operation type = 3) + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------- | +| `target` | `address` | The address on which staticcall is executed | +| `data` | `bytes` | The data to be sent with the staticcall | + +#### Returns + +| Name | Type | Description | +| -------- | :-----: | ------------------------------------- | +| `result` | `bytes` | The data returned from the staticcall | + +
+ +### \_executeDelegateCall + +:::caution Warning + +The `msg.value` should not be trusted for any method called with `operationType`: `DELEGATECALL` (4). + +::: + +```solidity +function _executeDelegateCall( + address target, + bytes data +) internal nonpayable returns (bytes result); +``` + +Perform low-level delegatecall (operation type = 4) + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | --------------------------------------------- | +| `target` | `address` | The address on which delegatecall is executed | +| `data` | `bytes` | The data to be sent with the delegatecall | + +#### Returns + +| Name | Type | Description | +| -------- | :-----: | --------------------------------------- | +| `result` | `bytes` | The data returned from the delegatecall | + +
+ +### \_deployCreate + +```solidity +function _deployCreate( + uint256 value, + bytes creationCode +) internal nonpayable returns (bytes newContract); +``` + +Deploy a contract using the `CREATE` opcode (operation type = 1) + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ---------------------------------------------------------------------------------- | +| `value` | `uint256` | The value to be sent to the contract created | +| `creationCode` | `bytes` | The contract creation bytecode to deploy appended with the constructor argument(s) | + +#### Returns + +| Name | Type | Description | +| ------------- | :-----: | -------------------------------------------- | +| `newContract` | `bytes` | The address of the contract created as bytes | + +
+ +### \_deployCreate2 + +```solidity +function _deployCreate2( + uint256 value, + bytes creationCode +) internal nonpayable returns (bytes newContract); +``` + +Deploy a contract using the `CREATE2` opcode (operation type = 2) + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ----------------------------------------------------------------------------------------------------- | +| `value` | `uint256` | The value to be sent to the contract created | +| `creationCode` | `bytes` | The contract creation bytecode to deploy appended with the constructor argument(s) and a bytes32 salt | + +#### Returns + +| Name | Type | Description | +| ------------- | :-----: | -------------------------------------------- | +| `newContract` | `bytes` | The address of the contract created as bytes | + +
+ +### \_getData + +```solidity +function _getData(bytes32 dataKey) internal view returns (bytes dataValue); +``` + +Read the value stored under a specific `dataKey` inside the underlying ERC725Y storage, +represented as a mapping of `bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | ----------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to read the associated `bytes` value from the store. | + +#### Returns + +| Name | Type | Description | +| ----------- | :-----: | ----------------------------------------------------------------------------- | +| `dataValue` | `bytes` | The `bytes` value associated with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_setData + +```solidity +function _setData(bytes32 dataKey, bytes dataValue) internal nonpayable; +``` + +Write a `dataValue` to the underlying ERC725Y storage, represented as a mapping of +`bytes32` data keys mapped to their `bytes` data values. + +```solidity +mapping(bytes32 => bytes) _store +``` + +
+ +**Emitted events:** + +- [`DataChanged`](#datachanged) event emitted after a successful `setData` call. + +
+ +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------------------------------------------- | +| `dataKey` | `bytes32` | A bytes32 data key to write the associated `bytes` value to the store. | +| `dataValue` | `bytes` | The `bytes` value to associate with the given `dataKey` in the ERC725Y storage. | + +
+ +### \_transferOwnership + +```solidity +function _transferOwnership(address newOwner) internal nonpayable; +``` + +Set the pending owner of the contract and cancel any renounce ownership process that was previously started. + +
+ +**Requirements:** + +- `newOwner` cannot be the address of the contract itself. + +
+ +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ------------------------------------- | +| `newOwner` | `address` | The address of the new pending owner. | + +
+ +### \_acceptOwnership + +```solidity +function _acceptOwnership() internal nonpayable; +``` + +Set the pending owner of the contract as the new owner. + +
+ +### \_renounceOwnership + +```solidity +function _renounceOwnership() internal nonpayable; +``` + +Initiate or confirm the process of renouncing ownership after a specific delay of blocks have passed. + +
+ +### \_supportsInterfaceInERC165Extension + +```solidity +function _supportsInterfaceInERC165Extension( + bytes4 interfaceId +) internal view returns (bool); +``` + +Returns whether the interfaceId being checked is supported in the extension of the +[`supportsInterface`](#supportsinterface) selector. +To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally +supported by reading whether the interfaceId queried is supported in the `supportsInterface` +extension if the extension is set, if not it returns false. + +
+ +### \_getExtensionAndForwardValue + +```solidity +function _getExtensionAndForwardValue( + bytes4 functionSelector +) internal view returns (address, bool); +``` + +Returns the extension address and the boolean indicating whether to forward the value received to the extension, stored under the following data key: + +- [`_LSP17_EXTENSION_PREFIX`](#_lsp17_extension_prefix) + `` (Check [LSP2-ERC725YJSONSchema] for encoding the data key). + +- If no extension is stored, returns the address(0). + +- If the stored value is 20 bytes, return false for the boolean + +
+ +### \_fallbackLSP17Extendable + +:::tip Hint + +If you would like to forward the `msg.value` to the extension contract, you should store an additional `0x01` byte after the address of the extension under the corresponding LSP17 data key. + +::: + +```solidity +function _fallbackLSP17Extendable( + bytes callData +) internal nonpayable returns (bytes); +``` + +Forwards the call to an extension mapped to a function selector. +Calls [`_getExtensionAndForwardValue`](#_getextensionandforwardvalue) to get the address of the extension mapped to the function selector being +called on the account. If there is no extension, the `address(0)` will be returned. +Forwards the value sent with the call to the extension if the function selector is mapped to a payable extension. +Reverts if there is no extension for the function being called, except for the `bytes4(0)` function selector, which passes even if there is no extension for it. +If there is an extension for the function selector being called, it calls the extension with the +`CALL` opcode, passing the `msg.data` appended with the 20 bytes of the [`msg.sender`](#msg.sender) and 32 bytes of the `msg.value`. + +
+ +### \_verifyCall + +```solidity +function _verifyCall( + address logicVerifier +) internal nonpayable returns (bool verifyAfter); +``` + +Calls [`lsp20VerifyCall`](#lsp20verifycall) function on the logicVerifier. + +
+ +### \_verifyCallResult + +```solidity +function _verifyCallResult( + address logicVerifier, + bytes callResult +) internal nonpayable; +``` + +Calls [`lsp20VerifyCallResult`](#lsp20verifycallresult) function on the logicVerifier. + +
+ +### \_revertWithLSP20DefaultError + +```solidity +function _revertWithLSP20DefaultError( + bool postCall, + bytes returnedData +) internal pure; +``` + +
+ +## Events + +### ContractCreated + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#contractcreated) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Event signature: `ContractCreated(uint256,address,uint256,bytes32)` +- Event topic hash: `0xa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c3` + +::: + +```solidity +event ContractCreated( + uint256 indexed operationType, + address indexed contractAddress, + uint256 value, + bytes32 indexed salt +); +``` + +_Deployed new contract at address `contractAddress` and funded with `value` wei (deployed using opcode: `operationType`)._ + +Emitted when a new contract was created and deployed. + +#### Parameters + +| Name | Type | Description | +| ------------------------------- | :-------: | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `operationType` **`indexed`** | `uint256` | The opcode used to deploy the contract (`CREATE` or `CREATE2`). | +| `contractAddress` **`indexed`** | `address` | The created contract address. | +| `value` | `uint256` | The amount of native tokens (in Wei) sent to fund the created contract on deployment. | +| `salt` **`indexed`** | `bytes32` | The salt used to deterministically deploy the contract (`CREATE2` only). If `CREATE` opcode is used, the salt value will be `bytes32(0)`. | + +
+ +### DataChanged + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#datachanged) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Event signature: `DataChanged(bytes32,bytes)` +- Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` + +::: + +```solidity +event DataChanged(bytes32 indexed dataKey, bytes dataValue); +``` + +_The following data key/value pair has been changed in the ERC725Y storage: Data key: `dataKey`, data value: `dataValue`._ + +Emitted when data at a specific `dataKey` was changed to a new value `dataValue`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | -------------------------------------------- | +| `dataKey` **`indexed`** | `bytes32` | The data key for which a bytes value is set. | +| `dataValue` | `bytes` | The value to set for the given data key. | + +
+ +### Executed + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#executed) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Event signature: `Executed(uint256,address,uint256,bytes4)` +- Event topic hash: `0x4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e` + +::: + +```solidity +event Executed( + uint256 indexed operationType, + address indexed target, + uint256 value, + bytes4 indexed selector +); +``` + +_Called address `target` using `operationType` with `value` wei and `data`._ + +Emitted when calling an address `target` (EOA or contract) with `value`. + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ---------------------------------------------------------------------------------------------------- | +| `operationType` **`indexed`** | `uint256` | The low-level call opcode used to call the `target` address (`CALL`, `STATICALL` or `DELEGATECALL`). | +| `target` **`indexed`** | `address` | The address to call. `target` will be unused if a contract is created (operation types 1 and 2). | +| `value` | `uint256` | The amount of native tokens transferred along the call (in Wei). | +| `selector` **`indexed`** | `bytes4` | The first 4 bytes (= function selector) of the data sent with the call. | + +
+ +### OwnershipRenounced + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#ownershiprenounced) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Event signature: `OwnershipRenounced()` +- Event topic hash: `0xd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce` + +::: + +```solidity +event OwnershipRenounced(); +``` + +_Successfully renounced ownership of the contract. This contract is now owned by anyone, it's owner is `address(0)`._ + +Emitted when the ownership of the contract has been renounced. + +
+ +### OwnershipTransferStarted + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#ownershiptransferstarted) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Event signature: `OwnershipTransferStarted(address,address)` +- Event topic hash: `0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700` + +::: + +```solidity +event OwnershipTransferStarted( + address indexed previousOwner, + address indexed newOwner +); +``` + +_The transfer of ownership of the contract was initiated. Pending new owner set to: `newOwner`._ + +Emitted when [`transferOwnership(..)`](#transferownership) was called and the first step of transferring ownership completed successfully which leads to [`pendingOwner`](#pendingowner) being updated. + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ---------------------------------- | +| `previousOwner` **`indexed`** | `address` | The address of the previous owner. | +| `newOwner` **`indexed`** | `address` | The address of the new owner. | + +
+ +### OwnershipTransferred + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#ownershiptransferred) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Event signature: `OwnershipTransferred(address,address)` +- Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` + +::: + +```solidity +event OwnershipTransferred( + address indexed previousOwner, + address indexed newOwner +); +``` + +#### Parameters + +| Name | Type | Description | +| ----------------------------- | :-------: | ----------- | +| `previousOwner` **`indexed`** | `address` | - | +| `newOwner` **`indexed`** | `address` | - | + +
+ +### RenounceOwnershipStarted + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#renounceownershipstarted) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Event signature: `RenounceOwnershipStarted()` +- Event topic hash: `0x81b7f830f1f0084db6497c486cbe6974c86488dcc4e3738eab94ab6d6b1653e7` + +::: + +```solidity +event RenounceOwnershipStarted(); +``` + +_Ownership renouncement initiated._ + +Emitted when starting the [`renounceOwnership(..)`](#renounceownership) 2-step process. + +
+ +### UniversalReceiver + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#universalreceiver) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Event signature: `UniversalReceiver(address,uint256,bytes32,bytes,bytes)` +- Event topic hash: `0x9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c2` + +::: + +```solidity +event UniversalReceiver( + address indexed from, + uint256 indexed value, + bytes32 indexed typeId, + bytes receivedData, + bytes returnedValue +); +``` + +\*Address `from` called the `universalReceiver(...)` function while sending `value` LYX. Notification type (typeId): `typeId` + +- Data received: `receivedData`.\* + +Emitted when the [`universalReceiver`](#universalreceiver) function was called with a specific `typeId` and some `receivedData` + +#### Parameters + +| Name | Type | Description | +| ---------------------- | :-------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` **`indexed`** | `address` | The address of the EOA or smart contract that called the [`universalReceiver(...)`](#universalreceiver) function. | +| `value` **`indexed`** | `uint256` | The amount sent to the [`universalReceiver(...)`](#universalreceiver) function. | +| `typeId` **`indexed`** | `bytes32` | A `bytes32` unique identifier (= _"hook"_)that describe the type of notification, information or transaction received by the contract. Can be related to a specific standard or a hook. | +| `receivedData` | `bytes` | Any arbitrary data that was sent to the [`universalReceiver(...)`](#universalreceiver) function. | +| `returnedValue` | `bytes` | The value returned by the [`universalReceiver(...)`](#universalreceiver) function. | + +
+ +## Errors + +### ERC725X_ContractDeploymentFailed + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725x_contractdeploymentfailed) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725X_ContractDeploymentFailed()` +- Error hash: `0x0b07489b` + +::: + +```solidity +error ERC725X_ContractDeploymentFailed(); +``` + +Reverts when contract deployment failed via [`execute`](#execute) or [`executeBatch`](#executebatch) functions, This error can occur using either operation type 1 (`CREATE`) or 2 (`CREATE2`). + +
+ +### ERC725X_CreateOperationsRequireEmptyRecipientAddress + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725x_createoperationsrequireemptyrecipientaddress) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725X_CreateOperationsRequireEmptyRecipientAddress()` +- Error hash: `0x3041824a` + +::: + +```solidity +error ERC725X_CreateOperationsRequireEmptyRecipientAddress(); +``` + +Reverts when passing a `to` address that is not `address(0)` (= address zero) while deploying a contract via [`execute`](#execute) or [`executeBatch`](#executebatch) functions. This error can occur using either operation type 1 (`CREATE`) or 2 (`CREATE2`). + +
+ +### ERC725X_ExecuteParametersEmptyArray + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725x_executeparametersemptyarray) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725X_ExecuteParametersEmptyArray()` +- Error hash: `0xe9ad2b5f` + +::: + +```solidity +error ERC725X_ExecuteParametersEmptyArray(); +``` + +Reverts when one of the array parameter provided to the [`executeBatch`](#executebatch) function is an empty array. + +
+ +### ERC725X_ExecuteParametersLengthMismatch + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725x_executeparameterslengthmismatch) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725X_ExecuteParametersLengthMismatch()` +- Error hash: `0x3ff55f4d` + +::: + +```solidity +error ERC725X_ExecuteParametersLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `operationTypes`, `targets` addresses, `values`, and `datas` array parameters provided when calling the [`executeBatch`](#executebatch) function. + +
+ +### ERC725X_InsufficientBalance + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725x_insufficientbalance) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725X_InsufficientBalance(uint256,uint256)` +- Error hash: `0x0df9a8f8` + +::: + +```solidity +error ERC725X_InsufficientBalance(uint256 balance, uint256 value); +``` + +Reverts when trying to send more native tokens `value` than available in current `balance`. + +#### Parameters + +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------- | +| `balance` | `uint256` | The balance of native tokens of the ERC725X smart contract. | +| `value` | `uint256` | The amount of native tokens sent via `ERC725X.execute(...)`/`ERC725X.executeBatch(...)` that is greater than the contract's `balance`. | + +
+ +### ERC725X_MsgValueDisallowedInDelegateCall + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725x_msgvaluedisallowedindelegatecall) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725X_MsgValueDisallowedInDelegateCall()` +- Error hash: `0x5ac83135` + +::: + +```solidity +error ERC725X_MsgValueDisallowedInDelegateCall(); +``` + +Reverts when trying to send native tokens (`value` / `values[]` parameter of [`execute`](#execute) or [`executeBatch`](#executebatch) functions) while making a `delegatecall` (`operationType == 4`). Sending native tokens via `staticcall` is not allowed because `msg.value` is persisting. + +
+ +### ERC725X_MsgValueDisallowedInStaticCall + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725x_msgvaluedisallowedinstaticcall) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725X_MsgValueDisallowedInStaticCall()` +- Error hash: `0x72f2bc6a` + +::: + +```solidity +error ERC725X_MsgValueDisallowedInStaticCall(); +``` + +Reverts when trying to send native tokens (`value` / `values[]` parameter of [`execute`](#execute) or [`executeBatch`](#executebatch) functions) while making a `staticcall` (`operationType == 3`). Sending native tokens via `staticcall` is not allowed because it is a state changing operation. + +
+ +### ERC725X_NoContractBytecodeProvided + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725x_nocontractbytecodeprovided) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725X_NoContractBytecodeProvided()` +- Error hash: `0xb81cd8d9` + +::: + +```solidity +error ERC725X_NoContractBytecodeProvided(); +``` + +Reverts when no contract bytecode was provided as parameter when trying to deploy a contract via [`execute`](#execute) or [`executeBatch`](#executebatch). This error can occur using either operation type 1 (`CREATE`) or 2 (`CREATE2`). + +
+ +### ERC725X_UnknownOperationType + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725x_unknownoperationtype) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725X_UnknownOperationType(uint256)` +- Error hash: `0x7583b3bc` + +::: + +```solidity +error ERC725X_UnknownOperationType(uint256 operationTypeProvided); +``` + +Reverts when the `operationTypeProvided` is none of the default operation types available. (CALL = 0; CREATE = 1; CREATE2 = 2; STATICCALL = 3; DELEGATECALL = 4) + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | ------------------------------------------------------------------------------------------------------ | +| `operationTypeProvided` | `uint256` | The unrecognised operation type number provided to `ERC725X.execute(...)`/`ERC725X.executeBatch(...)`. | + +
+ +### ERC725Y_DataKeysValuesEmptyArray + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725y_datakeysvaluesemptyarray) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725Y_DataKeysValuesEmptyArray()` +- Error hash: `0x97da5f95` + +::: + +```solidity +error ERC725Y_DataKeysValuesEmptyArray(); +``` + +Reverts when one of the array parameter provided to [`setDataBatch`](#setdatabatch) function is an empty array. + +
+ +### ERC725Y_DataKeysValuesLengthMismatch + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` +- Error hash: `0x3bcc8979` + +::: + +```solidity +error ERC725Y_DataKeysValuesLengthMismatch(); +``` + +Reverts when there is not the same number of elements in the `datakeys` and `dataValues` array parameters provided when calling the [`setDataBatch`](#setdatabatch) function. + +
+ +### LSP14CallerNotPendingOwner + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#lsp14callernotpendingowner) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `LSP14CallerNotPendingOwner(address)` +- Error hash: `0x451e4528` + +::: + +```solidity +error LSP14CallerNotPendingOwner(address caller); +``` + +Reverts when the `caller` that is trying to accept ownership of the contract is not the pending owner. + +#### Parameters + +| Name | Type | Description | +| -------- | :-------: | ------------------------------------------- | +| `caller` | `address` | The address that tried to accept ownership. | + +
+ +### LSP14CannotTransferOwnershipToSelf + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#lsp14cannottransferownershiptoself) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `LSP14CannotTransferOwnershipToSelf()` +- Error hash: `0xe052a6f8` + +::: + +```solidity +error LSP14CannotTransferOwnershipToSelf(); +``` + +_Cannot transfer ownership to the address of the contract itself._ + +Reverts when trying to transfer ownership to the `address(this)`. + +
+ +### LSP14MustAcceptOwnershipInSeparateTransaction + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#lsp14mustacceptownershipinseparatetransaction) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `LSP14MustAcceptOwnershipInSeparateTransaction()` +- Error hash: `0x5758dd07` + +::: + +```solidity +error LSP14MustAcceptOwnershipInSeparateTransaction(); +``` + +_Cannot accept ownership in the same transaction with [`transferOwnership(...)`](#transferownership)._ + +Reverts when pending owner accept ownership in the same transaction of transferring ownership. + +
+ +### LSP14NotInRenounceOwnershipInterval + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#lsp14notinrenounceownershipinterval) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `LSP14NotInRenounceOwnershipInterval(uint256,uint256)` +- Error hash: `0x1b080942` + +::: + +```solidity +error LSP14NotInRenounceOwnershipInterval( + uint256 renounceOwnershipStart, + uint256 renounceOwnershipEnd +); +``` + +_Cannot confirm ownership renouncement yet. The ownership renouncement is allowed from: `renounceOwnershipStart` until: `renounceOwnershipEnd`._ + +Reverts when trying to renounce ownership before the initial confirmation delay. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ----------------------------------------------------------------------- | +| `renounceOwnershipStart` | `uint256` | The start timestamp when one can confirm the renouncement of ownership. | +| `renounceOwnershipEnd` | `uint256` | The end timestamp when one can confirm the renouncement of ownership. | + +
+ +### LSP20CallVerificationFailed + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#lsp20callverificationfailed) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `LSP20CallVerificationFailed(bool,bytes4)` +- Error hash: `0x9d6741e3` + +::: + +```solidity +error LSP20CallVerificationFailed(bool postCall, bytes4 returnedStatus); +``` + +reverts when the call to the owner does not return the LSP20 success value + +#### Parameters + +| Name | Type | Description | +| ---------------- | :------: | ------------------------------------------------------- | +| `postCall` | `bool` | True if the execution call was done, False otherwise | +| `returnedStatus` | `bytes4` | The bytes4 decoded data returned by the logic verifier. | + +
+ +### LSP20CallingVerifierFailed + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#lsp20callingverifierfailed) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `LSP20CallingVerifierFailed(bool)` +- Error hash: `0x8c6a8ae3` + +::: + +```solidity +error LSP20CallingVerifierFailed(bool postCall); +``` + +reverts when the call to the owner fail with no revert reason + +#### Parameters + +| Name | Type | Description | +| ---------- | :----: | ---------------------------------------------------- | +| `postCall` | `bool` | True if the execution call was done, False otherwise | + +
+ +### LSP20EOACannotVerifyCall + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#lsp20eoacannotverifycall) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `LSP20EOACannotVerifyCall(address)` +- Error hash: `0x0c392301` + +::: + +```solidity +error LSP20EOACannotVerifyCall(address logicVerifier); +``` + +Reverts when the logic verifier is an Externally Owned Account (EOA) that cannot return the LSP20 success value. + +#### Parameters + +| Name | Type | Description | +| --------------- | :-------: | --------------------------------- | +| `logicVerifier` | `address` | The address of the logic verifier | + +
+ +### NoExtensionFoundForFunctionSelector + +:::note References + +- Specification details: [**UniversalProfile**](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`UniversalProfile.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/universalprofile-contracts/contracts/UniversalProfile.sol) +- Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` +- Error hash: `0xbb370b2b` + +::: + +```solidity +error NoExtensionFoundForFunctionSelector(bytes4 functionSelector); +``` + +reverts when there is no extension for the function selector being called with + +#### Parameters + +| Name | Type | Description | +| ------------------ | :------: | ----------- | +| `functionSelector` | `bytes4` | - | + +
diff --git a/packages/lsp-smart-contracts/docs/libraries/LSP10ReceivedVaults/contracts/LSP10Utils.md b/packages/lsp-smart-contracts/docs/libraries/LSP10ReceivedVaults/contracts/LSP10Utils.md new file mode 100644 index 000000000..c67a1a257 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/libraries/LSP10ReceivedVaults/contracts/LSP10Utils.md @@ -0,0 +1,113 @@ + + + +# LSP10Utils + +:::info Standard Specifications + +[`LSP-10-ReceivedVaults`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-10-ReceivedVaults.md) + +::: +:::info Solidity implementation + +[`LSP10Utils.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp10-contracts/contracts/LSP10Utils.sol) + +::: + +> LSP10 Utility library. + +LSP5Utils is a library of functions that can be used to register and manage vaults received by an ERC725Y smart contract. Based on the LSP10 Received Vaults standard. + +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### generateReceivedVaultKeys + +:::caution Warning + +This function returns empty arrays when encountering errors. Otherwise the arrays will contain 3 data keys and 3 data values. + +::: + +```solidity +function generateReceivedVaultKeys( + address receiver, + address vaultAddress +) internal view returns (bytes32[] lsp10DataKeys, bytes[] lsp10DataValues); +``` + +Generate an array of data keys/values pairs to be set on the receiver address after receiving vaults. + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ------------------------------------------------------------------------------ | +| `receiver` | `address` | The address receiving the vault and where the LSP10 data keys should be added. | +| `vaultAddress` | `address` | The address of the vault being received. | + +#### Returns + +| Name | Type | Description | +| ----------------- | :---------: | --------------------------------------------------------------------- | +| `lsp10DataKeys` | `bytes32[]` | An array data keys used to update the [LSP-10-ReceivedAssets] data. | +| `lsp10DataValues` | `bytes[]` | An array data values used to update the [LSP-10-ReceivedAssets] data. | + +
+ +### generateSentVaultKeys + +:::caution Warning + +Returns empty arrays when encountering errors. Otherwise the arrays must have at least 3 data keys and 3 data values. + +::: + +```solidity +function generateSentVaultKeys( + address sender, + address vaultAddress +) internal view returns (bytes32[] lsp10DataKeys, bytes[] lsp10DataValues); +``` + +Generate an array of data key/value pairs to be set on the sender address after sending vaults. + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ------------------------------------------------------------------------------ | +| `sender` | `address` | The address sending the vault and where the LSP10 data keys should be updated. | +| `vaultAddress` | `address` | The address of the vault that is being sent. | + +#### Returns + +| Name | Type | Description | +| ----------------- | :---------: | --------------------------------------------------------------------- | +| `lsp10DataKeys` | `bytes32[]` | An array data keys used to update the [LSP-10-ReceivedAssets] data. | +| `lsp10DataValues` | `bytes[]` | An array data values used to update the [LSP-10-ReceivedAssets] data. | + +
+ +### getLSP10ArrayLengthBytes + +```solidity +function getLSP10ArrayLengthBytes(contract IERC725Y erc725YContract) internal view returns (bytes); +``` + +Get the raw bytes value stored under the `_LSP10_VAULTS_ARRAY_KEY`. + +#### Parameters + +| Name | Type | Description | +| ----------------- | :-----------------: | ----------------------------------------------- | +| `erc725YContract` | `contract IERC725Y` | The contract to query the ERC725Y storage from. | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ----------------------------------------------- | +| `0` | `bytes` | The raw bytes value stored under this data key. | + +
diff --git a/packages/lsp-smart-contracts/docs/libraries/LSP17ContractExtension/contracts/LSP17Utils.md b/packages/lsp-smart-contracts/docs/libraries/LSP17ContractExtension/contracts/LSP17Utils.md new file mode 100644 index 000000000..2a453dd95 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/libraries/LSP17ContractExtension/contracts/LSP17Utils.md @@ -0,0 +1,38 @@ + + + +# LSP17Utils + +:::info Standard Specifications + +[`LSP-17-ContractExtension`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-17-ContractExtension.md) + +::: +:::info Solidity implementation + +[`LSP17Utils.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp17contractextension-contracts/contracts/LSP17Extendable.sol) + +::: + +> LSP17 Utility library to check an extension + +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### isExtension + +```solidity +function isExtension( + uint256 parametersLengthWithOffset, + uint256 msgDataLength +) internal pure returns (bool); +``` + +Returns whether the call is a normal call or an extension call by checking if +the `parametersLengthWithOffset` with an additional of 52 bytes supposed msg.sender +and msg.value appended is equal to the msgDataLength + +
diff --git a/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/contracts/LSP1Utils.md b/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/contracts/LSP1Utils.md new file mode 100644 index 000000000..b57da1178 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/contracts/LSP1Utils.md @@ -0,0 +1,104 @@ + + + +# LSP1Utils + +:::info Standard Specifications + +[`LSP-1-UniversalReceiver`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-1-UniversalReceiver.md) + +::: +:::info Solidity implementation + +[`LSP1Utils.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol) + +::: + +> LSP1 Utility library. + +LSP1Utils is a library of utility functions that can be used to notify the `universalReceiver` function of a contract that implements LSP1 and retrieve informations related to LSP1 `typeId`. Based on LSP1 Universal Receiver standard. + +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### notifyUniversalReceiver + +```solidity +function notifyUniversalReceiver( + address lsp1Implementation, + bytes32 typeId, + bytes data +) internal nonpayable; +``` + +Notify a contract at `lsp1Implementation` address by calling its `universalReceiver` function if this contract +supports the LSP1 interface. + +#### Parameters + +| Name | Type | Description | +| -------------------- | :-------: | -------------------------------------------------------------------------------------------------- | +| `lsp1Implementation` | `address` | The address of the contract to notify. | +| `typeId` | `bytes32` | A `bytes32` typeId. | +| `data` | `bytes` | Any optional data to send to the `universalReceiver` function to the `lsp1Implementation` address. | + +
+ +### getLSP1DelegateValue + +```solidity +function getLSP1DelegateValue( + mapping(bytes32 => bytes) erc725YStorage +) internal view returns (bytes); +``` + +_Retrieving the value stored under the ERC725Y data key `LSP1UniversalReceiverDelegate`._ + +Query internally the ERC725Y storage of a `ERC725Y` smart contract to retrieve +the value set under the `LSP1UniversalReceiverDelegate` data key. + +#### Parameters + +| Name | Type | Description | +| ---------------- | :-------------------------: | ----------------------------------------------------------- | +| `erc725YStorage` | `mapping(bytes32 => bytes)` | A reference to the ERC725Y storage mapping of the contract. | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | -------------------------------------------------------------------------- | +| `0` | `bytes` | The bytes value stored under the `LSP1UniversalReceiverDelegate` data key. | + +
+ +### getLSP1DelegateValueForTypeId + +```solidity +function getLSP1DelegateValueForTypeId( + mapping(bytes32 => bytes) erc725YStorage, + bytes32 typeId +) internal view returns (bytes); +``` + +_Retrieving the value stored under the ERC725Y data key `LSP1UniversalReceiverDelegate:` for a specific `typeId`._ + +Query internally the ERC725Y storage of a `ERC725Y` smart contract to retrieve +the value set under the `LSP1UniversalReceiverDelegate:` data key for a specific LSP1 `typeId`. + +#### Parameters + +| Name | Type | Description | +| ---------------- | :-------------------------: | ----------------------------------------------------------- | +| `erc725YStorage` | `mapping(bytes32 => bytes)` | A reference to the ERC725Y storage mapping of the contract. | +| `typeId` | `bytes32` | A bytes32 LSP1 `typeId`; | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ------------------------------------------------------------------------------------ | +| `0` | `bytes` | The bytes value stored under the `LSP1UniversalReceiverDelegate:` data key. | + +
diff --git a/packages/lsp-smart-contracts/docs/libraries/LSP2ERC725YJSONSchema/contracts/LSP2Utils.md b/packages/lsp-smart-contracts/docs/libraries/LSP2ERC725YJSONSchema/contracts/LSP2Utils.md new file mode 100644 index 000000000..d11ffe885 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/libraries/LSP2ERC725YJSONSchema/contracts/LSP2Utils.md @@ -0,0 +1,439 @@ + + + +# LSP2Utils + +:::info Standard Specifications + +[`LSP-2-ERC725YJSONSchema`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-2-ERC725YJSONSchema.md) + +::: +:::info Solidity implementation + +[`LSP2Utils.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp2-contracts/contracts/LSP2Utils.sol) + +::: + +> LSP2 Utility library. + +LSP2Utils is a library of utility functions that can be used to encode data key of different key type defined on the LSP2 standard. Based on LSP2 ERC725Y JSON Schema standard. + +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### generateSingletonKey + +```solidity +function generateSingletonKey(string keyName) internal pure returns (bytes32); +``` + +Generates a data key of keyType Singleton by hashing the string `keyName`. As: + +``` +keccak256("keyName") +``` + +#### Parameters + +| Name | Type | Description | +| --------- | :------: | ---------------------------------------------------- | +| `keyName` | `string` | The string to hash to generate a Singleton data key. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------- | +| `0` | `bytes32` | The generated `bytes32` data key of key type Singleton. | + +
+ +### generateArrayKey + +```solidity +function generateArrayKey(string arrayKeyName) internal pure returns (bytes32); +``` + +Generates a data key of keyType Array by hashing `arrayKeyName`. As: + +``` +keccak256("arrayKeyName[]") +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | :------: | ---------------------------------------------------------------------- | +| `arrayKeyName` | `string` | The string that will be used to generate a data key of key type Array. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------------------------- | +| `0` | `bytes32` | The generated `bytes32` data key of key type Array. | + +
+ +### generateArrayElementKeyAtIndex + +```solidity +function generateArrayElementKeyAtIndex( + bytes32 arrayKey, + uint128 index +) internal pure returns (bytes32); +``` + +Generates an Array data key at a specific `index` by concatenating together the first 16 bytes of `arrayKey` +with the 16 bytes of `index`. As: + +``` +arrayKey[index] +``` + +#### Parameters + +| Name | Type | Description | +| ---------- | :-------: | ----------------------------------------------------------------------------------- | +| `arrayKey` | `bytes32` | The Array data key from which to generate the Array data key at a specific `index`. | +| `index` | `uint128` | The index number in the `arrayKey`. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------------------------- | +| `0` | `bytes32` | The generated `bytes32` data key of key type Array at a specific `index`. | + +
+ +### generateMappingKey + +```solidity +function generateMappingKey( + string firstWord, + string lastWord +) internal pure returns (bytes32); +``` + +Generates a data key of key type Mapping that map `firstWord` to `lastWord`. This is done by hashing two strings words `firstWord` and `lastWord`. As: + +``` +bytes10(firstWordHash):0000:bytes20(lastWordHash) +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | :------: | ---------------------------------------------------- | +| `firstWord` | `string` | The word to retrieve the first 10 bytes of its hash. | +| `lastWord` | `string` | The word to retrieve the first 10 bytes of its hash. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------------------------------------------------------------------------- | +| `0` | `bytes32` | The generated `bytes32` data key of key type Mapping that map `firstWord` to a specific `lastWord`. | + +
+ +### generateMappingKey + +```solidity +function generateMappingKey( + string firstWord, + address addr +) internal pure returns (bytes32); +``` + +Generates a data key of key type Mapping that map `firstWord` to an address `addr`. +This is done by hashing the string word `firstWord` and concatenating its first 10 bytes with `addr`. As: + +``` +bytes10(firstWordHash):0000:
+``` + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ---------------------------------------------------- | +| `firstWord` | `string` | The word to retrieve the first 10 bytes of its hash. | +| `addr` | `address` | An address to map `firstWord` to. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------------------------------------------------------- | +| `0` | `bytes32` | The generated `bytes32` data key of key type Mapping that map `firstWord` to a specific address `addr`. | + +
+ +### generateMappingKey + +```solidity +function generateMappingKey( + bytes10 keyPrefix, + bytes20 bytes20Value +) internal pure returns (bytes32); +``` + +Generate a data key of key type Mapping that map a 10 bytes `keyPrefix` to a `bytes20Value`. As: + +``` +keyPrefix:bytes20Value +``` + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ---------------------------------------------------- | +| `keyPrefix` | `bytes10` | The first part of the data key of key type Mapping. | +| `bytes20Value` | `bytes20` | The second part of the data key of key type Mapping. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------------------------------------------------------------------------------- | +| `0` | `bytes32` | The generated `bytes32` data key of key type Mapping that map a `keyPrefix` to a specific `bytes20Value`. | + +
+ +### generateMappingWithGroupingKey + +```solidity +function generateMappingWithGroupingKey( + string firstWord, + string secondWord, + address addr +) internal pure returns (bytes32); +``` + +Generate a data key of key type MappingWithGrouping by using two strings `firstWord` +mapped to a `secondWord` mapped itself to a specific address `addr`. As: + +``` +bytes6(keccak256("firstWord")):bytes4(keccak256("secondWord")):0000:
+``` + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ---------------------------------------------------------------- | +| `firstWord` | `string` | The word to retrieve the first 6 bytes of its hash. | +| `secondWord` | `string` | The word to retrieve the first 4 bytes of its hash. | +| `addr` | `address` | The address that makes the last part of the MappingWithGrouping. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------------------------------------------------------------------------------------------------------------- | +| `0` | `bytes32` | The generated `bytes32` data key of key type MappingWithGrouping that map a `firstWord` to a `secondWord` to a specific address `addr`. | + +
+ +### generateMappingWithGroupingKey + +```solidity +function generateMappingWithGroupingKey( + bytes6 keyPrefix, + bytes4 mapPrefix, + bytes20 subMapKey +) internal pure returns (bytes32); +``` + +Generate a data key of key type MappingWithGrouping that map a `keyPrefix` to an other `mapPrefix` to a specific `subMapKey`. As: + +``` +keyPrefix:mapPrefix:0000:subMapKey +``` + +#### Parameters + +| Name | Type | Description | +| ----------- | :-------: | ------------------------------------------------------------------------- | +| `keyPrefix` | `bytes6` | The first part (6 bytes) of the data key of keyType MappingWithGrouping. | +| `mapPrefix` | `bytes4` | The second part (4 bytes) of the data key of keyType MappingWithGrouping. | +| `subMapKey` | `bytes20` | The last part (bytes20) of the data key of keyType MappingWithGrouping. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ----------------------------------------------------------------------------------------------------------------------------------- | +| `0` | `bytes32` | The generated `bytes32` data key of key type MappingWithGrouping that map a `keyPrefix` to a `mapPrefix` to a specific `subMapKey`. | + +
+ +### generateMappingWithGroupingKey + +```solidity +function generateMappingWithGroupingKey( + bytes10 keyPrefix, + bytes20 bytes20Value +) internal pure returns (bytes32); +``` + +Generate a data key of key type MappingWithGrouping that map a 10 bytes `keyPrefix` to a specific `bytes20Value`. As: + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | -------------------------------------------------------------- | +| `keyPrefix` | `bytes10` | The first part of the data key of keyType MappingWithGrouping. | +| `bytes20Value` | `bytes20` | The last of the data key of keyType MappingWithGrouping. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | --------------------------------------------------------------------------------------- | +| `0` | `bytes32` | The generated `bytes32` data key of key type MappingWithGrouping that map a `keyPrefix` | + +
+ +### generateJSONURLValue + +```solidity +function generateJSONURLValue( + string hashFunction, + string json, + string url +) internal pure returns (bytes); +``` + +Generate a JSONURL value content. + +#### Parameters + +| Name | Type | Description | +| -------------- | :------: | ---------------------------------------- | +| `hashFunction` | `string` | The function used to hash the JSON file. | +| `json` | `string` | Bytes value of the JSON file. | +| `url` | `string` | The URL where the JSON file is hosted. | + +
+ +### generateASSETURLValue + +```solidity +function generateASSETURLValue( + string hashFunction, + string assetBytes, + string url +) internal pure returns (bytes); +``` + +Generate a ASSETURL value content. + +#### Parameters + +| Name | Type | Description | +| -------------- | :------: | ---------------------------------------- | +| `hashFunction` | `string` | The function used to hash the JSON file. | +| `assetBytes` | `string` | Bytes value of the JSON file. | +| `url` | `string` | The URL where the JSON file is hosted. | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ----------------------------------- | +| `0` | `bytes` | The encoded value as an `ASSETURL`. | + +
+ +### isCompactBytesArray + +```solidity +function isCompactBytesArray( + bytes compactBytesArray +) internal pure returns (bool); +``` + +Verify if `data` is a valid array of value encoded as a `CompactBytesArray` according to the LSP2 `CompactBytesArray` valueType specification. + +#### Parameters + +| Name | Type | Description | +| ------------------- | :-----: | -------------------------- | +| `compactBytesArray` | `bytes` | The bytes value to verify. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ------------------------------------------------------------------------------- | +| `0` | `bool` | `true` if the `data` is correctly encoded CompactBytesArray, `false` otherwise. | + +
+ +### isValidLSP2ArrayLengthValue + +```solidity +function isValidLSP2ArrayLengthValue( + bytes arrayLength +) internal pure returns (bool); +``` + +Validates if the bytes `arrayLength` are exactly 16 bytes long, and are of the exact size of an LSP2 Array length value + +#### Parameters + +| Name | Type | Description | +| ------------- | :-----: | ------------------------------------- | +| `arrayLength` | `bytes` | Plain bytes that should be validated. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | -------------------------------------------------------- | +| `0` | `bool` | `true` if the value is 16 bytes long, `false` otherwise. | + +
+ +### removeLastElementFromArrayAndMap + +```solidity +function removeLastElementFromArrayAndMap( + bytes32 arrayKey, + uint128 newArrayLength, + bytes32 removedElementIndexKey, + bytes32 removedElementMapKey +) internal pure returns (bytes32[] dataKeys, bytes[] dataValues); +``` + +Generates Data Key/Value pairs for removing the last element from an LSP2 Array and a mapping Data Key. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-------: | ------------------------------------------------------------- | +| `arrayKey` | `bytes32` | The Data Key of Key Type Array. | +| `newArrayLength` | `uint128` | The new Array Length for the `arrayKey`. | +| `removedElementIndexKey` | `bytes32` | The Data Key of Key Type Array Index for the removed element. | +| `removedElementMapKey` | `bytes32` | The Data Key of a mapping to be removed. | + +
+ +### removeElementFromArrayAndMap + +:::info + +The function assumes that the Data Value stored under the mapping Data Key is of length 20 where the last 16 bytes are the index of the element in the array. + +::: + +```solidity +function removeElementFromArrayAndMap(contract IERC725Y erc725YContract, bytes32 arrayKey, uint128 newArrayLength, bytes32 removedElementIndexKey, uint128 removedElementIndex, bytes32 removedElementMapKey) internal view returns (bytes32[] dataKeys, bytes[] dataValues); +``` + +Generates Data Key/Value pairs for removing an element from an LSP2 Array and a mapping Data Key. + +#### Parameters + +| Name | Type | Description | +| ------------------------ | :-----------------: | ------------------------------------------------------------- | +| `erc725YContract` | `contract IERC725Y` | The ERC725Y contract. | +| `arrayKey` | `bytes32` | The Data Key of Key Type Array. | +| `newArrayLength` | `uint128` | The new Array Length for the `arrayKey`. | +| `removedElementIndexKey` | `bytes32` | The Data Key of Key Type Array Index for the removed element. | +| `removedElementIndex` | `uint128` | the index of the removed element. | +| `removedElementMapKey` | `bytes32` | The Data Key of a mapping to be removed. | + +
diff --git a/packages/lsp-smart-contracts/docs/libraries/LSP5ReceivedAssets/contracts/LSP5Utils.md b/packages/lsp-smart-contracts/docs/libraries/LSP5ReceivedAssets/contracts/LSP5Utils.md new file mode 100644 index 000000000..527bb7622 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/libraries/LSP5ReceivedAssets/contracts/LSP5Utils.md @@ -0,0 +1,115 @@ + + + +# LSP5Utils + +:::info Standard Specifications + +[`LSP-5-ReceivedAssets`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-5-ReceivedAssets.md) + +::: +:::info Solidity implementation + +[`LSP5Utils.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp5-contracts/contracts/LSP5Utils.sol) + +::: + +> LSP5 Utility library. + +LSP5Utils is a library of functions that can be used to register and manage assets under an ERC725Y smart contract. Based on the LSP5 Received Assets standard. + +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### generateReceivedAssetKeys + +:::caution Warning + +Returns empty arrays when encountering errors. Otherwise the arrays must have 3 data keys and 3 data values. + +::: + +```solidity +function generateReceivedAssetKeys( + address receiver, + address assetAddress, + bytes4 assetInterfaceId +) internal view returns (bytes32[] lsp5DataKeys, bytes[] lsp5DataValues); +``` + +Generate an array of data key/value pairs to be set on the receiver address after receiving assets. + +#### Parameters + +| Name | Type | Description | +| ------------------ | :-------: | ----------------------------------------------------------------------------- | +| `receiver` | `address` | The address receiving the asset and where the LSP5 data keys should be added. | +| `assetAddress` | `address` | The address of the asset being received (_e.g: an LSP7 or LSP8 token_). | +| `assetInterfaceId` | `bytes4` | The interfaceID of the asset being received. | + +#### Returns + +| Name | Type | Description | +| ---------------- | :---------: | -------------------------------------------------------------------- | +| `lsp5DataKeys` | `bytes32[]` | An array Data Keys used to update the [LSP-5-ReceivedAssets] data. | +| `lsp5DataValues` | `bytes[]` | An array Data Values used to update the [LSP-5-ReceivedAssets] data. | + +
+ +### generateSentAssetKeys + +:::caution Warning + +Returns empty arrays when encountering errors. Otherwise the arrays must have at least 3 data keys and 3 data values. + +::: + +```solidity +function generateSentAssetKeys( + address sender, + address assetAddress +) internal view returns (bytes32[] lsp5DataKeys, bytes[] lsp5DataValues); +``` + +Generate an array of Data Key/Value pairs to be set on the sender address after sending assets. + +#### Parameters + +| Name | Type | Description | +| -------------- | :-------: | ----------------------------------------------------------------------------- | +| `sender` | `address` | The address sending the asset and where the LSP5 data keys should be updated. | +| `assetAddress` | `address` | The address of the asset that is being sent. | + +#### Returns + +| Name | Type | Description | +| ---------------- | :---------: | -------------------------------------------------------------------- | +| `lsp5DataKeys` | `bytes32[]` | An array Data Keys used to update the [LSP-5-ReceivedAssets] data. | +| `lsp5DataValues` | `bytes[]` | An array Data Values used to update the [LSP-5-ReceivedAssets] data. | + +
+ +### getLSP5ArrayLengthBytes + +```solidity +function getLSP5ArrayLengthBytes(contract IERC725Y erc725YContract) internal view returns (bytes); +``` + +Get the raw bytes value stored under the `_LSP5_RECEIVED_ASSETS_ARRAY_KEY`. + +#### Parameters + +| Name | Type | Description | +| ----------------- | :-----------------: | ----------------------------------------------- | +| `erc725YContract` | `contract IERC725Y` | The contract to query the ERC725Y storage from. | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | ----------------------------------------------- | +| `0` | `bytes` | The raw bytes value stored under this data key. | + +
diff --git a/packages/lsp-smart-contracts/docs/libraries/LSP6KeyManager/contracts/LSP6Utils.md b/packages/lsp-smart-contracts/docs/libraries/LSP6KeyManager/contracts/LSP6Utils.md new file mode 100644 index 000000000..d0d1d8ec5 --- /dev/null +++ b/packages/lsp-smart-contracts/docs/libraries/LSP6KeyManager/contracts/LSP6Utils.md @@ -0,0 +1,254 @@ + + + +# LSP6Utils + +:::info Standard Specifications + +[`LSP-6-KeyManager`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md) + +::: +:::info Solidity implementation + +[`LSP6Utils.sol`](https://github.com/lukso-network/lsp-smart-contracts/tree/develop/packages/lsp6-contracts/contracts/LSP6KeyManager.sol) + +::: + +> LSP6 Utility library. + +LSP6Utils is a library of utility functions that can be used to retrieve, check and set LSP6 permissions stored under the ERC725Y storage of a smart contract. Based on the LSP6 Key Manager standard. + +## Internal Methods + +Any method labeled as `internal` serves as utility function within the contract. They can be used when writing solidity contracts that inherit from this contract. These methods can be extended or modified by overriding their internal behavior to suit specific needs. + +Internal functions cannot be called externally, whether from other smart contracts, dApp interfaces, or backend services. Their restricted accessibility ensures that they remain exclusively available within the context of the current contract, promoting controlled and encapsulated usage of these internal utilities. + +### getPermissionsFor + +:::info + +If the raw value fetched from the ERC725Y storage of `target` is not 32 bytes long, this is considered +like _"no permissions are set"_ and will return 32 x `0x00` bytes as `bytes32(0)`. + +::: + +```solidity +function getPermissionsFor(contract IERC725Y target, address caller) internal view returns (bytes32); +``` + +Read the permissions of a `caller` on an ERC725Y `target` contract. + +#### Parameters + +| Name | Type | Description | +| -------- | :-----------------: | ----------------------------------------------------- | +| `target` | `contract IERC725Y` | An `IERC725Y` contract where to read the permissions. | +| `caller` | `address` | The controller address to read the permissions from. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------------------------ | +| `0` | `bytes32` | A `bytes32` BitArray containing the permissions of a controller address. | + +
+ +### getAllowedCallsFor + +```solidity +function getAllowedCallsFor(contract IERC725Y target, address from) internal view returns (bytes); +``` + +
+ +### getAllowedERC725YDataKeysFor + +```solidity +function getAllowedERC725YDataKeysFor(contract IERC725Y target, address caller) internal view returns (bytes); +``` + +Read the Allowed ERC725Y data keys of a `caller` on an ERC725Y `target` contract. + +#### Parameters + +| Name | Type | Description | +| -------- | :-----------------: | ----------------------------------------------------- | +| `target` | `contract IERC725Y` | An `IERC725Y` contract where to read the permissions. | +| `caller` | `address` | The controller address to read the permissions from. | + +#### Returns + +| Name | Type | Description | +| ---- | :-----: | --------------------------------------------------------------------------------------------------------- | +| `0` | `bytes` | An abi-encoded array of allowed ERC725 data keys that the controller address is allowed to interact with. | + +
+ +### hasPermission + +```solidity +function hasPermission( + bytes32 controllerPermissions, + bytes32 permissionToCheck +) internal pure returns (bool); +``` + +Compare the permissions `controllerPermissions` of a controller address to check if they includes the permissions `permissionToCheck`. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-------: | --------------------------------------------------------------------------------- | +| `controllerPermissions` | `bytes32` | The permissions of an address. | +| `permissionToCheck` | `bytes32` | The permissions to check if the controller has under its `controllerPermissions`. | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ---------------------------------------------------------------------------------- | +| `0` | `bool` | `true` if `controllerPermissions` includes `permissionToCheck`, `false` otherwise. | + +
+ +### isCompactBytesArrayOfAllowedCalls + +```solidity +function isCompactBytesArrayOfAllowedCalls( + bytes allowedCallsCompacted +) internal pure returns (bool); +``` + +Same as `LSP2Utils.isCompactBytesArray` with the additional requirement that each element must be 32 bytes long. + +#### Parameters + +| Name | Type | Description | +| ----------------------- | :-----: | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| `allowedCallsCompacted` | `bytes` | A compact bytes array of tuples `(bytes4,address,bytes4,bytes4)` to check (defined as `(bytes4,address,bytes4,bytes4)[CompactBytesArray]` in LSP6). | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | -------------------------------------------------------------------------------------------------------------- | +| `0` | `bool` | `true` if the value passed is a valid compact bytes array of bytes32 AllowedCalls elements, `false` otherwise. | + +
+ +### isCompactBytesArrayOfAllowedERC725YDataKeys + +```solidity +function isCompactBytesArrayOfAllowedERC725YDataKeys( + bytes allowedERC725YDataKeysCompacted +) internal pure returns (bool); +``` + +Same as `LSP2Utils.isCompactBytesArray` with the additional requirement that each element must be from 1 to 32 bytes long. + +#### Parameters + +| Name | Type | Description | +| --------------------------------- | :-----: | -------------------------------------------------------------------------------------------------------------------------------------- | +| `allowedERC725YDataKeysCompacted` | `bytes` | a compact bytes array of ERC725Y data Keys (full bytes32 data keys or bytesN prefix) to check (defined as `bytes[CompactBytesArray]`). | + +#### Returns + +| Name | Type | Description | +| ---- | :----: | ------------------------------------------------------------------------------------------------------------------ | +| `0` | `bool` | `true` if the value passed is a valid compact bytes array of bytes32 Allowed ERC725Y data keys, `false` otherwise. | + +
+ +### setDataViaKeyManager + +```solidity +function setDataViaKeyManager( + address keyManagerAddress, + bytes32[] keys, + bytes[] values +) internal nonpayable returns (bytes result); +``` + +Use the `setData(bytes32[],bytes[])` function via the KeyManager on the target contract. + +#### Parameters + +| Name | Type | Description | +| ------------------- | :---------: | ----------------------------------- | +| `keyManagerAddress` | `address` | The address of the KeyManager. | +| `keys` | `bytes32[]` | The array of `bytes32[]` data keys. | +| `values` | `bytes[]` | The array of `bytes[]` data values. | + +
+ +### combinePermissions + +```solidity +function combinePermissions( + bytes32[] permissions +) internal pure returns (bytes32); +``` + +Combine multiple permissions into a single `bytes32`. +Make sure that the sum of the values of the input array is less than `2^256-1 to avoid overflow. + +#### Parameters + +| Name | Type | Description | +| ------------- | :---------: | ------------------------------------ | +| `permissions` | `bytes32[]` | The array of permissions to combine. | + +#### Returns + +| Name | Type | Description | +| ---- | :-------: | ------------------------------------------------------ | +| `0` | `bytes32` | A `bytes32` value containing the combined permissions. | + +
+ +### generateNewPermissionsKeys + +```solidity +function generateNewPermissionsKeys(contract IERC725Y account, address controller, bytes32 permissions) internal view returns (bytes32[] keys, bytes[] values); +``` + +Generate a new set of 3 x LSP6 permission data keys to add a new `controller` on `account`. + +#### Parameters + +| Name | Type | Description | +| ------------- | :-----------------: | ----------------------------------------------------------------------------------------------- | +| `account` | `contract IERC725Y` | The ERC725Y contract to add the controller into (used to fetch the `LSP6Permissions[]` length). | +| `controller` | `address` | The address of the controller to grant permissions to. | +| `permissions` | `bytes32` | The `BitArray` of permissions to grant to the controller. | + +#### Returns + +| Name | Type | Description | +| -------- | :---------: | --------------------------------------- | +| `keys` | `bytes32[]` | An array of 3 x data keys containing: | +| `values` | `bytes[]` | An array of 3 x data values containing: | + +
+ +### getPermissionName + +```solidity +function getPermissionName(bytes32 permission) internal pure returns (string); +``` + +Returns the name of the permission as a string. + +#### Parameters + +| Name | Type | Description | +| ------------ | :-------: | ----------------------------------------------------------------------------------- | +| `permission` | `bytes32` | The low-level `bytes32` permission as a `BitArray` to get the permission name from. | + +#### Returns + +| Name | Type | Description | +| ---- | :------: | -------------------------------------------------- | +| `0` | `string` | The string name of the `bytes32` permission value. | + +
diff --git a/packages/lsp-smart-contracts/dodoc/postProcessingContracts.sh b/packages/lsp-smart-contracts/dodoc/postProcessingContracts.sh index 9c1ae135d..d5f9d9379 100644 --- a/packages/lsp-smart-contracts/dodoc/postProcessingContracts.sh +++ b/packages/lsp-smart-contracts/dodoc/postProcessingContracts.sh @@ -160,3 +160,166 @@ for folder in ./docs/contracts/@lukso/*; do done rm -rf ./docs/contracts/@lukso + +if [ -z "$(ls -A ./docs/contracts/@lukso)" ]; then + echo "Folder ./docs/contracts/@lukso is empty" + exit 1 +fi + +for folder in ./docs/contracts/@lukso/*; do + ## remove the longest string from right to left + ## which starts with "." + lspN=${folder##*/} + lspN=${lspN%%-*} + + case $lspN in + + lsp0) + mkdir ./docs/contracts/LSP0ERC725Account/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP0ERC725Account/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp14) + mkdir ./docs/contracts/LSP14Ownable2Step/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP14Ownable2Step/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp16) + mkdir ./docs/contracts/LSP16UniversalFactory/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP16UniversalFactory/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp17contractextension) + mkdir ./docs/contracts/LSP17ContractExtension/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP17ContractExtension/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp1delegate) + mkdir ./docs/contracts/LSP1UniversalReceiver/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP1UniversalReceiver/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp20) + mkdir ./docs/contracts/LSP20CallVerification/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP20CallVerification/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp23) + mkdir ./docs/contracts/LSP23LinkedContractsFactory/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP23LinkedContractsFactory/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp25) + mkdir ./docs/contracts/LSP25ExecuteRelayCall/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP25ExecuteRelayCall/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp4) + mkdir ./docs/contracts/LSP4DigitalAssetMetadata/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP4DigitalAssetMetadata/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp6) + mkdir ./docs/contracts/LSP6KeyManager/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP6KeyManager/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp7) + mkdir ./docs/contracts/LSP7DigitalAsset/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP7DigitalAsset/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp8) + mkdir ./docs/contracts/LSP8IdentifiableDigitalAsset/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP8IdentifiableDigitalAsset/ + + echo Contents from $folder/contracts have been moved + ;; + + lsp9) + mkdir ./docs/contracts/LSP9Vault/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/LSP9Vault/ + + echo Contents from $folder/contracts have been moved + ;; + + universalprofile) + mkdir ./docs/contracts/UniversalProfile/ + + cp -r \ + $folder/contracts/ \ + ./docs/contracts/UniversalProfile/ + + echo Contents from $folder/contracts have been moved + ;; + + *) + echo $lspN does not have post processing. + exit 1 + ;; + + esac +done + +rm -rf ./docs/contracts/@lukso From 50c53da4afc76039731017c5167246f4386de611 Mon Sep 17 00:00:00 2001 From: clarencepenz Date: Mon, 26 Feb 2024 04:05:39 +0100 Subject: [PATCH 10/94] docs: updated docs grammars to improve readability --- .../LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol | 6 +++--- .../LSP11BasicSocialRecoveryCore.sol | 4 ++-- .../Mocks/KeyManager/KeyManagerInternalsTester.sol | 2 +- packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol | 2 +- packages/lsp17-contracts/contracts/Extension4337.sol | 2 +- packages/lsp20-contracts/contracts/ILSP20CallVerifier.sol | 2 +- .../contracts/LSP23LinkedContractsFactory.sol | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol index 1a9bd23e9..4259c2b72 100644 --- a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol +++ b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol @@ -33,7 +33,7 @@ interface ILSP11BasicSocialRecovery { event SecretHashChanged(bytes32 indexed secretHash); /** - * @notice Emitted when a guardian select a new potentiel controller address for the target + * @notice Emitted when a guardian select a new potential controller address for the target * @param recoveryCounter The current recovery process counter * @param guardian The address of the guardian * @param addressSelected The address selected by the guardian @@ -119,7 +119,7 @@ interface ILSP11BasicSocialRecovery { * * Requirements: * - * - The guardians count should be higher or equal to the guardain threshold + * - The guardians count should be higher or equal to the guardian threshold */ function removeGuardian(address currentGuardian) external; @@ -147,7 +147,7 @@ interface ILSP11BasicSocialRecovery { function setGuardiansThreshold(uint256 guardiansThreshold) external; /** - * @dev select an address to be a potentiel controller address if he reaches + * @dev select an address to be a potential controller address if he reaches * the guardian threshold and provide the correct secret string * * Requirements: diff --git a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryCore.sol b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryCore.sol index 225c213e0..0dd64c689 100644 --- a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryCore.sol +++ b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryCore.sol @@ -51,7 +51,7 @@ abstract contract LSP11BasicSocialRecoveryCore is // The guardians threshold uint256 internal _guardiansThreshold; - // The number of successfull recovery processes + // The number of successful recovery processes uint256 internal _recoveryCounter; // The secret hash to be set by the owner @@ -323,7 +323,7 @@ abstract contract LSP11BasicSocialRecoveryCore is } /** - * @dev Remove the guardians choice after a successfull recovery process + * @dev Remove the guardians choice after a successful recovery process * To avoid keeping unnecessary state */ function _cleanStorage( diff --git a/packages/lsp-smart-contracts/contracts/Mocks/KeyManager/KeyManagerInternalsTester.sol b/packages/lsp-smart-contracts/contracts/Mocks/KeyManager/KeyManagerInternalsTester.sol index 61bdcf657..713911326 100644 --- a/packages/lsp-smart-contracts/contracts/Mocks/KeyManager/KeyManagerInternalsTester.sol +++ b/packages/lsp-smart-contracts/contracts/Mocks/KeyManager/KeyManagerInternalsTester.sol @@ -119,7 +119,7 @@ contract KeyManagerInternalTester is LSP6KeyManager { super._verifyPermissions(_target, from, false, payload); // This event is emitted just for a sake of not marking this function as `view`, - // as Hardhat has a bug that does not catch error that occured from failed `abi.decode` + // as Hardhat has a bug that does not catch error that occurred from failed `abi.decode` // inside view functions. // See these issues in the Github repository of Hardhat: // - https://github.com/NomicFoundation/hardhat/issues/3084 diff --git a/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol b/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol index 5a359bc45..b4abc0f3f 100644 --- a/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol +++ b/packages/lsp14-contracts/contracts/LSP14Ownable2Step.sol @@ -48,7 +48,7 @@ abstract contract LSP14Ownable2Step is ILSP14Ownable2Step, OwnableUnset { uint256 public constant RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD = 200; /** - * @dev The block number saved when initiating the process of renouncing ownerhsip. + * @dev The block number saved when initiating the process of renouncing ownership. */ uint256 internal _renounceOwnershipStartedAt; diff --git a/packages/lsp17-contracts/contracts/Extension4337.sol b/packages/lsp17-contracts/contracts/Extension4337.sol index 41c4bd2ee..81719b926 100644 --- a/packages/lsp17-contracts/contracts/Extension4337.sol +++ b/packages/lsp17-contracts/contracts/Extension4337.sol @@ -18,7 +18,7 @@ import { LSP17Extension } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Extension.sol"; -// librairies +// libraries import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {LSP6Utils} from "@lukso/lsp6-contracts/contracts/LSP6Utils.sol"; diff --git a/packages/lsp20-contracts/contracts/ILSP20CallVerifier.sol b/packages/lsp20-contracts/contracts/ILSP20CallVerifier.sol index f23eee193..da711dcb1 100644 --- a/packages/lsp20-contracts/contracts/ILSP20CallVerifier.sol +++ b/packages/lsp20-contracts/contracts/ILSP20CallVerifier.sol @@ -9,7 +9,7 @@ pragma solidity ^0.8.4; interface ILSP20CallVerifier { /** * @return returnedStatus MUST return the first 3 bytes of `lsp20VerifyCall(address,uint256,bytes)` function selector if the call to - * the function is allowed, concatened with a byte that determines if the lsp20VerifyCallResult function should + * the function is allowed, concatenated with a byte that determines if the lsp20VerifyCallResult function should * be called after the original function call. The byte that invoke the lsp20VerifyCallResult function is strictly `0x01`. * * @param requestor The address that requested to make the call to `target`. diff --git a/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol b/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol index 4239a1f29..f77a1e6b7 100644 --- a/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol +++ b/packages/lsp23-contracts/contracts/LSP23LinkedContractsFactory.sol @@ -378,7 +378,7 @@ contract LSP23LinkedContractsFactory is ILSP23LinkedContractsFactory { * - the secondary contract addPrimaryContractAddress boolean * - the secondary contract extra initialization params (if any) * - the postDeploymentModule address - * - the callda to the post deployment module + * - the calldata to the post deployment module * */ primaryContractProxyGeneratedSalt = keccak256( From fbb2de1f31b1fb87ab220a535e75afc9580071d7 Mon Sep 17 00:00:00 2001 From: clarencepenz Date: Thu, 15 Feb 2024 21:38:17 +0100 Subject: [PATCH 11/94] docs: updated docs grammars to improve readability --- .../LSP1UniversalReceiverDelegateUP.md | 4 ++-- .../LSP1UniversalReceiverDelegateVault.md | 6 +++--- .../docs/contracts/LSP6KeyManager/LSP6KeyManager.md | 6 +++--- .../contracts/LSP7DigitalAsset/LSP7DigitalAsset.md | 8 ++++---- .../contracts/extensions/LSP7Burnable.md | 8 ++++---- .../contracts/extensions/LSP7CappedSupply.md | 10 +++++----- .../LSP7DigitalAsset/contracts/presets/LSP7Mintable.md | 8 ++++---- .../LSP8IdentifiableDigitalAsset.md | 6 +++--- .../contracts/extensions/LSP8Burnable.md | 6 +++--- .../contracts/extensions/LSP8CappedSupply.md | 8 ++++---- .../contracts/extensions/LSP8Enumerable.md | 4 ++-- .../contracts/presets/LSP8Mintable.md | 6 +++--- 12 files changed, 40 insertions(+), 40 deletions(-) diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP.md b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP.md index c14868d52..7900ad01d 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP.md @@ -96,8 +96,8 @@ See [`IERC165-supportsInterface`](#ierc165-supportsinterface). :::info -- If some issues occured with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. -- If an error occured when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. +- If some issues occurred with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. +- If an error occurred when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. ::: diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.md b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.md index d0356d3bd..21e75e7b2 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.md @@ -94,8 +94,8 @@ See [`IERC165-supportsInterface`](#ierc165-supportsinterface). :::info -- If some issues occured with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. -- If an error occured when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. +- If some issues occurred with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. +- If an error occurred when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. ::: @@ -194,7 +194,7 @@ function _setDataBatchWithoutReverting( ) internal nonpayable returns (bytes); ``` -Calls `bytes4(keccak256(setDataBatch(bytes32[],bytes[])))` without checking for `bool succes`, but it returns all the data back. +Calls `bytes4(keccak256(setDataBatch(bytes32[],bytes[])))` without checking for `bool success`, but it returns all the data back. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/LSP6KeyManager.md b/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/LSP6KeyManager.md index 852ea357c..f29dd252a 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/LSP6KeyManager.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/LSP6KeyManager.md @@ -241,7 +241,7 @@ function executeRelayCallBatch( _Executing a batch of relay calls (= meta-transactions)._ -Same as [`executeRelayCall`](#executerelaycall) but execute a batch of signed calldata payloads (abi-encoded function calls) in a single transaction. The `signatures` can be from multiple controllers, not necessarely the same controller, as long as each of these controllers that signed have the right permissions related to the calldata `payload` they signed. +Same as [`executeRelayCall`](#executerelaycall) but execute a batch of signed calldata payloads (abi-encoded function calls) in a single transaction. The `signatures` can be from multiple controllers, not necessarily the same controller, as long as each of these controllers that signed have the right permissions related to the calldata `payload` they signed.
@@ -286,7 +286,7 @@ Same as [`executeRelayCall`](#executerelaycall) but execute a batch of signed ca A signer can choose its channel number arbitrarily. The recommended practice is to: - use `channelId == 0` for transactions for which the ordering of execution matters.abi _Example: you have two transactions A and B, and transaction A must be executed first and complete successfully before transaction B should be executed)._ -- use any other `channelId` number for transactions that you want to be order independant (out-of-order execution, execution _"in parallel"_). \_Example: you have two transactions A and B. You want transaction B to be executed a) without having to wait for transaction A to complete, or b) regardless if transaction A completed successfully or not. +- use any other `channelId` number for transactions that you want to be order independent (out-of-order execution, execution _"in parallel"_). \_Example: you have two transactions A and B. You want transaction B to be executed a) without having to wait for transaction A to complete, or b) regardless if transaction A completed successfully or not. ::: @@ -401,7 +401,7 @@ function lsp20VerifyCall( | Name | Type | Description | | ---- | :------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `0` | `bytes4` | MUST return the first 3 bytes of `lsp20VerifyCall(address,uint256,bytes)` function selector if the call to the function is allowed, concatened with a byte that determines if the lsp20VerifyCallResult function should be called after the original function call. The byte that invoke the lsp20VerifyCallResult function is strictly `0x01`. | +| `0` | `bytes4` | MUST return the first 3 bytes of `lsp20VerifyCall(address,uint256,bytes)` function selector if the call to the function is allowed, concatenated with a byte that determines if the lsp20VerifyCallResult function should be called after the original function call. The byte that invoke the lsp20VerifyCallResult function is strictly `0x01`. |
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md index 2bbcd5109..0c3eaa25d 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md @@ -234,7 +234,7 @@ Allows a caller to batch different function calls in one call. Perform a `delega function decimals() external view returns (uint8); ``` -Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned will be `0`. Otherwise `18` is the common value. #### Returns @@ -937,7 +937,7 @@ Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOw | --------------- | :-------: | ------------------------------------------------------------------- | | `operator` | `address` | The address of the operator to decrease the allowance of. | | `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | -| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to subtract in allowance of `operator`. |
@@ -1001,7 +1001,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1026,7 +1026,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7Burnable.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7Burnable.md index d5ecec050..88247cfaa 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7Burnable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7Burnable.md @@ -259,7 +259,7 @@ See internal [`_burn`](#_burn) function for details. function decimals() external view returns (uint8); ``` -Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned will be `0`. Otherwise `18` is the common value. #### Returns @@ -962,7 +962,7 @@ Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOw | --------------- | :-------: | ------------------------------------------------------------------- | | `operator` | `address` | The address of the operator to decrease the allowance of. | | `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | -| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to subtract in allowance of `operator`. |
@@ -1026,7 +1026,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1051,7 +1051,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7CappedSupply.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7CappedSupply.md index 5c0d29917..e6154a21b 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7CappedSupply.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/extensions/LSP7CappedSupply.md @@ -232,7 +232,7 @@ Allows a caller to batch different function calls in one call. Perform a `delega function decimals() external view returns (uint8); ``` -Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned will be `0`. Otherwise `18` is the common value. #### Returns @@ -634,7 +634,7 @@ function tokenSupplyCap() external view returns (uint256); _The maximum supply amount of tokens allowed to exist is `_TOKEN_SUPPLY_CAP`._ -Get the maximum number of tokens that can exist to circulate. Once [`totalSupply`](#totalsupply) reaches reaches [`totalSuuplyCap`](#totalsuuplycap), it is not possible to mint more tokens. +Get the maximum number of tokens that can exist to circulate. Once [`totalSupply`](#totalsupply) reaches reaches [`totalSupplyCap`](#totalsupplycap), it is not possible to mint more tokens. #### Returns @@ -936,7 +936,7 @@ Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOw | --------------- | :-------: | ------------------------------------------------------------------- | | `operator` | `address` | The address of the operator to decrease the allowance of. | | `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | -| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to subtract in allowance of `operator`. |
@@ -1000,7 +1000,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1025,7 +1025,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md index 99fde2ae2..af161f73a 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md @@ -265,7 +265,7 @@ Allows a caller to batch different function calls in one call. Perform a `delega function decimals() external view returns (uint8); ``` -Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned will be `0`. Otherwise `18` is the common value. #### Returns @@ -1001,7 +1001,7 @@ Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOw | --------------- | :-------: | ------------------------------------------------------------------- | | `operator` | `address` | The address of the operator to decrease the allowance of. | | `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | -| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to subtract in allowance of `operator`. |
@@ -1065,7 +1065,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1090,7 +1090,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md index aa24a6377..85dff69bb 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md @@ -769,7 +769,7 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If | `from` | `address` | The address that owns the given `tokenId`. | | `to` | `address` | The address that will receive the `tokenId`. | | `tokenId` | `bytes32` | The token ID to transfer. | -| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | | `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
@@ -1185,7 +1185,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1210,7 +1210,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Burnable.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Burnable.md index 3d623117a..9f703d2e4 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Burnable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Burnable.md @@ -795,7 +795,7 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If | `from` | `address` | The address that owns the given `tokenId`. | | `to` | `address` | The address that will receive the `tokenId`. | | `tokenId` | `bytes32` | The token ID to transfer. | -| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | | `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
@@ -1211,7 +1211,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1236,7 +1236,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8CappedSupply.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8CappedSupply.md index 9841715d8..43b948009 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8CappedSupply.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8CappedSupply.md @@ -729,7 +729,7 @@ function tokenSupplyCap() external view returns (uint256); _The maximum supply amount of tokens allowed to exist is `_TOKEN_SUPPLY_CAP`._ -Get the maximum number of tokens that can exist to circulate. Once [`totalSupply`](#totalsupply) reaches reaches [`totalSuuplyCap`](#totalsuuplycap), it is not possible to mint more tokens. +Get the maximum number of tokens that can exist to circulate. Once [`totalSupply`](#totalsupply) reaches reaches [`totalSupplyCap`](#totalsupplycap), it is not possible to mint more tokens. #### Returns @@ -794,7 +794,7 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If | `from` | `address` | The address that owns the given `tokenId`. | | `to` | `address` | The address that will receive the `tokenId`. | | `tokenId` | `bytes32` | The token ID to transfer. | -| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | | `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
@@ -1185,7 +1185,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1210,7 +1210,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Enumerable.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Enumerable.md index 37095361c..db685e7a8 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Enumerable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/extensions/LSP8Enumerable.md @@ -800,7 +800,7 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If | `from` | `address` | The address that owns the given `tokenId`. | | `to` | `address` | The address that will receive the `tokenId`. | | `tokenId` | `bytes32` | The token ID to transfer. | -| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | | `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
@@ -1238,7 +1238,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/presets/LSP8Mintable.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/presets/LSP8Mintable.md index bdaaa1fce..e665e656a 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/presets/LSP8Mintable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/presets/LSP8Mintable.md @@ -835,7 +835,7 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If | `from` | `address` | The address that owns the given `tokenId`. | | `to` | `address` | The address that will receive the `tokenId`. | | `tokenId` | `bytes32` | The token ID to transfer. | -| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | | `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
@@ -1251,7 +1251,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1276,7 +1276,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. #### Parameters From e1f542075442d6a19f58bdaa5a385a5af0e63987 Mon Sep 17 00:00:00 2001 From: clarencepenz Date: Fri, 16 Feb 2024 22:38:11 +0100 Subject: [PATCH 12/94] docs: updated docs grammars to improve readability --- .../contracts/LSP0ERC725AccountInitAbstract.sol | 2 +- .../contracts/LSP1UniversalReceiverDelegateUP.sol | 4 ++-- .../contracts/LSP1UniversalReceiverDelegateVault.sol | 6 +++--- packages/lsp6-contracts/contracts/ILSP6KeyManager.sol | 2 +- packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol | 4 ++-- .../contracts/LSP6Modules/LSP6SetDataModule.sol | 2 +- packages/lsp7-contracts/contracts/ILSP7DigitalAsset.sol | 2 +- packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol | 6 +++--- .../contracts/extensions/LSP7CappedSupply.sol | 2 +- .../contracts/extensions/LSP7CappedSupplyInitAbstract.sol | 2 +- .../contracts/ILSP8IdentifiableDigitalAsset.sol | 2 +- .../contracts/LSP8IdentifiableDigitalAssetCore.sol | 4 ++-- .../contracts/extensions/LSP8CappedSupply.sol | 2 +- .../contracts/extensions/LSP8CappedSupplyInitAbstract.sol | 2 +- 14 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/lsp0-contracts/contracts/LSP0ERC725AccountInitAbstract.sol b/packages/lsp0-contracts/contracts/LSP0ERC725AccountInitAbstract.sol index 1ba4f4d38..3496a636b 100644 --- a/packages/lsp0-contracts/contracts/LSP0ERC725AccountInitAbstract.sol +++ b/packages/lsp0-contracts/contracts/LSP0ERC725AccountInitAbstract.sol @@ -28,7 +28,7 @@ abstract contract LSP0ERC725AccountInitAbstract is * * @param initialOwner The owner of the contract. * - * @custom:warning ERC725X & ERC725Y parent contracts are not initialixed as they don't have non-zero initial state. + * @custom:warning ERC725X & ERC725Y parent contracts are not initialized as they don't have non-zero initial state. * If you decide to add non-zero initial state to any of those contracts, you MUST initialize them here. * * @custom:events diff --git a/packages/lsp1delegate-contracts/contracts/LSP1UniversalReceiverDelegateUP.sol b/packages/lsp1delegate-contracts/contracts/LSP1UniversalReceiverDelegateUP.sol index b316a6ca3..147f60162 100644 --- a/packages/lsp1delegate-contracts/contracts/LSP1UniversalReceiverDelegateUP.sol +++ b/packages/lsp1delegate-contracts/contracts/LSP1UniversalReceiverDelegateUP.sol @@ -98,8 +98,8 @@ contract LSP1UniversalReceiverDelegateUP is * - Cannot accept native tokens * * @custom:info - * - If some issues occured with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. - * - If an error occured when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. + * - If some issues occurred with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. + * - If an error occurred when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. * * @param typeId Unique identifier for a specific notification. * @return The result of the reaction for `typeId`. diff --git a/packages/lsp1delegate-contracts/contracts/LSP1UniversalReceiverDelegateVault.sol b/packages/lsp1delegate-contracts/contracts/LSP1UniversalReceiverDelegateVault.sol index a06d34f77..73b95c8da 100644 --- a/packages/lsp1delegate-contracts/contracts/LSP1UniversalReceiverDelegateVault.sol +++ b/packages/lsp1delegate-contracts/contracts/LSP1UniversalReceiverDelegateVault.sol @@ -81,8 +81,8 @@ contract LSP1UniversalReceiverDelegateVault is * * @custom:requirements Cannot accept native tokens. * @custom:info - * - If some issues occured with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. - * - If an error occured when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. + * - If some issues occurred with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. + * - If an error occurred when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. * * @param typeId Unique identifier for a specific notification. * @return The result of the reaction for `typeId`. @@ -191,7 +191,7 @@ contract LSP1UniversalReceiverDelegateVault is } /** - * @dev Calls `bytes4(keccak256(setDataBatch(bytes32[],bytes[])))` without checking for `bool succes`, but it returns all the data back. + * @dev Calls `bytes4(keccak256(setDataBatch(bytes32[],bytes[])))` without checking for `bool success`, but it returns all the data back. * * @custom:info If an the low-level transaction revert, the returned data will be forwarded. Th contract that uses this function can use the `Address` library to revert with the revert reason. * diff --git a/packages/lsp6-contracts/contracts/ILSP6KeyManager.sol b/packages/lsp6-contracts/contracts/ILSP6KeyManager.sol index f9e7ef258..e0ed5b522 100644 --- a/packages/lsp6-contracts/contracts/ILSP6KeyManager.sol +++ b/packages/lsp6-contracts/contracts/ILSP6KeyManager.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.4; import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol"; /** - * @title Interface of the LSP6 - Key Manager standard, a contract acting as a controller of an ERC725 Account using predfined permissions. + * @title Interface of the LSP6 - Key Manager standard, a contract acting as a controller of an ERC725 Account using predefined permissions. */ interface ILSP6KeyManager is IERC1271 diff --git a/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol b/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol index 6021b476c..0e056273d 100644 --- a/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol +++ b/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol @@ -135,7 +135,7 @@ abstract contract LSP6KeyManagerCore is * _Example: you have two transactions A and B, and transaction A must be executed first and complete successfully before * transaction B should be executed)._ * - * - use any other `channelId` number for transactions that you want to be order independant (out-of-order execution, execution _"in parallel"_). + * - use any other `channelId` number for transactions that you want to be order independent (out-of-order execution, execution _"in parallel"_). * * _Example: you have two transactions A and B. You want transaction B to be executed a) without having to wait for transaction A to complete, * or b) regardless if transaction A completed successfully or not. @@ -265,7 +265,7 @@ abstract contract LSP6KeyManagerCore is * * @dev Same as {executeRelayCall} but execute a batch of signed calldata payloads (abi-encoded function calls) in a single transaction. * - * The `signatures` can be from multiple controllers, not necessarely the same controller, as long as each of these controllers + * The `signatures` can be from multiple controllers, not necessarily the same controller, as long as each of these controllers * that signed have the right permissions related to the calldata `payload` they signed. * * @custom:requirements diff --git a/packages/lsp6-contracts/contracts/LSP6Modules/LSP6SetDataModule.sol b/packages/lsp6-contracts/contracts/LSP6Modules/LSP6SetDataModule.sol index 457f3d2e9..7d6da34ba 100644 --- a/packages/lsp6-contracts/contracts/LSP6Modules/LSP6SetDataModule.sol +++ b/packages/lsp6-contracts/contracts/LSP6Modules/LSP6SetDataModule.sol @@ -217,7 +217,7 @@ abstract contract LSP6SetDataModule { // AddressPermissions:... } else if (bytes6(inputDataKey) == _LSP6KEY_ADDRESSPERMISSIONS_PREFIX) { - // same as above, save gas by avoiding redundants or unecessary external calls to fetch values from the `target` storage. + // same as above, save gas by avoiding redundant or unnecessary external calls to fetch values from the `target` storage. bool hasBothAddControllerAndEditPermissions = controllerPermissions .hasPermission( _PERMISSION_ADDCONTROLLER | _PERMISSION_EDITPERMISSIONS diff --git a/packages/lsp7-contracts/contracts/ILSP7DigitalAsset.sol b/packages/lsp7-contracts/contracts/ILSP7DigitalAsset.sol index 1fafbe646..ce0055254 100644 --- a/packages/lsp7-contracts/contracts/ILSP7DigitalAsset.sol +++ b/packages/lsp7-contracts/contracts/ILSP7DigitalAsset.sol @@ -65,7 +65,7 @@ interface ILSP7DigitalAsset is IERC165, IERC725Y { /** * @dev Returns the number of decimals used to get its user representation. * If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in - * the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. + * the `constructor`, the decimals returned will be `0`. Otherwise `18` is the common value. * * @custom:notice This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol index 6b54dc843..3ec5676bb 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol @@ -538,7 +538,7 @@ abstract contract LSP7DigitalAssetCore is ILSP7DigitalAsset { * * @param operator The address of the operator to decrease the allowance of. * @param tokenOwner The address that granted an allowance on its balance to `operator`. - * @param amountToSpend The amount of tokens to substract in allowance of `operator`. + * @param amountToSpend The amount of tokens to subtract in allowance of `operator`. * * @custom:events * - {OperatorRevoked} event when operator's allowance is set to `0`. @@ -641,7 +641,7 @@ abstract contract LSP7DigitalAssetCore is ILSP7DigitalAsset { /** * @dev Hook that is called before any token transfer, including minting and burning. - * Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. + * Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. * * @param from The sender address * @param to The recipient address @@ -657,7 +657,7 @@ abstract contract LSP7DigitalAssetCore is ILSP7DigitalAsset { /** * @dev Hook that is called after any token transfer, including minting and burning. - * Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. + * Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. * * @param from The sender address * @param to The recipient address diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7CappedSupply.sol b/packages/lsp7-contracts/contracts/extensions/LSP7CappedSupply.sol index 6d3eb98f9..5bb34d42a 100644 --- a/packages/lsp7-contracts/contracts/extensions/LSP7CappedSupply.sol +++ b/packages/lsp7-contracts/contracts/extensions/LSP7CappedSupply.sol @@ -50,7 +50,7 @@ abstract contract LSP7CappedSupply is LSP7DigitalAsset { * @notice The maximum supply amount of tokens allowed to exist is `_TOKEN_SUPPLY_CAP`. * * @dev Get the maximum number of tokens that can exist to circulate. Once {totalSupply} reaches - * reaches {totalSuuplyCap}, it is not possible to mint more tokens. + * reaches {totalSupplyCap}, it is not possible to mint more tokens. * * @return The maximum number of tokens that can exist in the contract. */ diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7CappedSupplyInitAbstract.sol b/packages/lsp7-contracts/contracts/extensions/LSP7CappedSupplyInitAbstract.sol index 86acdb471..90cb15fc4 100644 --- a/packages/lsp7-contracts/contracts/extensions/LSP7CappedSupplyInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/extensions/LSP7CappedSupplyInitAbstract.sol @@ -53,7 +53,7 @@ abstract contract LSP7CappedSupplyInitAbstract is LSP7DigitalAssetInitAbstract { /** * @notice The maximum supply amount of tokens allowed to exist is `_tokenSupplyCap`. * @dev Get the maximum number of tokens that can exist to circulate. Once {totalSupply} reaches - * reaches {totalSuuplyCap}, it is not possible to mint more tokens. + * reaches {totalSupplyCap}, it is not possible to mint more tokens. * * @return The maximum number of tokens that can exist in the contract. */ diff --git a/packages/lsp8-contracts/contracts/ILSP8IdentifiableDigitalAsset.sol b/packages/lsp8-contracts/contracts/ILSP8IdentifiableDigitalAsset.sol index 32cb7e0a8..2e596194d 100644 --- a/packages/lsp8-contracts/contracts/ILSP8IdentifiableDigitalAsset.sol +++ b/packages/lsp8-contracts/contracts/ILSP8IdentifiableDigitalAsset.sol @@ -254,7 +254,7 @@ interface ILSP8IdentifiableDigitalAsset is IERC165, IERC725Y { * @param from The address that owns the given `tokenId`. * @param to The address that will receive the `tokenId`. * @param tokenId The token ID to transfer. - * @param force When set to `true`, the `to` address CAN be any addres. + * @param force When set to `true`, the `to` address CAN be any address. * When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. * @param data Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. * diff --git a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetCore.sol b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetCore.sol index 2190531a7..13176216e 100644 --- a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetCore.sol +++ b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetCore.sol @@ -706,7 +706,7 @@ abstract contract LSP8IdentifiableDigitalAssetCore is /** * @dev Hook that is called before any token transfer, including minting and burning. - * Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. + * Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. * * @param from The sender address * @param to The recipient address @@ -722,7 +722,7 @@ abstract contract LSP8IdentifiableDigitalAssetCore is /** * @dev Hook that is called after any token transfer, including minting and burning. - * Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. + * Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. * * @param from The sender address * @param to The recipient address diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8CappedSupply.sol b/packages/lsp8-contracts/contracts/extensions/LSP8CappedSupply.sol index c9166c3e6..62908ddec 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8CappedSupply.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8CappedSupply.sol @@ -51,7 +51,7 @@ abstract contract LSP8CappedSupply is LSP8IdentifiableDigitalAsset { * @notice The maximum supply amount of tokens allowed to exist is `_TOKEN_SUPPLY_CAP`. * * @dev Get the maximum number of tokens that can exist to circulate. Once {totalSupply} reaches - * reaches {totalSuuplyCap}, it is not possible to mint more tokens. + * reaches {totalSupplyCap}, it is not possible to mint more tokens. * * @return The maximum number of tokens that can exist in the contract. */ diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8CappedSupplyInitAbstract.sol b/packages/lsp8-contracts/contracts/extensions/LSP8CappedSupplyInitAbstract.sol index 61090f2df..f6eedef5e 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8CappedSupplyInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8CappedSupplyInitAbstract.sol @@ -54,7 +54,7 @@ abstract contract LSP8CappedSupplyInitAbstract is * @notice The maximum supply amount of tokens allowed to exist is `_tokenSupplyCap`. * * @dev Get the maximum number of tokens that can exist to circulate. Once {totalSupply} reaches - * reaches {totalSuuplyCap}, it is not possible to mint more tokens. + * reaches {totalSupplyCap}, it is not possible to mint more tokens. * * @return The maximum number of tokens that can exist in the contract. */ From d824d921ca6622c27c8ec7f099d0c7d134bc64bc Mon Sep 17 00:00:00 2001 From: CJ42 Date: Wed, 24 Jul 2024 17:13:31 +0100 Subject: [PATCH 13/94] ci: use `tags` from hardhat deploy plugin to simplify deploy + verify workflow --- .github/workflows/deploy-verify.yml | 21 +++++-------------- deploy/007_deploy_base_key_manager.ts | 1 - .../lsp-smart-contracts/hardhat.config.ts | 7 +++++++ 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/.github/workflows/deploy-verify.yml b/.github/workflows/deploy-verify.yml index b8c067c4d..410b78a52 100644 --- a/.github/workflows/deploy-verify.yml +++ b/.github/workflows/deploy-verify.yml @@ -1,5 +1,5 @@ -# This workflow deploys and verify the lsp-smart-contracts and verify them on LUKSO Testnet. -name: Deploy + Verify Contracts on Testnet +# This workflow deploys and verify the lsp-smart-contracts and verify them on LUKSO Mainnet & Testnet. +name: Deploy + Verify Contracts env: # 0x983aBC616f2442bAB7a917E6bb8660Df8b01F3bF @@ -38,21 +38,10 @@ jobs: - name: Verify Deployer Balance run: npx hardhat verify-balance --network ${{ matrix.network }} - # We do not deploy the standard contracts on mainnet for the following reasons: - # 1) standard contracts are expensive to deploy on mainnet - # 2) user's universal profiles use the minimal proxy pattern, - # - # therefore we only need the base contracts to be deployed on mainnet. - - name: Select tags based on network to deploy - run: | - TAGS="base" - if [[ ${{ matrix.network }} == "luksoTestnet"]]; then - TAGS+=",standard" - fi - - - name: Deploy contracts on network + # The array of `tags` under each network in `hardhat.config.ts` specify which contracts to deploy + - name: Deploy contracts on ${{ matrix.network }} run: npx hardhat deploy --network ${{ matrix.network }} --tags $TAGS --write true # Loop through deployment files and recover address of deployed contracts to verify - - name: Verify deployed contracts on mainnet + - name: Verify deployed contracts on ${{ matrix.network }} run: npx hardhat verify-all --network ${{ matrix.network }} diff --git a/deploy/007_deploy_base_key_manager.ts b/deploy/007_deploy_base_key_manager.ts index f314be008..5c2e9d380 100644 --- a/deploy/007_deploy_base_key_manager.ts +++ b/deploy/007_deploy_base_key_manager.ts @@ -12,7 +12,6 @@ const deployBaseKeyManagerDeterministic: DeployFunction = async ({ await deploy('LSP6KeyManagerInit', { from: deployer, log: true, - gasLimit: 5_000_000, deterministicDeployment: SALT, }); }; diff --git a/packages/lsp-smart-contracts/hardhat.config.ts b/packages/lsp-smart-contracts/hardhat.config.ts index 359de100c..03306791e 100644 --- a/packages/lsp-smart-contracts/hardhat.config.ts +++ b/packages/lsp-smart-contracts/hardhat.config.ts @@ -85,6 +85,7 @@ function getTestnetChainConfig(): NetworkUserConfig { url: 'https://rpc.testnet.lukso.network', chainId: 4201, saveDeployments: true, + tags: ['standard', 'base'], }; if (process.env.CONTRACT_VERIFICATION_TESTNET_PK !== undefined) { @@ -100,6 +101,12 @@ function getMainnetChainConfig(): NetworkUserConfig { url: 'https://rpc.lukso.gateway.fm', chainId: 42, saveDeployments: true, + // We do not deploy the standard contracts on mainnet for the following reasons: + // 1) standard contracts are expensive to deploy on mainnet + // 2) user's universal profiles use the minimal proxy pattern, + // + // therefore we only need the base contracts to be deployed on mainnet. + tags: ['base'], }; if (process.env.CONTRACT_VERIFICATION_MAINNET_PK !== undefined) { From d0b40a9b122b9768f5901aa26a4d95a57e6093b5 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Thu, 4 Jul 2024 10:18:36 +0200 Subject: [PATCH 14/94] feat: create deployment scripts for LSP23 + UP Post Deployment module --- deploy/014_deploy_lsp23_factory.ts | 58 ++++++++++++++++++ ...5_deploy_up_post_deployment_module_init.ts | 60 +++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 deploy/014_deploy_lsp23_factory.ts create mode 100644 deploy/015_deploy_up_post_deployment_module_init.ts diff --git a/deploy/014_deploy_lsp23_factory.ts b/deploy/014_deploy_lsp23_factory.ts new file mode 100644 index 000000000..15c60344c --- /dev/null +++ b/deploy/014_deploy_lsp23_factory.ts @@ -0,0 +1,58 @@ +import { getCreate2Address, hexConcat, keccak256 } from 'ethers/lib/utils'; + +import { config, ethers } from 'hardhat'; +import { DeployFunction } from 'hardhat-deploy/types'; + +const deployLSP23Factory: DeployFunction = async ({ getNamedAccounts }) => { + const { owner: account } = await getNamedAccounts(); + const deployer = await ethers.getSigner(account); + console.log('Deploying with deployer address: ', deployer.address); + + const { deterministicDeployment } = config; + const nickFactoryAddress = deterministicDeployment['luksoTestnet'].factory; + + console.log( + 'Deploying LSP23_FACTORY contract 🏭 using Nick Factory 🧙🏻‍♂️ at address: ', + nickFactoryAddress, + ); + + const EXPECTED_LSP23_FACTORY_ADDRESS = '0x2300000A84D25dF63081feAa37ba6b62C4c89a30'; + const LSP23_SALT = '0x12a6712f113536d8b01d99f72ce168c7e1090124db54cd16f03c20000022178c'; + const LSP23_BYTECODE = + '0x608060405234801561001057600080fd5b50611247806100206000396000f3fe60806040526004361061003f5760003560e01c80636a66a7531461004457806372b19d361461007b578063754b86b51461009b578063dd5940f3146100ae575b600080fd5b610057610052366004610c0b565b6100ce565b604080516001600160a01b0393841681529290911660208301520160405180910390f35b34801561008757600080fd5b50610057610096366004610c0b565b610204565b6100576100a9366004610cb4565b61028d565b3480156100ba57600080fd5b506100576100c9366004610cb4565b610324565b6000806100e086356020890135610d28565b34146100ff57604051632fd9ca9160e01b815260040160405180910390fd5b61010c878787878761047d565b9150610118868361056c565b9050806001600160a01b0316826001600160a01b03167fe20570ed9bda3b93eea277b4e5d975c8933fd5f85f2c824d0845ae96c55a54fe8989898989604051610165959493929190610de1565b60405180910390a36001600160a01b038516156101fa576040517f28c4d14e0000000000000000000000000000000000000000000000000000000081526001600160a01b038616906328c4d14e906101c7908590859089908990600401610eed565b600060405180830381600087803b1580156101e157600080fd5b505af11580156101f5573d6000803e3d6000fd5b505050505b9550959350505050565b6000806000610216888888888861071a565b905061023161022b60608a0160408b01610f24565b82610795565b92506102806102466040890160208a01610f24565b6040516bffffffffffffffffffffffff19606087901b16602082015260340160405160208183030381529060405280519060200120610795565b9150509550959350505050565b60008061029f86356020890135610d28565b34146102be57604051632fd9ca9160e01b815260040160405180910390fd5b6102cb87878787876107fa565b91506102d78683610867565b9050806001600160a01b0316826001600160a01b03167f0e20ea3d6273aab49a7dabafc15cc94971c12dd63a07185ca810e497e4e87aa68989898989604051610165959493929190610f3f565b60008060006103368888888888610966565b90506103648161034960408b018b610fdf565b604051610357929190611026565b60405180910390206109af565b9250606061037788820160408a01611036565b156103e4576103896020890189610fdf565b604080516001600160a01b03881660208201520160408051601f198184030181529190526103ba60608c018c610fdf565b6040516020016103ce959493929190611075565b6040516020818303038152906040529050610429565b6103f16020890189610fdf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b6040516bffffffffffffffffffffffff19606086901b16602082015261046f906034016040516020818303038152906040528051906020012082805190602001206109af565b925050509550959350505050565b60008061048d878787878761071a565b90506104a86104a26060890160408a01610f24565b826109bc565b91506000806001600160a01b03841660208a01356104c960608c018c610fdf565b6040516104d7929190611026565b60006040518083038185875af1925050503d8060008114610514576040519150601f19603f3d011682016040523d82523d6000602084013e610519565b606091505b50915091508161056057806040517f4364b6ee00000000000000000000000000000000000000000000000000000000815260040161055791906110a9565b60405180910390fd5b50505095945050505050565b60006105bb6105816040850160208601610f24565b6040516bffffffffffffffffffffffff19606086901b166020820152603401604051602081830303815290604052805190602001206109bc565b905060006105cc6040850185610fdf565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929350610614925050506080850160608601611036565b1561067157604080516001600160a01b038516602082015282910160408051601f1981840301815291905261064c6080870187610fdf565b60405160200161065f94939291906110dc565b60405160208183030381529060405290505b600080836001600160a01b03168660000135846040516106919190611118565b60006040518083038185875af1925050503d80600081146106ce576040519150601f19603f3d011682016040523d82523d6000602084013e6106d3565b606091505b50915091508161071157806040517f9654a85400000000000000000000000000000000000000000000000000000000815260040161055791906110a9565b50505092915050565b6000853561072e6040870160208801610f24565b61073b6040880188610fdf565b61074b60808a0160608b01611036565b61075860808b018b610fdf565b8a8a8a6040516020016107749a99989796959493929190611134565b60405160208183030381529060405280519060200120905095945050505050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101206000905b90505b92915050565b60008061080a8787878787610966565b905061085c60208801358261082260408b018b610fdf565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a5992505050565b979650505050505050565b6000806108776020850185610fdf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293506108bf925050506060850160408601611036565b1561091c57604080516001600160a01b038516602082015282910160408051601f198184030181529190526108f76060870187610fdf565b60405160200161090a94939291906110dc565b60405160208183030381529060405290505b6040516bffffffffffffffffffffffff19606085901b16602082015261095e908535906034016040516020818303038152906040528051906020012083610a59565b949350505050565b600085356109776020870187610fdf565b6109876060890160408a01611036565b61099460608a018a610fdf565b898989604051602001610774999897969594939291906111a8565b60006107f1838330610b64565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166107f45760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c65640000000000000000006044820152606401610557565b600083471015610aab5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610557565b8151600003610afc5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610557565b8282516020840186f590506001600160a01b038116610b5d5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610557565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b600060808284031215610ba057600080fd5b50919050565b80356001600160a01b0381168114610bbd57600080fd5b919050565b60008083601f840112610bd457600080fd5b50813567ffffffffffffffff811115610bec57600080fd5b602083019150836020828501011115610c0457600080fd5b9250929050565b600080600080600060808688031215610c2357600080fd5b853567ffffffffffffffff80821115610c3b57600080fd5b610c4789838a01610b8e565b96506020880135915080821115610c5d57600080fd5b9087019060a0828a031215610c7157600080fd5b819550610c8060408901610ba6565b94506060880135915080821115610c9657600080fd5b50610ca388828901610bc2565b969995985093965092949392505050565b600080600080600060808688031215610ccc57600080fd5b853567ffffffffffffffff80821115610ce457600080fd5b908701906060828a031215610cf857600080fd5b90955060208701359080821115610d0e57600080fd5b610d1a89838a01610b8e565b9550610c8060408901610ba6565b808201808211156107f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000808335601e19843603018112610d7957600080fd5b830160208101925035905067ffffffffffffffff811115610d9957600080fd5b803603821315610c0457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b80358015158114610bbd57600080fd5b6080815285356080820152602086013560a08201526000610e0460408801610ba6565b6001600160a01b0380821660c0850152610e2160608a018a610d62565b9250608060e0860152610e3961010086018483610da8565b92505083820360208501528735825280610e5560208a01610ba6565b16602083015250610e696040880188610d62565b60a06040840152610e7e60a084018284610da8565b915050610e8d60608901610dd1565b15156060830152610ea16080890189610d62565b8383036080850152610eb4838284610da8565b9350505050610ece60408401876001600160a01b03169052565b8281036060840152610ee1818587610da8565b98975050505050505050565b60006001600160a01b03808716835280861660208401525060606040830152610f1a606083018486610da8565b9695505050505050565b600060208284031215610f3657600080fd5b6107f182610ba6565b6080815285356080820152602086013560a08201526000610f636040880188610d62565b606060c0850152610f7860e085018284610da8565b915050828103602084015286358152610f946020880188610d62565b60806020840152610fa9608084018284610da8565b915050610fb860408901610dd1565b15156040830152610fcc6060890189610d62565b8383036060850152610eb4838284610da8565b6000808335601e19843603018112610ff657600080fd5b83018035915067ffffffffffffffff82111561101157600080fd5b602001915036819003821315610c0457600080fd5b8183823760009101908152919050565b60006020828403121561104857600080fd5b6107f182610dd1565b60005b8381101561106c578181015183820152602001611054565b50506000910152565b848682376000858201600081528551611092818360208a01611051565b018385823760009301928352509095945050505050565b60208152600082518060208401526110c8816040850160208701611051565b601f01601f19169190910160400192915050565b600085516110ee818460208a01611051565b855190830190611102818360208a01611051565b0183858237600093019283525090949350505050565b6000825161112a818460208701611051565b9190910192915050565b8a815260006001600160a01b03808c16602084015260e0604084015261115e60e084018b8d610da8565b8915156060850152838103608085015261117981898b610da8565b905081871660a085015283810360c0850152611196818688610da8565b9e9d5050505050505050505050505050565b89815260c0602082015260006111c260c083018a8c610da8565b881515604084015282810360608401526111dd81888a610da8565b90506001600160a01b038616608084015282810360a0840152611201818587610da8565b9c9b50505050505050505050505056fea2646970667358221220add0ea42f8f9e02abd8c7da64d0b13eef395e008fa30377a6b79ea444e7d21bb64736f6c63430008110033'; + + const preCalculatedAddress = getCreate2Address( + nickFactoryAddress, + LSP23_SALT, + keccak256(LSP23_BYTECODE), + ); + + if (preCalculatedAddress !== EXPECTED_LSP23_FACTORY_ADDRESS) { + throw new Error( + `❌ Aborting CREATE2 deployment: Incorrect pre-calculated LSP23_FACTORY address with CREATE2. Expected ${EXPECTED_LSP23_FACTORY_ADDRESS}, got ${preCalculatedAddress}`, + ); + } else { + function Create2Address(name, address) { + this.name = name; + this.address = address; + } + + console.log(`Pre-calculated address match! 🪄`); + console.table([ + new Create2Address('EXPECTED_LSP23_FACTORY_ADDRESS', EXPECTED_LSP23_FACTORY_ADDRESS), + new Create2Address('getCreate2Address', preCalculatedAddress), + ]); + console.log('✅ Processing with deployment: '); + } + + const deploysLsp23Tx = { + to: nickFactoryAddress, + data: hexConcat([LSP23_SALT, LSP23_BYTECODE]), + }; + + const tx = await deployer.sendTransaction(deploysLsp23Tx); + console.log('LSP23 deployment tx: ', tx); +}; + +export default deployLSP23Factory; +deployLSP23Factory.tags = ['LSP23Factory']; diff --git a/deploy/015_deploy_up_post_deployment_module_init.ts b/deploy/015_deploy_up_post_deployment_module_init.ts new file mode 100644 index 000000000..a906261b8 --- /dev/null +++ b/deploy/015_deploy_up_post_deployment_module_init.ts @@ -0,0 +1,60 @@ +import { getCreate2Address, hexConcat, keccak256 } from 'ethers/lib/utils'; +import { config, ethers } from 'hardhat'; +import { DeployFunction } from 'hardhat-deploy/types'; + +const deployUpPostDeploymentModuleInit: DeployFunction = async ({ getNamedAccounts }) => { + const { owner: account } = await getNamedAccounts(); + const deployer = await ethers.getSigner(account); + console.log('Deploying with deployer address: ', deployer.address); + + const { deterministicDeployment } = config; + const nickFactoryAddress = deterministicDeployment['luksoTestnet'].factory; + + console.log( + 'Deploying UP_INIT_POST_DEPLOYMENT_MODULE contract 🆙🔄 using Nick Factory 🧙🏻‍♂️ at address: ', + nickFactoryAddress, + ); + + const EXPECTED_UP_INIT_POST_DEPLOYMENT_MODULE = '0x000000000066093407b6704B89793beFfD0D8F00'; + const STANDARD_SALT = '0x12a6712f113536d8b01d99f72ce168c7e10901240d73e80eeb821d01aa4c2b1a'; + const UP_INIT_POST_DEPLOYMENT_MODULE_BYTEODE = + '0x60806040523480156200001157600080fd5b506200001c6200002c565b620000266200002c565b620000ed565b600054610100900460ff1615620000995760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000eb576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b61497980620000fd6000396000f3fe6080604052600436106101635760003560e01c8063715018a6116100c0578063c4d66de811610074578063e30c397811610059578063e30c397814610451578063ead3fbdf1461020d578063f2fde38b1461047c5761019e565b8063c4d66de81461041e578063dedff9c6146104315761019e565b80637f23690c116100a55780637f23690c146103a65780638da5cb5b146103b9578063979024211461040b5761019e565b8063715018a61461037c57806379ba5097146103915761019e565b806344c028fe1161011757806354f6127f116100fc57806354f6127f146103295780636963d438146103495780636bb56a14146103695761019e565b806344c028fe146102f65780634f04d60a146103165761019e565b80631626ba7e116101485780631626ba7e1461026557806328c4d14e146102b657806331858452146102d65761019e565b806301bfba611461020d57806301ffc9a7146102355761019e565b3661019e57341561019c57604051349033907f7e71433ddf847725166244795048ecf3e3f9f35628254ecbf73605666423349390600090a35b005b600036606034156101d757604051349033907f7e71433ddf847725166244795048ecf3e3f9f35628254ecbf73605666423349390600090a35b60043610156101f55750604080516020810190915260008152610202565b6101ff838361049c565b90505b915050805190602001f35b34801561021957600080fd5b5061022260c881565b6040519081526020015b60405180910390f35b34801561024157600080fd5b50610255610250366004613a93565b610677565b604051901515815260200161022c565b34801561027157600080fd5b50610285610280366004613bca565b61080c565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161022c565b3480156102c257600080fd5b5061019c6102d1366004613c7c565b610ac3565b6102e96102e4366004613de7565b610c2a565b60405161022c9190613fb2565b610309610304366004613fc5565b610cf4565b60405161022c919061401a565b61019c61032436600461402d565b610d95565b34801561033557600080fd5b506103096103443660046140a1565b610f19565b34801561035557600080fd5b506102e96103643660046140ba565b610f24565b61030961037736600461412f565b61109a565b34801561038857600080fd5b5061019c6112a2565b34801561039d57600080fd5b5061019c6113a7565b61019c6103b4366004613bca565b6114b1565b3480156103c557600080fd5b5060005462010000900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022c565b61019c61041936600461417b565b611552565b61019c61042c3660046141d5565b611681565b34801561043d57600080fd5b506102e961044c3660046141f0565b611815565b34801561045d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166103e6565b34801561048857600080fd5b5061019c6104973660046141d5565b6118c0565b606060006104cd6000357fffffffff0000000000000000000000000000000000000000000000000000000016611b4f565b90506000357fffffffff0000000000000000000000000000000000000000000000000000000016158015610515575073ffffffffffffffffffffffffffffffffffffffff8116155b15610530575050604080516020810190915260008152610671565b73ffffffffffffffffffffffffffffffffffffffff81166105a8576040517fbb370b2b0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000006000351660048201526024015b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16868633346040516020016105d99493929190614225565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061191614268565b6000604051808303816000865af19150503d806000811461064e576040519150601f19603f3d011682016040523d82523d6000602084013e610653565b606091505b50915091508115610668579250610671915050565b80518060208301fd5b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f1626ba7e00000000000000000000000000000000000000000000000000000000148061070a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f24871b3d00000000000000000000000000000000000000000000000000000000145b8061075657507fffffffff0000000000000000000000000000000000000000000000000000000082167f6bb56a1400000000000000000000000000000000000000000000000000000000145b806107a257507fffffffff0000000000000000000000000000000000000000000000000000000082167f94be599900000000000000000000000000000000000000000000000000000000145b806107ee57507fffffffff0000000000000000000000000000000000000000000000000000000082167f1a0eb6a500000000000000000000000000000000000000000000000000000000145b806107fd57506107fd82611bbf565b80610671575061067182611c15565b6000805462010000900473ffffffffffffffffffffffffffffffffffffffff16803b156109e0576000808273ffffffffffffffffffffffffffffffffffffffff16631626ba7e60e01b8787604051602401610868929190614284565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516108f19190614268565b600060405180830381855afa9150503d806000811461092c576040519150601f19603f3d011682016040523d82523d6000602084013e610931565b606091505b50915091506000828015610946575081516020145b8015610986575081517f1626ba7e0000000000000000000000000000000000000000000000000000000090610984908401602090810190850161429d565b145b9050806109b3577fffffffff000000000000000000000000000000000000000000000000000000006109d5565b7f1626ba7e000000000000000000000000000000000000000000000000000000005b945050505050610671565b6000806109ed8686611c78565b90925090506000816004811115610a0657610a066142b6565b14610a3757507fffffffff000000000000000000000000000000000000000000000000000000009250610671915050565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610a90577fffffffff00000000000000000000000000000000000000000000000000000000610ab2565b7f1626ba7e000000000000000000000000000000000000000000000000000000005b9350505050610671565b5092915050565b600080610ad28385018561417b565b915091508573ffffffffffffffffffffffffffffffffffffffff166344c028fe600430600086868b604051602401610b0c939291906142e5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f4f04d60a000000000000000000000000000000000000000000000000000000001790525160e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168152610bbc949392919060040161435a565b6000604051808303816000875af1158015610bdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c219190810190614395565b50505050505050565b60603415610c6057604051349033907f7e71433ddf847725166244795048ecf3e3f9f35628254ecbf73605666423349390600090a35b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633819003610c9b57610c9386868686611cbd565b915050610cec565b6000610ca682611e4d565b90506000610cb688888888611cbd565b90508115610ce757610ce78382604051602001610cd39190613fb2565b604051602081830303815290604052612060565b925050505b949350505050565b60603415610d2a57604051349033907f7e71433ddf847725166244795048ecf3e3f9f35628254ecbf73605666423349390600090a35b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633819003610d5d57610c9386868686612233565b6000610d6882611e4d565b90506000610d7888888888612233565b90508115610ce757610ce78382604051602001610cd3919061401a565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610eba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152606860248201527f556e6976657273616c50726f66696c65496e6974506f73744465706c6f796d6560448201527f6e744d6f64756c653a2073657444617461416e645472616e736665724f776e6560648201527f7273686970206f6e6c7920616c6c6f776564207468726f7567682064656c656760848201527f6174652063616c6c00000000000000000000000000000000000000000000000060a482015260c40161059f565b60005b8351811015610f0a57610f02848281518110610edb57610edb614403565b6020026020010151848381518110610ef557610ef5614403565b60200260200101516123d5565b600101610ebd565b50610f1481612449565b505050565b6060610671826124ef565b60608167ffffffffffffffff811115610f3f57610f3f613ab0565b604051908082528060200260200182016040528015610f7257816020015b6060815260200190600190039081610f5d5790505b50905060005b82811015610abc5760008030868685818110610f9657610f96614403565b9050602002810190610fa89190614432565b604051610fb6929190614497565b600060405180830381855af49150503d8060008114610ff1576040519150601f19603f3d011682016040523d82523d6000602084013e610ff6565b606091505b509150915081611072578051156110105780518082602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4c5350303a20626174636843616c6c7320726576657274656400000000000000604482015260640161059f565b8084848151811061108557611085614403565b60209081029190910101525050600101610f78565b606034156110d057604051349033907f7e71433ddf847725166244795048ecf3e3f9f35628254ecbf73605666423349390600090a35b60006110fb7f0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b476124ef565b905060606014825110611170576000611113836144a7565b60601c9050611142817f6bb56a1400000000000000000000000000000000000000000000000000000000612591565b1561116e5761116b73ffffffffffffffffffffffffffffffffffffffff82168888883334612660565b91505b505b600061119c7f0cfc51aec37c55a4d0b10000000000000000000000000000000000000000000088612800565b905060006111a9826124ef565b90506060601482511061121e5760006111c1836144a7565b60601c90506111f0817f6bb56a1400000000000000000000000000000000000000000000000000000000612591565b1561121c5761121973ffffffffffffffffffffffffffffffffffffffff82168b8b8b3334612660565b91505b505b83816040516020016112319291906144f7565b604051602081830303815290604052955088343373ffffffffffffffffffffffffffffffffffffffff167f9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c28b8b8b60405161128e93929190614565565b60405180910390a450505050509392505050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16338190036112d4576112d161287c565b50565b60006112df82611e4d565b9050600061130960005473ffffffffffffffffffffffffffffffffffffffff620100009091041690565b905061131361287c565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16611388576040805160208101909152600081526113889073ffffffffffffffffffffffffffffffffffffffff8316907fa4e59c931d14f7c8a7a35027f92ee40b5f2886b9fdcdb78f30bc5ecce5a2f814906129b8565b8115610f1457610f148360405180602001604052806000815250612060565b60035474010000000000000000000000000000000000000000900460ff16156113fc576040517f5758dd0700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16611423612aa0565b6040805160208101909152600081526114759073ffffffffffffffffffffffffffffffffffffffff8316907fa4e59c931d14f7c8a7a35027f92ee40b5f2886b9fdcdb78f30bc5ecce5a2f814906129b8565b6040805160208101909152600081526112d19033907fceca317f109c43507871523e82dc2a3cc64dfa18f12da0b6db14f6e23f995538906129b8565b34156114e557604051349033907f7e71433ddf847725166244795048ecf3e3f9f35628254ecbf73605666423349390600090a35b60005462010000900473ffffffffffffffffffffffffffffffffffffffff163381900361151657610f1483836123d5565b600061152182611e4d565b905061152d84846123d5565b801561154c5761154c8260405180602001604052806000815250612060565b50505050565b341561158657604051349033907f7e71433ddf847725166244795048ecf3e3f9f35628254ecbf73605666423349390600090a35b80518251146115c1576040517f3bcc897900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005462010000900473ffffffffffffffffffffffffffffffffffffffff16338190036116115760005b835181101561154c57611609848281518110610edb57610edb614403565b6001016115eb565b600061161c82611e4d565b905060005b84518110156116615761165985828151811061163f5761163f614403565b6020026020010151858381518110610ef557610ef5614403565b600101611621565b50801561154c5761154c8260405180602001604052806000815250612060565b600054610100900460ff16158080156116a15750600054600160ff909116105b806116bb5750303b1580156116bb575060005460ff166001145b611747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161059f565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156117a557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6117ae82612b7a565b801561181157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6060815167ffffffffffffffff81111561183157611831613ab0565b60405190808252806020026020018201604052801561186457816020015b606081526020019060019003908161184f5790505b50905060005b82518110156118ba5761189583828151811061188857611888614403565b60200260200101516124ef565b8282815181106118a7576118a7614403565b602090810291909101015260010161186a565b50919050565b60005462010000900473ffffffffffffffffffffffffffffffffffffffff1633819003611a0757600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905561192f82612c7c565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a36040805160208101909152600081526119db9073ffffffffffffffffffffffffffffffffffffffff8416907fe17117c9d2665d1dbeb479ed8058bbebde3c50ac50e2e65619f60006caac6926906129b8565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555050565b6000611a1282611e4d565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790559050611a5c83612c7c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a3604080516020810190915260008152611b089073ffffffffffffffffffffffffffffffffffffffff8516907fe17117c9d2665d1dbeb479ed8058bbebde3c50ac50e2e65619f60006caac6926906129b8565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690558015610f1457610f148260405180602001604052806000815250612060565b600080611b9e7fcee78b4094da86011096000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008516612800565b90506000611bab826124ef565b611bb4906144a7565b60601c949350505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fa918fa6b000000000000000000000000000000000000000000000000000000001480610671575061067182612d17565b600080611c417f01ffc9a700000000000000000000000000000000000000000000000000000000611b4f565b905073ffffffffffffffffffffffffffffffffffffffff8116611c675750600092915050565b611c718184612591565b9392505050565b6000808251604103611cae5760208301516040840151606085015160001a611ca287828585612d6d565b94509450505050611cb6565b506000905060025b9250929050565b606083518551141580611cde575082518451141580611cde57508151835114155b15611d15576040517f3ff55f4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451600003611d50576040517fe9ad2b5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000855167ffffffffffffffff811115611d6c57611d6c613ab0565b604051908082528060200260200182016040528015611d9f57816020015b6060815260200190600190039081611d8a5790505b50905060005b8651811015611e4357611e1e878281518110611dc357611dc3614403565b6020026020010151878381518110611ddd57611ddd614403565b6020026020010151878481518110611df757611df7614403565b6020026020010151878581518110611e1157611e11614403565b6020026020010151612233565b828281518110611e3057611e30614403565b6020908102919091010152600101611da5565b5095945050505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff16639bf04b1160e01b3334600036604051602401611e89949392919061458b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611f129190614268565b6000604051808303816000865af19150503d8060008114611f4f576040519150601f19603f3d011682016040523d82523d6000602084013e611f54565b606091505b5091509150611f6560008383612e5c565b600081806020019051810190611f7b91906145c1565b90507fffffff000000000000000000000000000000000000000000000000000000000081167f9bf04b000000000000000000000000000000000000000000000000000000000014611ffd576000826040517fd088ec4000000000000000000000000000000000000000000000000000000000815260040161059f9291906145de565b7f01000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000600383901a60f81b1614612054576000612057565b60015b95945050505050565b6000808373ffffffffffffffffffffffffffffffffffffffff1663d3fc45d360e01b333460003660405160200161209a94939291906145f9565b60405160208183030381529060405280519060200120856040516024016120c2929190614284565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161214b9190614268565b6000604051808303816000865af19150503d8060008114612188576040519150601f19603f3d011682016040523d82523d6000602084013e61218d565b606091505b509150915061219e60018383612e5c565b80517fd3fc45d300000000000000000000000000000000000000000000000000000000906121d590830160209081019084016145c1565b7fffffffff00000000000000000000000000000000000000000000000000000000161461154c576001816040517fd088ec4000000000000000000000000000000000000000000000000000000000815260040161059f9291906145de565b60608461224c57612245848484612ee5565b9050610cec565b600185036122ac5773ffffffffffffffffffffffffffffffffffffffff8416156122a2576040517f3041824a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612245838361305c565b6002850361230c5773ffffffffffffffffffffffffffffffffffffffff841615612302576040517f3041824a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224583836131d5565b6003850361235657821561234c576040517f72f2bc6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61224584836132f8565b600485036123a0578215612396576040517f5ac8313500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122458483613420565b6040517f7583b3bc0000000000000000000000000000000000000000000000000000000081526004810186905260240161059f565b60008281526001602052604090206123ed82826146da565b50817fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b26101008351111561242e576124298360006101006134fe565b612430565b825b60405161243d919061401a565b60405180910390a25050565b60005473ffffffffffffffffffffffffffffffffffffffff8281166201000090920416146112d1576000805473ffffffffffffffffffffffffffffffffffffffff838116620100008181027fffffffffffffffffffff0000000000000000000000000000000000000000ffff851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b600081815260016020526040902080546060919061250c9061463f565b80601f01602080910402602001604051908101604052809291908181526020018280546125389061463f565b80156125855780601f1061255a57610100808354040283529160200191612585565b820191906000526020600020905b81548152906001019060200180831161256857829003601f168201915b50505050509050919050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612649575060208210155b80156126555750600081115b979650505050505050565b60606000636bb56a1460e01b878787604051602401612681939291906147f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093525161270e92879187910161480e565b60405160208183030381529060405290506000808973ffffffffffffffffffffffffffffffffffffffff16836040516127479190614268565b6000604051808303816000865af19150503d8060008114612784576040519150601f19603f3d011682016040523d82523d6000602084013e612789565b606091505b50915091506127ce82826040518060400160405280602081526020017f43616c6c20746f20756e6976657273616c5265636569766572206661696c6564815250613678565b5080516000036127de57806127f2565b808060200190518101906127f29190614395565b9a9950505050505050505050565b604080517fffffffffffffffffffff00000000000000000000000000000000000000000000841660208201526000602a82018190527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008416602c83015291829101604051602081830303815290604052905080610cec90614860565b60025443906000906128909060c8906148d1565b9050600061289f60c8836148d1565b9050808311806128af5750600254155b1561290f576002839055600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040517f81b7f830f1f0084db6497c486cbe6974c86488dcc4e3738eab94ab6d6b1653e790600090a1505050565b81831015612953576040517f8b9bf507000000000000000000000000000000000000000000000000000000008152600481018390526024810182905260440161059f565b61295d6000612449565b60006002819055600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce9190a1505050565b6129e2837f6bb56a1400000000000000000000000000000000000000000000000000000000612591565b15610f14576040517f6bb56a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636bb56a1490612a3b9085908590600401614284565b6000604051808303816000875af1158015612a5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261154c9190810190614395565b60035473ffffffffffffffffffffffffffffffffffffffff163314612b47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4c535031343a2063616c6c6572206973206e6f74207468652070656e64696e6760448201527f4f776e6572000000000000000000000000000000000000000000000000000000606482015260840161059f565b612b5033612449565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600054610100900460ff16612c11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161059f565b612c1a81613691565b6112d17feafec4d89fa9619884b600005ef83ad9559033e6e941db7d7c495acdce61634760001b6040518060400160405280600481526020017f5ef83ad9000000000000000000000000000000000000000000000000000000008152506123d5565b3073ffffffffffffffffffffffffffffffffffffffff821603612ccb576040517f43b248cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556000600255565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f629aa694000000000000000000000000000000000000000000000000000000001480610671575061067182613765565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612da45750600090506003612e53565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612df8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612e4c57600060019250925050612e53565b9150600090505b94509492505050565b81612e6b57612e6b83826137fc565b602081511080612eaa575060006020612e8383614860565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000911b1614155b15610f145782816040517fd088ec4000000000000000000000000000000000000000000000000000000000815260040161059f9291906145de565b606082471015612f2a576040517f0df9a8f80000000000000000000000000000000000000000000000000000000081524760048201526024810184905260440161059f565b8273ffffffffffffffffffffffffffffffffffffffff851660007f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e612f6e866148e4565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390a46000808573ffffffffffffffffffffffffffffffffffffffff168585604051612fcb9190614268565b60006040518083038185875af1925050503d8060008114613008576040519150601f19603f3d011682016040523d82523d6000602084013e61300d565b606091505b509150915061305282826040518060400160405280601681526020017f455243373235583a20556e6b6e6f776e204572726f7200000000000000000000815250613678565b9695505050505050565b6060824710156130a1576040517f0df9a8f80000000000000000000000000000000000000000000000000000000081524760048201526024810184905260440161059f565b81516000036130dc576040517fb81cd8d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082516020840185f0905073ffffffffffffffffffffffffffffffffffffffff8116613135576040517f0b07489b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b838173ffffffffffffffffffffffffffffffffffffffff1660017fa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c36000801b60405161318391815260200190565b60405180910390a46040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b16602082015260340160405160208183030381529060405291505092915050565b60608151600003613212576040517fb81cd8d900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061322b83602085516132269190614930565b613842565b90506000613248846000602087516132439190614930565b6134fe565b905060006132578684846138c2565b9050858173ffffffffffffffffffffffffffffffffffffffff1660027fa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c3866040516132a491815260200190565b60405180910390a46040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b166020820152603401604051602081830303815290604052935050505092915050565b6060600073ffffffffffffffffffffffffffffffffffffffff841660037f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e61333f866148e4565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390a46000808473ffffffffffffffffffffffffffffffffffffffff168460405161339b9190614268565b600060405180830381855afa9150503d80600081146133d6576040519150601f19603f3d011682016040523d82523d6000602084013e6133db565b606091505b509150915061205782826040518060400160405280601681526020017f455243373235583a20556e6b6e6f776e204572726f7200000000000000000000815250613678565b6060600073ffffffffffffffffffffffffffffffffffffffff841660047f4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e613467866148e4565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200160405180910390a46000808473ffffffffffffffffffffffffffffffffffffffff16846040516134c39190614268565b600060405180830381855af49150503d80600081146133d6576040519150601f19603f3d011682016040523d82523d6000602084013e6133db565b60608161350c81601f6148d1565b1015613574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161059f565b61357e82846148d1565b845110156135e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161059f565b606082158015613607576040519150600082526020820160405261366f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613640578051835260209283019201613628565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60608315613687575081611c71565b611c718383613a21565b600054610100900460ff16613728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161059f565b341561375c57604051349033907f7e71433ddf847725166244795048ecf3e3f9f35628254ecbf73605666423349390600090a35b6112d181612449565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7545acac00000000000000000000000000000000000000000000000000000000148061067157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610671565b80511561380c5780518082602001fd5b6040517f8c6a8ae3000000000000000000000000000000000000000000000000000000008152821515600482015260240161059f565b600061384f8260206148d1565b835110156138b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f746f427974657333325f6f75744f66426f756e64730000000000000000000000604482015260640161059f565b50016020015190565b60008347101561392e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161059f565b8151600003613999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161059f565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116611c71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161059f565b815115613a315781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059f919061401a565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146112d157600080fd5b600060208284031215613aa557600080fd5b8135611c7181613a65565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613b2657613b26613ab0565b604052919050565b600067ffffffffffffffff821115613b4857613b48613ab0565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613b8557600080fd5b8135613b98613b9382613b2e565b613adf565b818152846020838601011115613bad57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215613bdd57600080fd5b82359150602083013567ffffffffffffffff811115613bfb57600080fd5b613c0785828601613b74565b9150509250929050565b803573ffffffffffffffffffffffffffffffffffffffff81168114613c3557600080fd5b919050565b60008083601f840112613c4c57600080fd5b50813567ffffffffffffffff811115613c6457600080fd5b602083019150836020828501011115611cb657600080fd5b60008060008060608587031215613c9257600080fd5b613c9b85613c11565b9350613ca960208601613c11565b9250604085013567ffffffffffffffff811115613cc557600080fd5b613cd187828801613c3a565b95989497509550505050565b600067ffffffffffffffff821115613cf757613cf7613ab0565b5060051b60200190565b600082601f830112613d1257600080fd5b81356020613d22613b9383613cdd565b82815260059290921b84018101918181019086841115613d4157600080fd5b8286015b84811015613d5c5780358352918301918301613d45565b509695505050505050565b600082601f830112613d7857600080fd5b81356020613d88613b9383613cdd565b82815260059290921b84018101918181019086841115613da757600080fd5b8286015b84811015613d5c57803567ffffffffffffffff811115613dcb5760008081fd5b613dd98986838b0101613b74565b845250918301918301613dab565b60008060008060808587031215613dfd57600080fd5b843567ffffffffffffffff80821115613e1557600080fd5b613e2188838901613d01565b9550602091508187013581811115613e3857600080fd5b8701601f81018913613e4957600080fd5b8035613e57613b9382613cdd565b81815260059190911b8201840190848101908b831115613e7657600080fd5b928501925b82841015613e9b57613e8c84613c11565b82529285019290850190613e7b565b97505050506040870135915080821115613eb457600080fd5b613ec088838901613d01565b93506060870135915080821115613ed657600080fd5b50613ee387828801613d67565b91505092959194509250565b60005b83811015613f0a578181015183820152602001613ef2565b50506000910152565b60008151808452613f2b816020860160208601613eef565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b85811015613fa5578284038952613f93848351613f13565b98850198935090840190600101613f7b565b5091979650505050505050565b602081526000611c716020830184613f5d565b60008060008060808587031215613fdb57600080fd5b84359350613feb60208601613c11565b925060408501359150606085013567ffffffffffffffff81111561400e57600080fd5b613ee387828801613b74565b602081526000611c716020830184613f13565b60008060006060848603121561404257600080fd5b833567ffffffffffffffff8082111561405a57600080fd5b61406687838801613d01565b9450602086013591508082111561407c57600080fd5b5061408986828701613d67565b92505061409860408501613c11565b90509250925092565b6000602082840312156140b357600080fd5b5035919050565b600080602083850312156140cd57600080fd5b823567ffffffffffffffff808211156140e557600080fd5b818501915085601f8301126140f957600080fd5b81358181111561410857600080fd5b8660208260051b850101111561411d57600080fd5b60209290920196919550909350505050565b60008060006040848603121561414457600080fd5b83359250602084013567ffffffffffffffff81111561416257600080fd5b61416e86828701613c3a565b9497909650939450505050565b6000806040838503121561418e57600080fd5b823567ffffffffffffffff808211156141a657600080fd5b6141b286838701613d01565b935060208501359150808211156141c857600080fd5b50613c0785828601613d67565b6000602082840312156141e757600080fd5b611c7182613c11565b60006020828403121561420257600080fd5b813567ffffffffffffffff81111561421957600080fd5b610cec84828501613d01565b8385823760609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016919092019081526014810191909152603401919050565b6000825161427a818460208701613eef565b9190910192915050565b828152604060208201526000610cec6040830184613f13565b6000602082840312156142af57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b606080825284519082018190526000906020906080840190828801845b8281101561431e57815184529284019290840190600101614302565b505050838103828501526143328187613f5d565b9250505073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b84815273ffffffffffffffffffffffffffffffffffffffff841660208201528260408201526080606082015260006130526080830184613f13565b6000602082840312156143a757600080fd5b815167ffffffffffffffff8111156143be57600080fd5b8201601f810184136143cf57600080fd5b80516143dd613b9382613b2e565b8181528560208385010111156143f257600080fd5b612057826020830160208601613eef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261446757600080fd5b83018035915067ffffffffffffffff82111561448257600080fd5b602001915036819003821315611cb657600080fd5b8183823760009101908152919050565b6000815160208301517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808216935060148310156144ef5780818460140360031b1b83161693505b505050919050565b60408152600061450a6040830185613f13565b82810360208401526120578185613f13565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60408152600061457960408301858761451c565b82810360208401526130528185613f13565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152600061305260608301848661451c565b6000602082840312156145d357600080fd5b8151611c7181613a65565b8215158152604060208201526000610cec6040830184613f13565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008560601b16815283601482015281836034830137600091016034019081529392505050565b600181811c9082168061465357607f821691505b6020821081036118ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610f1457600081815260208120601f850160051c810160208610156146b35750805b601f850160051c820191505b818110156146d2578281556001016146bf565b505050505050565b815167ffffffffffffffff8111156146f4576146f4613ab0565b61470881614702845461463f565b8461468c565b602080601f83116001811461475b57600084156147255750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556146d2565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156147a857888601518255948401946001909101908401614789565b50858210156147e457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b83815260406020820152600061205760408301848661451c565b60008451614820818460208901613eef565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b805160208083015191908110156118ba577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610671576106716148a2565b6000815160208301517fffffffff00000000000000000000000000000000000000000000000000000000808216935060048310156144ef5760049290920360031b82901b161692915050565b81810381811115610671576106716148a256fea26469706673582212204c716f85d1145bcbe75de9c2eb2914430942e4f65ea5e7afda664b1551460c7f64736f6c63430008110033'; + + const preCalculatedAddress = getCreate2Address( + nickFactoryAddress, + STANDARD_SALT, + keccak256(UP_INIT_POST_DEPLOYMENT_MODULE_BYTEODE), + ); + + if (preCalculatedAddress !== EXPECTED_UP_INIT_POST_DEPLOYMENT_MODULE) { + throw new Error( + `❌ Aborting CREATE2 deployment: Incorrect pre-calculated UP_INIT_POST_DEPLOYMENT_MODULE address with CREATE2. Expected ${EXPECTED_UP_INIT_POST_DEPLOYMENT_MODULE}, got ${preCalculatedAddress}`, + ); + } else { + function Create2Address(name, address) { + this.name = name; + this.address = address; + } + + console.log(`Pre-calculated address match! 🪄`); + console.table([ + new Create2Address( + 'EXPECTED_UP_INIT_POST_DEPLOYMENT_MODULE', + EXPECTED_UP_INIT_POST_DEPLOYMENT_MODULE, + ), + new Create2Address('getCreate2Address', preCalculatedAddress), + ]); + console.log('✅ Processing with deployment: '); + } + + const deployUpInitPostDeploymentModuleTx = { + to: nickFactoryAddress, + data: hexConcat([STANDARD_SALT, UP_INIT_POST_DEPLOYMENT_MODULE_BYTEODE]), + }; + + const tx = await deployer.sendTransaction(deployUpInitPostDeploymentModuleTx); + console.log('UP_Init_Post_Deployment_Module deployment tx: ', tx); +}; + +export default deployUpPostDeploymentModuleInit; +deployUpPostDeploymentModuleInit.tags = ['UPInitPostDeploymentModule']; From da73c4fee003eefb4e1c64cc2671b1d35d9004c7 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Thu, 25 Jul 2024 11:08:26 +0100 Subject: [PATCH 15/94] chore: update mainnet RPC endpoint --- packages/lsp-smart-contracts/hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lsp-smart-contracts/hardhat.config.ts b/packages/lsp-smart-contracts/hardhat.config.ts index 03306791e..2bf2433e8 100644 --- a/packages/lsp-smart-contracts/hardhat.config.ts +++ b/packages/lsp-smart-contracts/hardhat.config.ts @@ -98,7 +98,7 @@ function getTestnetChainConfig(): NetworkUserConfig { function getMainnetChainConfig(): NetworkUserConfig { const config: NetworkUserConfig = { live: true, - url: 'https://rpc.lukso.gateway.fm', + url: 'https://42.rpc.thirdweb.com', chainId: 42, saveDeployments: true, // We do not deploy the standard contracts on mainnet for the following reasons: From 4c61866c7c20be78f7acce1fdfb383d17e21cbe9 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Thu, 25 Jul 2024 11:40:30 +0100 Subject: [PATCH 16/94] chore: move `deploy/` scripts folder inside `lsp-smart-contract` package + fix some ESM imports --- .../deploy}/001_deploy_universal_profile.ts | 0 .../lsp-smart-contracts/deploy}/002_deploy_key_manager.ts | 0 .../deploy}/003_deploy_universal_receiver_delegate.ts | 0 .../deploy}/005_deploy_universal_receiver_delegate_vault.ts | 0 .../deploy}/006_deploy_base_universal_profile.ts | 0 .../deploy}/007_deploy_base_key_manager.ts | 0 .../lsp-smart-contracts/deploy}/008_deploy_lsp7_mintable.ts | 2 +- .../lsp-smart-contracts/deploy}/009_deploy_lsp8_mintable.ts | 4 ++-- .../deploy}/010_deploy_base_lsp7_mintable.ts | 0 .../deploy}/011_deploy_base_lsp8_mintable.ts | 0 .../lsp-smart-contracts/deploy}/012_deploy_vault.ts | 0 .../lsp-smart-contracts/deploy}/013_deploy_base_vault.ts | 0 .../lsp-smart-contracts/deploy}/014_deploy_lsp23_factory.ts | 4 ++-- .../deploy}/015_deploy_up_post_deployment_module_init.ts | 4 ++-- {deploy => packages/lsp-smart-contracts/deploy}/salt.ts | 0 15 files changed, 7 insertions(+), 7 deletions(-) rename {deploy => packages/lsp-smart-contracts/deploy}/001_deploy_universal_profile.ts (100%) rename {deploy => packages/lsp-smart-contracts/deploy}/002_deploy_key_manager.ts (100%) rename {deploy => packages/lsp-smart-contracts/deploy}/003_deploy_universal_receiver_delegate.ts (100%) rename {deploy => packages/lsp-smart-contracts/deploy}/005_deploy_universal_receiver_delegate_vault.ts (100%) rename {deploy => packages/lsp-smart-contracts/deploy}/006_deploy_base_universal_profile.ts (100%) rename {deploy => packages/lsp-smart-contracts/deploy}/007_deploy_base_key_manager.ts (100%) rename {deploy => packages/lsp-smart-contracts/deploy}/008_deploy_lsp7_mintable.ts (89%) rename {deploy => packages/lsp-smart-contracts/deploy}/009_deploy_lsp8_mintable.ts (81%) rename {deploy => packages/lsp-smart-contracts/deploy}/010_deploy_base_lsp7_mintable.ts (100%) rename {deploy => packages/lsp-smart-contracts/deploy}/011_deploy_base_lsp8_mintable.ts (100%) rename {deploy => packages/lsp-smart-contracts/deploy}/012_deploy_vault.ts (100%) rename {deploy => packages/lsp-smart-contracts/deploy}/013_deploy_base_vault.ts (100%) rename {deploy => packages/lsp-smart-contracts/deploy}/014_deploy_lsp23_factory.ts (98%) rename {deploy => packages/lsp-smart-contracts/deploy}/015_deploy_up_post_deployment_module_init.ts (99%) rename {deploy => packages/lsp-smart-contracts/deploy}/salt.ts (100%) diff --git a/deploy/001_deploy_universal_profile.ts b/packages/lsp-smart-contracts/deploy/001_deploy_universal_profile.ts similarity index 100% rename from deploy/001_deploy_universal_profile.ts rename to packages/lsp-smart-contracts/deploy/001_deploy_universal_profile.ts diff --git a/deploy/002_deploy_key_manager.ts b/packages/lsp-smart-contracts/deploy/002_deploy_key_manager.ts similarity index 100% rename from deploy/002_deploy_key_manager.ts rename to packages/lsp-smart-contracts/deploy/002_deploy_key_manager.ts diff --git a/deploy/003_deploy_universal_receiver_delegate.ts b/packages/lsp-smart-contracts/deploy/003_deploy_universal_receiver_delegate.ts similarity index 100% rename from deploy/003_deploy_universal_receiver_delegate.ts rename to packages/lsp-smart-contracts/deploy/003_deploy_universal_receiver_delegate.ts diff --git a/deploy/005_deploy_universal_receiver_delegate_vault.ts b/packages/lsp-smart-contracts/deploy/005_deploy_universal_receiver_delegate_vault.ts similarity index 100% rename from deploy/005_deploy_universal_receiver_delegate_vault.ts rename to packages/lsp-smart-contracts/deploy/005_deploy_universal_receiver_delegate_vault.ts diff --git a/deploy/006_deploy_base_universal_profile.ts b/packages/lsp-smart-contracts/deploy/006_deploy_base_universal_profile.ts similarity index 100% rename from deploy/006_deploy_base_universal_profile.ts rename to packages/lsp-smart-contracts/deploy/006_deploy_base_universal_profile.ts diff --git a/deploy/007_deploy_base_key_manager.ts b/packages/lsp-smart-contracts/deploy/007_deploy_base_key_manager.ts similarity index 100% rename from deploy/007_deploy_base_key_manager.ts rename to packages/lsp-smart-contracts/deploy/007_deploy_base_key_manager.ts diff --git a/deploy/008_deploy_lsp7_mintable.ts b/packages/lsp-smart-contracts/deploy/008_deploy_lsp7_mintable.ts similarity index 89% rename from deploy/008_deploy_lsp7_mintable.ts rename to packages/lsp-smart-contracts/deploy/008_deploy_lsp7_mintable.ts index a06490aa9..3d05019b8 100644 --- a/deploy/008_deploy_lsp7_mintable.ts +++ b/packages/lsp-smart-contracts/deploy/008_deploy_lsp7_mintable.ts @@ -1,6 +1,6 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; -import { LSP4_TOKEN_TYPES } from '@lukso/lsp4-contracts/constants'; +import { LSP4_TOKEN_TYPES } from '@lukso/lsp4-contracts'; const deployLSP7Mintable: DeployFunction = async ({ deployments, diff --git a/deploy/009_deploy_lsp8_mintable.ts b/packages/lsp-smart-contracts/deploy/009_deploy_lsp8_mintable.ts similarity index 81% rename from deploy/009_deploy_lsp8_mintable.ts rename to packages/lsp-smart-contracts/deploy/009_deploy_lsp8_mintable.ts index aca565cbe..36c70340d 100644 --- a/deploy/009_deploy_lsp8_mintable.ts +++ b/packages/lsp-smart-contracts/deploy/009_deploy_lsp8_mintable.ts @@ -1,7 +1,7 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; -import { LSP4_TOKEN_TYPES } from '@lukso/lsp4-contracts/constants'; -import { LSP8_TOKEN_ID_FORMAT } from '@lukso/lsp8-contracts/constants'; +import { LSP4_TOKEN_TYPES } from '@lukso/lsp4-contracts'; +import { LSP8_TOKEN_ID_FORMAT } from '@lukso/lsp8-contracts'; const deployLSP8MintableDeterministic: DeployFunction = async ({ deployments, diff --git a/deploy/010_deploy_base_lsp7_mintable.ts b/packages/lsp-smart-contracts/deploy/010_deploy_base_lsp7_mintable.ts similarity index 100% rename from deploy/010_deploy_base_lsp7_mintable.ts rename to packages/lsp-smart-contracts/deploy/010_deploy_base_lsp7_mintable.ts diff --git a/deploy/011_deploy_base_lsp8_mintable.ts b/packages/lsp-smart-contracts/deploy/011_deploy_base_lsp8_mintable.ts similarity index 100% rename from deploy/011_deploy_base_lsp8_mintable.ts rename to packages/lsp-smart-contracts/deploy/011_deploy_base_lsp8_mintable.ts diff --git a/deploy/012_deploy_vault.ts b/packages/lsp-smart-contracts/deploy/012_deploy_vault.ts similarity index 100% rename from deploy/012_deploy_vault.ts rename to packages/lsp-smart-contracts/deploy/012_deploy_vault.ts diff --git a/deploy/013_deploy_base_vault.ts b/packages/lsp-smart-contracts/deploy/013_deploy_base_vault.ts similarity index 100% rename from deploy/013_deploy_base_vault.ts rename to packages/lsp-smart-contracts/deploy/013_deploy_base_vault.ts diff --git a/deploy/014_deploy_lsp23_factory.ts b/packages/lsp-smart-contracts/deploy/014_deploy_lsp23_factory.ts similarity index 98% rename from deploy/014_deploy_lsp23_factory.ts rename to packages/lsp-smart-contracts/deploy/014_deploy_lsp23_factory.ts index 15c60344c..7cfd44f7e 100644 --- a/deploy/014_deploy_lsp23_factory.ts +++ b/packages/lsp-smart-contracts/deploy/014_deploy_lsp23_factory.ts @@ -1,4 +1,4 @@ -import { getCreate2Address, hexConcat, keccak256 } from 'ethers/lib/utils'; +import { getCreate2Address, concat, keccak256 } from 'ethers'; import { config, ethers } from 'hardhat'; import { DeployFunction } from 'hardhat-deploy/types'; @@ -47,7 +47,7 @@ const deployLSP23Factory: DeployFunction = async ({ getNamedAccounts }) => { const deploysLsp23Tx = { to: nickFactoryAddress, - data: hexConcat([LSP23_SALT, LSP23_BYTECODE]), + data: concat([LSP23_SALT, LSP23_BYTECODE]), }; const tx = await deployer.sendTransaction(deploysLsp23Tx); diff --git a/deploy/015_deploy_up_post_deployment_module_init.ts b/packages/lsp-smart-contracts/deploy/015_deploy_up_post_deployment_module_init.ts similarity index 99% rename from deploy/015_deploy_up_post_deployment_module_init.ts rename to packages/lsp-smart-contracts/deploy/015_deploy_up_post_deployment_module_init.ts index a906261b8..9b7c0fa47 100644 --- a/deploy/015_deploy_up_post_deployment_module_init.ts +++ b/packages/lsp-smart-contracts/deploy/015_deploy_up_post_deployment_module_init.ts @@ -1,4 +1,4 @@ -import { getCreate2Address, hexConcat, keccak256 } from 'ethers/lib/utils'; +import { getCreate2Address, concat, keccak256 } from 'ethers'; import { config, ethers } from 'hardhat'; import { DeployFunction } from 'hardhat-deploy/types'; @@ -49,7 +49,7 @@ const deployUpPostDeploymentModuleInit: DeployFunction = async ({ getNamedAccoun const deployUpInitPostDeploymentModuleTx = { to: nickFactoryAddress, - data: hexConcat([STANDARD_SALT, UP_INIT_POST_DEPLOYMENT_MODULE_BYTEODE]), + data: concat([STANDARD_SALT, UP_INIT_POST_DEPLOYMENT_MODULE_BYTEODE]), }; const tx = await deployer.sendTransaction(deployUpInitPostDeploymentModuleTx); diff --git a/deploy/salt.ts b/packages/lsp-smart-contracts/deploy/salt.ts similarity index 100% rename from deploy/salt.ts rename to packages/lsp-smart-contracts/deploy/salt.ts From 58dab97b12eaefa32b1447bef3a697e6bd0951df Mon Sep 17 00:00:00 2001 From: CJ42 Date: Thu, 25 Jul 2024 10:00:25 +0100 Subject: [PATCH 17/94] docs: add LSP0 typeId for Value Received in Natspec comments for `UniversalReceiver` event --- .../lsp0-contracts/contracts/LSP0ERC725Account.sol | 2 +- .../contracts/LSP0ERC725AccountCore.sol | 14 +++++++------- .../contracts/LSP0ERC725AccountInit.sol | 2 +- .../contracts/LSP0ERC725AccountInitAbstract.sol | 2 +- .../contracts/ILSP1UniversalReceiver.sol | 2 +- .../contracts/LSP6KeyManagerCore.sol | 2 ++ 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol b/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol index 9306c3184..68e5c75d6 100644 --- a/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol +++ b/packages/lsp0-contracts/contracts/LSP0ERC725Account.sol @@ -37,7 +37,7 @@ contract LSP0ERC725Account is LSP0ERC725AccountCore, Version { * @param initialOwner The owner of the contract. * * @custom:events - * - {UniversalReceiver} event when funding the contract on deployment. + * - {UniversalReceiver} event with typeId {`LSP0ValueReceived`} when when funding the contract on deployment. * - {OwnershipTransferred} event when `initialOwner` is set as the contract {owner}. */ constructor(address initialOwner) payable { diff --git a/packages/lsp0-contracts/contracts/LSP0ERC725AccountCore.sol b/packages/lsp0-contracts/contracts/LSP0ERC725AccountCore.sol index e88495751..9ea51e2f8 100644 --- a/packages/lsp0-contracts/contracts/LSP0ERC725AccountCore.sol +++ b/packages/lsp0-contracts/contracts/LSP0ERC725AccountCore.sol @@ -101,7 +101,7 @@ abstract contract LSP0ERC725AccountCore is * @custom:info This function internally delegates the handling of native tokens to the {universalReceiver} function * passing `_TYPEID_LSP0_VALUE_RECEIVED` as typeId and an empty bytes array as received data. * - * @custom:events Emits a {UniversalReceiver} event when the `universalReceiver` logic is executed upon receiving native tokens. + * * @custom:events Emits a {UniversalReceiver} event with typeId {`LSP0ValueReceived`} when the `universalReceiver` logic is executed upon receiving native tokens. */ receive() external payable virtual { if (msg.value != 0) { @@ -131,7 +131,7 @@ abstract contract LSP0ERC725AccountCore is * @custom:info Whenever the call is associated with native tokens, the function will delegate the handling of native tokens internally to the {universalReceiver} function * passing `_TYPEID_LSP0_VALUE_RECEIVED` as typeId and the calldata as received data, except when the native token will be sent directly to the extension. * - * @custom:events {UniversalReceiver} event when receiving native tokens and extension function selector is not found or not payable. + * * @custom:events {UniversalReceiver} event with typeId {`LSP0ValueReceived`} when receiving native tokens and extension function selector is not found or not payable. */ // solhint-disable-next-line no-complex-fallback fallback( @@ -197,7 +197,7 @@ abstract contract LSP0ERC725AccountCore is * @custom:events * - {Executed} event for each call that uses under `operationType`: `CALL` (0), `STATICCALL` (3) and `DELEGATECALL` (4). * - {ContractCreated} event, when a contract is created under `operationType`: `CREATE` (1) and `CREATE2` (2). - * - {UniversalReceiver} event when receiving native tokens. + * - {UniversalReceiver} event with typeId {`LSP0ValueReceived`} when receiving native tokens. */ function execute( uint256 operationType, @@ -261,7 +261,7 @@ abstract contract LSP0ERC725AccountCore is * @custom:events * - {Executed} event for each call that uses under `operationType`: `CALL` (0), `STATICCALL` (3) and `DELEGATECALL` (4). (each iteration) * - {ContractCreated} event, when a contract is created under `operationType`: `CREATE` (1) and `CREATE2` (2) (each iteration) - * - {UniversalReceiver} event when receiving native tokens. + * - {UniversalReceiver} event with typeId {`LSP0ValueReceived`} when receiving native tokens. */ function executeBatch( uint256[] memory operationsType, @@ -321,7 +321,7 @@ abstract contract LSP0ERC725AccountCore is * @custom:requirements Can be only called by the {owner} or by an authorised address that pass the verification check performed on the owner. * * @custom:events - * - {UniversalReceiver} event when receiving native tokens. + * - {UniversalReceiver} event with typeId {`LSP0ValueReceived`} when receiving native tokens. * - {DataChanged} event. */ function setData( @@ -364,7 +364,7 @@ abstract contract LSP0ERC725AccountCore is * @custom:requirements Can be only called by the {owner} or by an authorised address that pass the verification check performed on the owner. * * @custom:events - * - {UniversalReceiver} event when receiving native tokens. + * - {UniversalReceiver} event with typeId {`LSP0ValueReceived`} when receiving native tokens. * - {DataChanged} event. (on each iteration of setting data) */ function setDataBatch( @@ -452,7 +452,7 @@ abstract contract LSP0ERC725AccountCore is * @return returnedValues The ABI encoded return value of the LSP1UniversalReceiverDelegate call and the LSP1TypeIdDelegate call. * * @custom:events - * - {UniversalReceiver} when receiving native tokens. + * - {UniversalReceiver} with typeId {`LSP0ValueReceived`} when receiving native tokens. * - {UniversalReceiver} event with the function parameters, call options, and the response of the UniversalReceiverDelegates (URD) contract that was called. */ function universalReceiver( diff --git a/packages/lsp0-contracts/contracts/LSP0ERC725AccountInit.sol b/packages/lsp0-contracts/contracts/LSP0ERC725AccountInit.sol index 5880ce8b9..1015570dc 100644 --- a/packages/lsp0-contracts/contracts/LSP0ERC725AccountInit.sol +++ b/packages/lsp0-contracts/contracts/LSP0ERC725AccountInit.sol @@ -39,7 +39,7 @@ contract LSP0ERC725AccountInit is LSP0ERC725AccountInitAbstract, Version { * @param initialOwner The owner of the contract. * * @custom:events - * - {UniversalReceiver} event when funding the contract on deployment. + * - {UniversalReceiver} event with typeId `LSP0ValueReceived` when funding the contract on initialization. * - {OwnershipTransferred} event when `initialOwner` is set as the contract {owner}. */ function initialize( diff --git a/packages/lsp0-contracts/contracts/LSP0ERC725AccountInitAbstract.sol b/packages/lsp0-contracts/contracts/LSP0ERC725AccountInitAbstract.sol index 3496a636b..187907ff2 100644 --- a/packages/lsp0-contracts/contracts/LSP0ERC725AccountInitAbstract.sol +++ b/packages/lsp0-contracts/contracts/LSP0ERC725AccountInitAbstract.sol @@ -32,7 +32,7 @@ abstract contract LSP0ERC725AccountInitAbstract is * If you decide to add non-zero initial state to any of those contracts, you MUST initialize them here. * * @custom:events - * - {UniversalReceiver} event when funding the contract on deployment. + * - {UniversalReceiver} event with typeId `LSP0ValueReceived` when funding the contract on initialization. * - {OwnershipTransferred} event when `initialOwner` is set as the contract {owner}. */ function _initialize( diff --git a/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol b/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol index 215bc5439..ed12bffd6 100644 --- a/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol +++ b/packages/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol @@ -12,7 +12,7 @@ interface ILSP1UniversalReceiver { * * @param from The address of the EOA or smart contract that called the {universalReceiver(...)} function. * @param value The amount sent to the {universalReceiver(...)} function. - * @param typeId A `bytes32` unique identifier (= _"hook"_)that describe the type of notification, information or transaction received by the contract. Can be related to a specific standard or a hook. + * @param typeId A `bytes32` unique identifier (= _"hook"_) that describe the type of notification, information or transaction received by the contract. Can be related to a specific standard or a hook. * @param receivedData Any arbitrary data that was sent to the {universalReceiver(...)} function. * @param returnedValue The value returned by the {universalReceiver(...)} function. */ diff --git a/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol b/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol index 0e056273d..9e5b63f2a 100644 --- a/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol +++ b/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol @@ -129,6 +129,8 @@ abstract contract LSP6KeyManagerCore is /** * @inheritdoc ILSP25 * + * @custom:info For more details, see the internal function {`_getNonce`}. + * * @custom:hint A signer can choose its channel number arbitrarily. The recommended practice is to: * - use `channelId == 0` for transactions for which the ordering of execution matters.abi * From 0a00ce9492a116a80013c20986d88f6753d23c06 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Mon, 29 Jul 2024 17:01:04 +0200 Subject: [PATCH 18/94] docs: update incorrect link for execute relay call guide --- .../docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md | 4 ++-- packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md b/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md index 852ea357c..4bbcfeb3b 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md @@ -36,7 +36,7 @@ When marked as 'public', a method can be called both externally and internally, constructor(address target_); ``` -_Deploying a LSP6KeyManager linked to the contract at address `target_`._ +_Deploying a LSP6KeyManager linked to the contract at address `target_`.\_ Deploy a Key Manager and set the `target_` address in the contract storage, making this Key Manager linked to this `target_` contract. @@ -176,7 +176,7 @@ Same as [`execute`](#execute) but execute a batch of payloads (abi-encoded funct :::tip Hint -If you are looking to learn how to sign and execute relay transactions via the Key Manager, see our Javascript step by step guide [_"Execute Relay Transactions"_](../../../learn/expert-guides/key-manager/execute-relay-transactions.md). See the LSP6 Standard page for more details on how to [generate a valid signature for Execute Relay Call](../../../standards/universal-profile/lsp6-key-manager.md#how-to-sign-relay-transactions). +If you are looking to learn how to sign and execute relay transactions via the Key Manager, see our Javascript step by step guide [_"Execute Relay Transactions"_](../../../learn/universal-profile/key-manager/execute-relay-transactions.md). See the LSP6 Standard page for more details on how to [generate a valid signature for Execute Relay Call](../../../standards/universal-profile/lsp6-key-manager.md#how-to-sign-relay-transactions). ::: diff --git a/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol b/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol index 9e5b63f2a..cf63a2411 100644 --- a/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol +++ b/packages/lsp6-contracts/contracts/LSP6KeyManagerCore.sol @@ -242,7 +242,7 @@ abstract contract LSP6KeyManagerCore is * @custom:events {PermissionsVerified} event when the permissions related to `payload` have been verified successfully. * * @custom:hint If you are looking to learn how to sign and execute relay transactions via the Key Manager, - * see our Javascript step by step guide [_"Execute Relay Transactions"_](../../../learn/expert-guides/key-manager/execute-relay-transactions.md). + * see our Javascript step by step guide [_"Execute Relay Transactions"_](../../../learn/universal-profile/key-manager/execute-relay-transactions.md). * See the LSP6 Standard page for more details on how to * [generate a valid signature for Execute Relay Call](../../../standards/universal-profile/lsp6-key-manager.md#how-to-sign-relay-transactions). */ From 6c7b4cf7bcd042d6b2dd693bfe5fdbbc8b867516 Mon Sep 17 00:00:00 2001 From: b00ste Date: Wed, 3 Jul 2024 11:56:21 +0300 Subject: [PATCH 19/94] feat: create and test `LSP26FollowingSystem` --- package-lock.json | 14885 +++++++--------- packages/lsp26-contracts/.eslintrc.js | 4 + packages/lsp26-contracts/.solhint.json | 25 + packages/lsp26-contracts/README.md | 51 + packages/lsp26-contracts/build.config.ts | 9 + packages/lsp26-contracts/constants.ts | 4 + .../contracts/ILSP26FollowingSystem.sol | 58 + .../lsp26-contracts/contracts/Imports.sol | 7 + .../contracts/LSP26Constants.sol | 8 + .../lsp26-contracts/contracts/LSP26Errors.sol | 10 + .../contracts/LSP26FollowingSystem.sol | 154 + packages/lsp26-contracts/gasCost.json | 1120 ++ packages/lsp26-contracts/hardhat.config.ts | 133 + packages/lsp26-contracts/index.ts | 1 + packages/lsp26-contracts/package.json | 55 + .../tests/LSP26FollowingSystem.test.ts | 178 + packages/lsp26-contracts/tsconfig.json | 4 + packages/lsp26-contracts/wagmi.config.ts | 19 + template/package.json | 2 +- 19 files changed, 8006 insertions(+), 8721 deletions(-) create mode 100644 packages/lsp26-contracts/.eslintrc.js create mode 100644 packages/lsp26-contracts/.solhint.json create mode 100644 packages/lsp26-contracts/README.md create mode 100644 packages/lsp26-contracts/build.config.ts create mode 100644 packages/lsp26-contracts/constants.ts create mode 100644 packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol create mode 100644 packages/lsp26-contracts/contracts/Imports.sol create mode 100644 packages/lsp26-contracts/contracts/LSP26Constants.sol create mode 100644 packages/lsp26-contracts/contracts/LSP26Errors.sol create mode 100644 packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol create mode 100644 packages/lsp26-contracts/gasCost.json create mode 100644 packages/lsp26-contracts/hardhat.config.ts create mode 100644 packages/lsp26-contracts/index.ts create mode 100644 packages/lsp26-contracts/package.json create mode 100644 packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts create mode 100644 packages/lsp26-contracts/tsconfig.json create mode 100644 packages/lsp26-contracts/wagmi.config.ts diff --git a/package-lock.json b/package-lock.json index f05a20a37..81d802ad7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,40 +64,52 @@ "eslint-plugin-prettier": "^4.2.1" } }, - "config/tsconfig": { - "version": "0.0.0", - "license": "Apache-2.0" + "config/eslint-config-custom/node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" + } }, - "config/wagmi-config-custom": { - "version": "0.0.0", - "extraneous": true, + "config/eslint-config-custom/node_modules/eslint-config-turbo": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.13.4.tgz", + "integrity": "sha512-+we4eWdZlmlEn7LnhXHCIPX/wtujbHCS7XjQM/TN09BHNEl2fZ8id4rHfdfUKIYTSKyy8U/nNyJ0DNoZj5Q8bw==", "dependencies": { - "@wagmi/cli": "^2.1.2" + "eslint-plugin-turbo": "1.13.4" + }, + "peerDependencies": { + "eslint": ">6.6.0" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "engines": { - "node": ">=0.10.0" + "config/eslint-config-custom/node_modules/eslint-plugin-turbo": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.13.4.tgz", + "integrity": "sha512-82GfMzrewI/DJB92Bbch239GWbGx4j1zvjk1lqb06lxIlMPnVwUHVwPbAnLfyLG3JuhLv9whxGkO/q1CL18JTg==", + "dependencies": { + "dotenv": "16.0.3" + }, + "peerDependencies": { + "eslint": ">6.6.0" } }, + "config/tsconfig": { + "version": "0.0.0", + "license": "Apache-2.0" + }, "node_modules/@account-abstraction/contracts": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.6.0.tgz", - "integrity": "sha512-8ooRJuR7XzohMDM4MV34I12Ci2bmxfE9+cixakRL7lA4BAwJKQ3ahvd8FbJa9kiwkUPCUNtj+/zxDQWYYalLMQ==" + "license": "MIT" }, "node_modules/@adraffy/ens-normalize": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -108,8 +120,7 @@ }, "node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -117,9 +128,8 @@ }, "node_modules/@b00ste/hardhat-dodoc": { "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@b00ste/hardhat-dodoc/-/hardhat-dodoc-0.3.16.tgz", - "integrity": "sha512-ofCRmEkKG/DADlMzeMNQm1U5wthZpYdhOU4jQ2h3Enh3kygRBLqP7A7zAzOfFqLOvrGf+IsfZZosbcVtjhK1og==", "dev": true, + "license": "MIT", "dependencies": { "@lukso/lsp-smart-contracts": "^0.14.0", "squirrelly": "^8.0.8" @@ -131,9 +141,8 @@ }, "node_modules/@b00ste/hardhat-dodoc/node_modules/@lukso/lsp-smart-contracts": { "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp-smart-contracts/-/lsp-smart-contracts-0.14.0.tgz", - "integrity": "sha512-HjMpO/DfcAnL2YAoGSq4TazwsKof3CClyi33cwkOIdH7b81DMP5Z4LLjOjAGURrJlMj8wH4cLp5+4nvZ4NVSIA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@account-abstraction/contracts": "^0.6.0", "@erc725/smart-contracts": "^7.0.0", @@ -144,35 +153,32 @@ }, "node_modules/@babel/code-frame": { "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "license": "MIT", "dependencies": { "@babel/highlight": "^7.10.4" } }, "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "version": "7.25.4", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", - "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "version": "7.25.2", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.0", - "@babel/parser": "^7.24.0", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -188,25 +194,23 @@ } }, "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/generator": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", - "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "version": "7.25.6", + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.6", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -215,21 +219,19 @@ }, "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "version": "7.25.2", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -239,16 +241,14 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz", - "integrity": "sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA==", + "version": "0.6.2", + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -260,58 +260,25 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "version": "7.25.2", + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" }, "engines": { "node": ">=6.9.0" @@ -321,89 +288,74 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.24.8", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "version": "7.24.8", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.8", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", - "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "version": "7.25.6", + "license": "MIT", "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "version": "7.25.6", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -412,15 +364,14 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.0.tgz", - "integrity": "sha512-zc0GA5IitLKJrSfXlXmp8KDqLrnGECK7YRfQBmEKg1NmBOQ7e+KuclBEKJgzifQeUYLdNiAw4B4bjyvzWVLiSA==", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", + "version": "7.25.4", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, "engines": { @@ -431,9 +382,8 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", - "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "version": "7.25.6", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -442,10 +392,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.0.tgz", - "integrity": "sha512-HxiRMOncx3ly6f3fcZ1GVKf+/EROcI9qwPgmij8Czqy6Okm/0T37T4y2ZIlLUuEUFjtM7NRsfdCO8Y3tAiJZew==", + "version": "7.25.6", "dev": true, + "license": "MIT", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -455,52 +404,45 @@ } }, "node_modules/@babel/standalone": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.24.0.tgz", - "integrity": "sha512-yIZ/X3EAASgX/MW1Bn8iZKxCwixgYJAUaIScoZ9C6Gapw5l3eKIbtVSgO/IGldQed9QXm22yurKVWyWj5/j+SQ==", + "version": "7.25.6", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.25.0", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", - "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0", + "version": "7.25.6", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -509,12 +451,11 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -522,19 +463,17 @@ }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.25.6", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -543,9 +482,8 @@ }, "node_modules/@colors/colors": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" @@ -553,9 +491,8 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -565,9 +502,8 @@ }, "node_modules/@erc725/erc725.js": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@erc725/erc725.js/-/erc725.js-0.23.0.tgz", - "integrity": "sha512-v2qPnH7IXSh4td3br+LNXdhfiFrtx/AOBnNbFZKZVHQdVdapKAtZVmrKV1svTlztxxRgQQ24wLgEMkxr9GiguA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "add": "^2.0.6", "ethereumjs-util": "^7.1.5", @@ -578,8 +514,7 @@ }, "node_modules/@erc725/smart-contracts": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-7.0.0.tgz", - "integrity": "sha512-O/Ki+0JqRStPUHXjdU4JhDUzncLdC33c0xjTRiwWwBYbxL77LlWaPfG96fWp2hF2kdR0zNYvcsnZZds+uj2QMg==", + "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/contracts-upgradeable": "^4.9.3", @@ -603,9 +538,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], @@ -619,9 +554,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], @@ -635,9 +570,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ "x64" ], @@ -652,12 +587,11 @@ }, "node_modules/@esbuild/darwin-arm64": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -667,9 +601,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], @@ -683,9 +617,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "cpu": [ "arm64" ], @@ -699,9 +633,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "cpu": [ "x64" ], @@ -715,9 +649,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], @@ -731,9 +665,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], @@ -747,9 +681,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ "ia32" ], @@ -763,9 +697,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ "loong64" ], @@ -779,9 +713,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ "mips64el" ], @@ -795,9 +729,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ "ppc64" ], @@ -811,9 +745,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ "riscv64" ], @@ -827,9 +761,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ "s390x" ], @@ -843,9 +777,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], @@ -859,9 +793,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ "x64" ], @@ -874,10 +808,26 @@ "node": ">=12" } }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], @@ -891,9 +841,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], @@ -907,9 +857,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], @@ -923,9 +873,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], @@ -939,9 +889,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], @@ -956,8 +906,7 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -970,8 +919,7 @@ }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -980,17 +928,15 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", @@ -1008,16 +954,14 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1025,8 +969,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -1037,8 +980,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1048,13 +990,11 @@ }, "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "license": "BSD-3-Clause" }, "node_modules/@ethereumjs/common": { "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", + "license": "MIT", "dependencies": { "crc-32": "^1.2.0", "ethereumjs-util": "^7.1.5" @@ -1062,9 +1002,8 @@ }, "node_modules/@ethereumjs/rlp": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", "dev": true, + "license": "MPL-2.0", "bin": { "rlp": "bin/rlp" }, @@ -1074,8 +1013,7 @@ }, "node_modules/@ethereumjs/tx": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", + "license": "MPL-2.0", "dependencies": { "@ethereumjs/common": "^2.6.4", "ethereumjs-util": "^7.1.5" @@ -1083,9 +1021,8 @@ }, "node_modules/@ethereumjs/util": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", - "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@ethereumjs/rlp": "^4.0.1", "ethereum-cryptography": "^2.0.0", @@ -1096,22 +1033,20 @@ } }, "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "version": "1.4.2", "dev": true, + "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.3" + "@noble/hashes": "1.4.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "version": "1.4.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" }, @@ -1120,21 +1055,18 @@ } }, "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "version": "2.2.1", "dev": true, + "license": "MIT", "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, "node_modules/@ethersproject/abi": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", "funding": [ { "type": "individual", @@ -1145,6 +1077,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -1159,8 +1092,6 @@ }, "node_modules/@ethersproject/abstract-provider": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", "funding": [ { "type": "individual", @@ -1171,6 +1102,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -1183,8 +1115,6 @@ }, "node_modules/@ethersproject/abstract-signer": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", "funding": [ { "type": "individual", @@ -1195,6 +1125,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -1205,8 +1136,6 @@ }, "node_modules/@ethersproject/address": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", "funding": [ { "type": "individual", @@ -1217,6 +1146,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -1227,8 +1157,6 @@ }, "node_modules/@ethersproject/base64": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", "funding": [ { "type": "individual", @@ -1239,14 +1167,13 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0" } }, "node_modules/@ethersproject/basex": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", "dev": true, "funding": [ { @@ -1258,6 +1185,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/properties": "^5.7.0" @@ -1265,8 +1193,6 @@ }, "node_modules/@ethersproject/bignumber": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", "funding": [ { "type": "individual", @@ -1277,6 +1203,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -1285,8 +1212,6 @@ }, "node_modules/@ethersproject/bytes": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", "funding": [ { "type": "individual", @@ -1297,14 +1222,13 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "node_modules/@ethersproject/constants": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", "funding": [ { "type": "individual", @@ -1315,14 +1239,13 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.7.0" } }, "node_modules/@ethersproject/contracts": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", "dev": true, "funding": [ { @@ -1334,6 +1257,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", @@ -1349,8 +1273,6 @@ }, "node_modules/@ethersproject/hash": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", "funding": [ { "type": "individual", @@ -1361,6 +1283,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", @@ -1375,8 +1298,6 @@ }, "node_modules/@ethersproject/hdnode": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", "dev": true, "funding": [ { @@ -1388,6 +1309,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/basex": "^5.7.0", @@ -1405,8 +1327,6 @@ }, "node_modules/@ethersproject/json-wallets": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", "dev": true, "funding": [ { @@ -1418,6 +1338,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", @@ -1436,14 +1357,11 @@ }, "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@ethersproject/keccak256": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", "funding": [ { "type": "individual", @@ -1454,6 +1372,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "js-sha3": "0.8.0" @@ -1461,8 +1380,6 @@ }, "node_modules/@ethersproject/logger": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", "funding": [ { "type": "individual", @@ -1472,12 +1389,11 @@ "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } - ] + ], + "license": "MIT" }, "node_modules/@ethersproject/networks": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", "funding": [ { "type": "individual", @@ -1488,14 +1404,13 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "node_modules/@ethersproject/pbkdf2": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", "dev": true, "funding": [ { @@ -1507,6 +1422,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/sha2": "^5.7.0" @@ -1514,8 +1430,6 @@ }, "node_modules/@ethersproject/properties": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", "funding": [ { "type": "individual", @@ -1526,14 +1440,13 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.7.0" } }, "node_modules/@ethersproject/providers": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", "dev": true, "funding": [ { @@ -1545,6 +1458,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -1570,9 +1484,8 @@ }, "node_modules/@ethersproject/providers/node_modules/ws": { "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -1591,8 +1504,6 @@ }, "node_modules/@ethersproject/random": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", "dev": true, "funding": [ { @@ -1604,6 +1515,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" @@ -1611,8 +1523,6 @@ }, "node_modules/@ethersproject/rlp": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", "funding": [ { "type": "individual", @@ -1623,6 +1533,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" @@ -1630,8 +1541,6 @@ }, "node_modules/@ethersproject/sha2": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", "dev": true, "funding": [ { @@ -1643,6 +1552,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -1651,8 +1561,6 @@ }, "node_modules/@ethersproject/signing-key": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", "funding": [ { "type": "individual", @@ -1663,6 +1571,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -1674,8 +1583,6 @@ }, "node_modules/@ethersproject/solidity": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", "dev": true, "funding": [ { @@ -1687,6 +1594,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -1698,8 +1606,6 @@ }, "node_modules/@ethersproject/strings": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", "funding": [ { "type": "individual", @@ -1710,6 +1616,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", @@ -1718,8 +1625,6 @@ }, "node_modules/@ethersproject/transactions": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", "funding": [ { "type": "individual", @@ -1730,6 +1635,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", @@ -1744,8 +1650,6 @@ }, "node_modules/@ethersproject/units": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", "dev": true, "funding": [ { @@ -1757,6 +1661,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.7.0", "@ethersproject/constants": "^5.7.0", @@ -1765,8 +1670,6 @@ }, "node_modules/@ethersproject/wallet": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", "dev": true, "funding": [ { @@ -1778,6 +1681,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -1798,8 +1702,6 @@ }, "node_modules/@ethersproject/web": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "funding": [ { "type": "individual", @@ -1810,6 +1712,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/base64": "^5.7.0", "@ethersproject/bytes": "^5.7.0", @@ -1820,8 +1723,6 @@ }, "node_modules/@ethersproject/wordlists": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", "dev": true, "funding": [ { @@ -1833,6 +1734,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/hash": "^5.7.0", @@ -1843,17 +1745,15 @@ }, "node_modules/@fastify/busboy": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", @@ -1865,8 +1765,7 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1874,8 +1773,7 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1885,13 +1783,11 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" + "license": "BSD-3-Clause" }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1903,8 +1799,7 @@ }, "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1912,30 +1807,26 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1943,9 +1834,8 @@ }, "node_modules/@lukso/eip191-signer.js": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@lukso/eip191-signer.js/-/eip191-signer.js-0.2.2.tgz", - "integrity": "sha512-FA7CVUyp8GwLmmoCxZ441HHSizCEKcKFDf2awLC/E9ckVbM5R3fcipj9RjafHpTS/YubZggJxKJZl6E8c9iJxw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "eth-lib": "^0.1.29", "ethereumjs-account": "^3.0.0", @@ -2013,6 +1903,10 @@ "resolved": "packages/lsp25-contracts", "link": true }, + "node_modules/@lukso/lsp26-contracts": { + "resolved": "packages/lsp26-contracts", + "link": true + }, "node_modules/@lukso/lsp3-contracts": { "resolved": "packages/lsp3-contracts", "link": true @@ -2047,8 +1941,7 @@ }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "license": "ISC", "dependencies": { "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^6.2.1", @@ -2062,21 +1955,18 @@ }, "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -2089,14 +1979,12 @@ }, "node_modules/@metamask/safe-event-emitter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz", - "integrity": "sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==" + "license": "ISC" }, "node_modules/@noble/curves": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.2" }, @@ -2106,9 +1994,8 @@ }, "node_modules/@noble/hashes": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" }, @@ -2118,19 +2005,17 @@ }, "node_modules/@noble/secp256k1": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2141,16 +2026,14 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2160,183 +2043,90 @@ } }, "node_modules/@nomicfoundation/edr": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.2.1.tgz", - "integrity": "sha512-Dleau3ItHJh2n85G2J6AIPBoLgu/mOWkmrh26z3VsJE2tp/e00hUk/dqz85ncsVcBYEc6/YOn/DomWu0wSF9tQ==", + "version": "0.5.2", "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.5.2", + "@nomicfoundation/edr-darwin-x64": "0.5.2", + "@nomicfoundation/edr-linux-arm64-gnu": "0.5.2", + "@nomicfoundation/edr-linux-arm64-musl": "0.5.2", + "@nomicfoundation/edr-linux-x64-gnu": "0.5.2", + "@nomicfoundation/edr-linux-x64-musl": "0.5.2", + "@nomicfoundation/edr-win32-x64-msvc": "0.5.2" + }, "engines": { "node": ">= 18" - }, - "optionalDependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.2.1", - "@nomicfoundation/edr-darwin-x64": "0.2.1", - "@nomicfoundation/edr-linux-arm64-gnu": "0.2.1", - "@nomicfoundation/edr-linux-arm64-musl": "0.2.1", - "@nomicfoundation/edr-linux-x64-gnu": "0.2.1", - "@nomicfoundation/edr-linux-x64-musl": "0.2.1", - "@nomicfoundation/edr-win32-arm64-msvc": "0.2.1", - "@nomicfoundation/edr-win32-ia32-msvc": "0.2.1", - "@nomicfoundation/edr-win32-x64-msvc": "0.2.1" } }, "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.2.1.tgz", - "integrity": "sha512-aMYaRaZVQ/TmyNJIoXf1bU4k0zfinaL9Sy1day4yGlL6eiQPFfRGj9W6TZaZIoYG0XTx/mQWD7dkXJ7LdrleJA==", - "cpu": [ - "arm64" - ], + "version": "0.5.2", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.2.1.tgz", - "integrity": "sha512-ma0SLcjHm5L3nPHcKFJB0jv/gKGSKaxr5Z65rurX/eaYUQJ7YGMsb8er9bSCo9rjzOtxf4FoPj3grL3zGpOj8A==", - "cpu": [ - "x64" - ], + "version": "0.5.2", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.2.1.tgz", - "integrity": "sha512-NX3G4pBhRitWrjSGY3HTyCq3wKSm5YqrKVOCNQGl9/jcjSovqxlgzFMiTx4YZCzGntfJ/1om9AI84OWxYJjoDw==", - "cpu": [ - "arm64" - ], + "version": "0.5.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.2.1.tgz", - "integrity": "sha512-gdQ3QHkt9XRkdtOGQ8fMwS11MXdjLeZgLrqoial4V4qtMaamIMMhVczK+VEvUhD8p7G4BVmp6kmkvcsthmndmw==", - "cpu": [ - "arm64" - ], + "version": "0.5.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.2.1.tgz", - "integrity": "sha512-OqabFY37vji6mYbLD9CvG28lja68czeVw58oWByIhFV3BpBu/cyP1oAbhzk3LieylujabS3Ekpvjw2Tkf0A9RQ==", - "cpu": [ - "x64" - ], + "version": "0.5.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.2.1.tgz", - "integrity": "sha512-vHfFFK2EPISuQUQge+bdjXamb0EUjfl8srYSog1qfiwyLwLeuSbpyyFzDeITAgPpkkFuedTfJW553K0Hipspyg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-win32-arm64-msvc": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.2.1.tgz", - "integrity": "sha512-K/mui67RCKxghbSyvhvW3rvyVN1pa9M1Q9APUx1PtWjSSdXDFpqEY1NYsv2syb47Ca8ObJwVMF+LvnB6GvhUOQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/edr-win32-ia32-msvc": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.2.1.tgz", - "integrity": "sha512-HHK0mXEtjvfjJrJlqcYgQCy3lZIXS1KNl2GaP8bwEIuEwx++XxXs/ThLjPepM1nhCGICij8IGy7p3KrkzRelsw==", - "cpu": [ - "ia32" - ], + "version": "0.5.2", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.2.1.tgz", - "integrity": "sha512-FY4eQJdj1/y8ST0RyQycx63yr+lvdYNnUkzgWf4X+vPH1lOhXae+L2NDcNCQlTDAfQcD6yz0bkBUkLrlJ8pTww==", - "cpu": [ - "x64" - ], + "version": "0.5.2", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/ethereumjs-common": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", - "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", "dev": true, + "license": "MIT", "dependencies": { "@nomicfoundation/ethereumjs-util": "9.0.4" } }, "node_modules/@nomicfoundation/ethereumjs-rlp": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", - "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", "dev": true, + "license": "MPL-2.0", "bin": { "rlp": "bin/rlp.cjs" }, @@ -2346,9 +2136,8 @@ }, "node_modules/@nomicfoundation/ethereumjs-tx": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", - "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-rlp": "5.0.4", @@ -2369,9 +2158,8 @@ }, "node_modules/@nomicfoundation/ethereumjs-util": { "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", - "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@nomicfoundation/ethereumjs-rlp": "5.0.4", "ethereum-cryptography": "0.1.3" @@ -2389,10 +2177,9 @@ } }, "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.6.tgz", - "integrity": "sha512-Te1Uyo9oJcTCF0Jy9dztaLpshmlpjLf2yPtWXlXuLjMt3RRSmJLm/+rKVTW6gfadAEs12U/it6D0ZRnnRGiICQ==", + "version": "2.0.7", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/chai-as-promised": "^7.1.3", @@ -2408,10 +2195,9 @@ } }, "node_modules/@nomicfoundation/hardhat-ethers": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz", - "integrity": "sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==", + "version": "3.0.8", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "debug": "^4.1.1", @@ -2423,10 +2209,9 @@ } }, "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.10.tgz", - "integrity": "sha512-R35/BMBlx7tWN5V6d/8/19QCwEmIdbnA4ZrsuXgvs8i2qFx5i7h6mH5pBS4Pwi4WigLH+upl6faYusrNPuzMrQ==", + "version": "1.0.11", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "ethereumjs-util": "^7.1.4" @@ -2437,9 +2222,8 @@ }, "node_modules/@nomicfoundation/hardhat-toolbox": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-4.0.0.tgz", - "integrity": "sha512-jhcWHp0aHaL0aDYj8IJl80v4SZXWMS1A2XxXa1CA6pBiFfJKuZinCkO6wb+POAt0LIfXB3gA3AgdcOccrcwBwA==", "dev": true, + "license": "MIT", "peerDependencies": { "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", "@nomicfoundation/hardhat-ethers": "^3.0.0", @@ -2461,10 +2245,9 @@ } }, "node_modules/@nomicfoundation/hardhat-verify": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.4.tgz", - "integrity": "sha512-B8ZjhOrmbbRWqJi65jvQblzjsfYktjqj2vmOm+oc2Vu8drZbT2cjeSCRHZKbS7lOtfW78aJZSFvw+zRLCiABJA==", + "version": "2.0.10", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@ethersproject/abi": "^5.1.2", @@ -2482,191 +2265,89 @@ } }, "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", - "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", + "version": "0.1.2", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" }, "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" } }, "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", - "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", - "cpu": [ - "arm64" - ], + "version": "0.1.2", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", - "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", - "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", - "cpu": [ - "x64" - ], + "version": "0.1.2", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", - "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", - "cpu": [ - "arm64" - ], + "version": "0.1.2", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", - "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", - "cpu": [ - "arm64" - ], + "version": "0.1.2", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", - "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", - "cpu": [ - "x64" - ], + "version": "0.1.2", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", - "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", - "cpu": [ - "x64" - ], + "version": "0.1.2", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", - "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", - "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", - "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", - "cpu": [ - "x64" - ], + "version": "0.1.2", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/@nomiclabs/hardhat-web3": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-web3/-/hardhat-web3-2.0.0.tgz", - "integrity": "sha512-zt4xN+D+fKl3wW2YlTX3k9APR3XZgPkxJYf36AcliJn3oujnKEVRZaHu0PhgLjO+gR+F/kiYayo9fgd2L8970Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/bignumber.js": "^5.0.0" }, @@ -2677,19 +2358,16 @@ }, "node_modules/@openzeppelin/contracts": { "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", - "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==" + "license": "MIT" }, "node_modules/@openzeppelin/contracts-upgradeable": { "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.6.tgz", - "integrity": "sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA==" + "license": "MIT" }, "node_modules/@rollup/plugin-alias": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.1.0.tgz", - "integrity": "sha512-lpA3RZ9PdIG7qqhEfv79tBffNaoDuukFDrmhLqg9ifv99u/ehn+lOg30x2zmhf8AQqQUZaMk/B9fZraQ6/acDQ==", "dev": true, + "license": "MIT", "dependencies": { "slash": "^4.0.0" }, @@ -2707,9 +2385,8 @@ }, "node_modules/@rollup/plugin-alias/node_modules/slash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2718,10 +2395,9 @@ } }, "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.7", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", - "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", + "version": "25.0.8", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", @@ -2744,9 +2420,8 @@ }, "node_modules/@rollup/plugin-commonjs/node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2763,9 +2438,8 @@ }, "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2775,9 +2449,8 @@ }, "node_modules/@rollup/plugin-json": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", - "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.1.0" }, @@ -2795,9 +2468,8 @@ }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.2.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", - "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -2820,9 +2492,8 @@ }, "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -2836,10 +2507,9 @@ } }, "node_modules/@rollup/plugin-replace": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.5.tgz", - "integrity": "sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==", + "version": "5.0.7", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "magic-string": "^0.30.3" @@ -2858,9 +2528,8 @@ }, "node_modules/@rollup/pluginutils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -2878,227 +2547,54 @@ } } }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true - }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.21.2", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "peer": true }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, "node_modules/@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", + "version": "1.1.8", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip32": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", - "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "version": "1.4.0", "dev": true, + "license": "MIT", "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "version": "1.4.2", "dev": true, + "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.3" + "@noble/hashes": "1.4.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "version": "1.4.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" }, @@ -3107,13 +2603,23 @@ } }, "node_modules/@scure/bip39": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", - "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "version": "1.3.0", "dev": true, + "license": "MIT", "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -3121,9 +2627,8 @@ }, "node_modules/@sentry/core": { "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -3137,15 +2642,13 @@ }, "node_modules/@sentry/core/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sentry/hub": { "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/types": "5.30.0", "@sentry/utils": "5.30.0", @@ -3157,15 +2660,13 @@ }, "node_modules/@sentry/hub/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sentry/minimal": { "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/types": "5.30.0", @@ -3177,15 +2678,13 @@ }, "node_modules/@sentry/minimal/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sentry/node": { "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/core": "5.30.0", "@sentry/hub": "5.30.0", @@ -3203,15 +2702,13 @@ }, "node_modules/@sentry/node/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sentry/tracing": { "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", "dev": true, + "license": "MIT", "dependencies": { "@sentry/hub": "5.30.0", "@sentry/minimal": "5.30.0", @@ -3225,24 +2722,21 @@ }, "node_modules/@sentry/tracing/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sentry/types": { "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=6" } }, "node_modules/@sentry/utils": { "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sentry/types": "5.30.0", "tslib": "^1.9.3" @@ -3253,14 +2747,12 @@ }, "node_modules/@sentry/utils/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -3270,17 +2762,15 @@ }, "node_modules/@solidity-parser/parser": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", "dev": true, + "license": "MIT", "dependencies": { "antlr4ts": "^0.5.0-alpha.4" } }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -3290,15 +2780,12 @@ }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@truffle/hdwallet": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet/-/hdwallet-0.1.4.tgz", - "integrity": "sha512-D3SN0iw3sMWUXjWAedP6RJtopo9qQXYi80inzbtcsoso4VhxFxCwFvCErCl4b27AEJ9pkAtgnxEFRaSKdMmi1Q==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", "dependencies": { "ethereum-cryptography": "1.1.2", "keccak": "3.0.2", @@ -3333,8 +2820,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/common": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", - "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", + "license": "MIT", "dependencies": { "crc-32": "^1.2.0", "ethereumjs-util": "^7.1.1" @@ -3342,8 +2828,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/tx": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", - "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "license": "MPL-2.0", "dependencies": { "@ethereumjs/common": "^2.5.0", "ethereumjs-util": "^7.1.2" @@ -3351,25 +2836,23 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/@noble/hashes": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@truffle/hdwallet-provider/node_modules/@scure/bip32": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "@noble/hashes": "~1.1.1", "@noble/secp256k1": "~1.6.0", @@ -3378,14 +2861,13 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/@scure/bip39": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "@noble/hashes": "~1.1.1", "@scure/base": "~1.1.0" @@ -3393,21 +2875,18 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/@types/node": { "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + "license": "MIT" }, "node_modules/@truffle/hdwallet-provider/node_modules/cross-fetch": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/@truffle/hdwallet-provider/node_modules/eth-lib": { "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "license": "MIT", "dependencies": { "bn.js": "^4.11.6", "elliptic": "^6.4.0", @@ -3416,13 +2895,11 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/eth-lib/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/@truffle/hdwallet-provider/node_modules/ethereum-cryptography": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.1.2", "@noble/secp256k1": "1.6.3", @@ -3432,21 +2909,19 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/uuid": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@truffle/hdwallet-provider/node_modules/web3": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.0.tgz", - "integrity": "sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==", "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { "web3-bzz": "1.10.0", "web3-core": "1.10.0", @@ -3462,9 +2937,8 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-bzz": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.0.tgz", - "integrity": "sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==", "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { "@types/node": "^12.12.6", "got": "12.1.0", @@ -3476,8 +2950,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-core": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.0.tgz", - "integrity": "sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==", + "license": "LGPL-3.0", "dependencies": { "@types/bn.js": "^5.1.1", "@types/node": "^12.12.6", @@ -3493,8 +2966,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-helpers": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz", - "integrity": "sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==", + "license": "LGPL-3.0", "dependencies": { "web3-eth-iban": "1.10.0", "web3-utils": "1.10.0" @@ -3505,8 +2977,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-method": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.0.tgz", - "integrity": "sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==", + "license": "LGPL-3.0", "dependencies": { "@ethersproject/transactions": "^5.6.2", "web3-core-helpers": "1.10.0", @@ -3520,8 +2991,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-promievent": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz", - "integrity": "sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==", + "license": "LGPL-3.0", "dependencies": { "eventemitter3": "4.0.4" }, @@ -3531,8 +3001,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-requestmanager": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz", - "integrity": "sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==", + "license": "LGPL-3.0", "dependencies": { "util": "^0.12.5", "web3-core-helpers": "1.10.0", @@ -3546,8 +3015,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-subscriptions": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz", - "integrity": "sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==", + "license": "LGPL-3.0", "dependencies": { "eventemitter3": "4.0.4", "web3-core-helpers": "1.10.0" @@ -3558,8 +3026,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.0.tgz", - "integrity": "sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==", + "license": "LGPL-3.0", "dependencies": { "web3-core": "1.10.0", "web3-core-helpers": "1.10.0", @@ -3580,8 +3047,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-abi": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz", - "integrity": "sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==", + "license": "LGPL-3.0", "dependencies": { "@ethersproject/abi": "^5.6.3", "web3-utils": "1.10.0" @@ -3592,8 +3058,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-accounts": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz", - "integrity": "sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==", + "license": "LGPL-3.0", "dependencies": { "@ethereumjs/common": "2.5.0", "@ethereumjs/tx": "3.3.2", @@ -3612,8 +3077,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-contract": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz", - "integrity": "sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==", + "license": "LGPL-3.0", "dependencies": { "@types/bn.js": "^5.1.1", "web3-core": "1.10.0", @@ -3630,8 +3094,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-ens": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz", - "integrity": "sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==", + "license": "LGPL-3.0", "dependencies": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", @@ -3648,8 +3111,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-iban": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz", - "integrity": "sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==", + "license": "LGPL-3.0", "dependencies": { "bn.js": "^5.2.1", "web3-utils": "1.10.0" @@ -3660,8 +3122,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-personal": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz", - "integrity": "sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==", + "license": "LGPL-3.0", "dependencies": { "@types/node": "^12.12.6", "web3-core": "1.10.0", @@ -3676,8 +3137,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-net": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.0.tgz", - "integrity": "sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==", + "license": "LGPL-3.0", "dependencies": { "web3-core": "1.10.0", "web3-core-method": "1.10.0", @@ -3689,8 +3149,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-http": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.0.tgz", - "integrity": "sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==", + "license": "LGPL-3.0", "dependencies": { "abortcontroller-polyfill": "^1.7.3", "cross-fetch": "^3.1.4", @@ -3703,8 +3162,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-ipc": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz", - "integrity": "sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==", + "license": "LGPL-3.0", "dependencies": { "oboe": "2.1.5", "web3-core-helpers": "1.10.0" @@ -3715,8 +3173,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-ws": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz", - "integrity": "sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==", + "license": "LGPL-3.0", "dependencies": { "eventemitter3": "4.0.4", "web3-core-helpers": "1.10.0", @@ -3728,9 +3185,8 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-shh": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.0.tgz", - "integrity": "sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==", "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { "web3-core": "1.10.0", "web3-core-method": "1.10.0", @@ -3743,8 +3199,7 @@ }, "node_modules/@truffle/hdwallet-provider/node_modules/web3-utils": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.0.tgz", - "integrity": "sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==", + "license": "LGPL-3.0", "dependencies": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -3760,25 +3215,23 @@ }, "node_modules/@truffle/hdwallet/node_modules/@noble/hashes": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/@truffle/hdwallet/node_modules/@scure/bip32": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "@noble/hashes": "~1.1.1", "@noble/secp256k1": "~1.6.0", @@ -3787,14 +3240,13 @@ }, "node_modules/@truffle/hdwallet/node_modules/@scure/bip39": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "@noble/hashes": "~1.1.1", "@scure/base": "~1.1.0" @@ -3802,8 +3254,7 @@ }, "node_modules/@truffle/hdwallet/node_modules/ethereum-cryptography": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.1.2", "@noble/secp256k1": "1.6.3", @@ -3813,9 +3264,8 @@ }, "node_modules/@truffle/hdwallet/node_modules/keccak": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -3827,44 +3277,38 @@ }, "node_modules/@trysound/sax": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10.13.0" } }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "version": "1.0.11", + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@turbo/gen": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/@turbo/gen/-/gen-1.12.5.tgz", - "integrity": "sha512-sEF/iryAcWYqONXcrAyWREUVPA4eba22hxU1yx4b9+Rs9SUNFkM54cDaXEAtzbh/iji428aQpnuxi+SUT7m9zw==", + "version": "1.13.4", "dev": true, + "license": "MPL-2.0", "dependencies": { - "@turbo/workspaces": "1.12.5", + "@turbo/workspaces": "1.13.4", "chalk": "2.4.2", "commander": "^10.0.0", "fs-extra": "^10.1.0", @@ -3881,10 +3325,9 @@ } }, "node_modules/@turbo/workspaces": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/@turbo/workspaces/-/workspaces-1.12.5.tgz", - "integrity": "sha512-UksAe6nxryEZoUr5IMUzt9bwsZLxccUnT469fI3OE5Xbd5fbInzLKIZ3ZuzFvXR4N7ezr2HCvkUItmgwe7k1HA==", + "version": "1.13.4", "dev": true, + "license": "MPL-2.0", "dependencies": { "chalk": "2.4.2", "commander": "^10.0.0", @@ -3903,26 +3346,10 @@ "workspaces": "dist/cli.js" } }, - "node_modules/@turbo/workspaces/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@turbo/workspaces/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.3", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3930,17 +3357,10 @@ "node": ">=10" } }, - "node_modules/@turbo/workspaces/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typechain/ethers-v6": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", - "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.15", "ts-essentials": "^7.0.1" @@ -3953,9 +3373,8 @@ }, "node_modules/@typechain/hardhat": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", - "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", "dev": true, + "license": "MIT", "dependencies": { "fs-extra": "^9.1.0" }, @@ -3968,9 +3387,8 @@ }, "node_modules/@typechain/hardhat/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -3983,26 +3401,22 @@ }, "node_modules/@types/bignumber.js": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz", - "integrity": "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA==", - "deprecated": "This is a stub types definition for bignumber.js (https://github.com/MikeMcl/bignumber.js/). bignumber.js provides its own type definitions, so you don't need @types/bignumber.js installed!", "dev": true, + "license": "MIT", "dependencies": { "bignumber.js": "*" } }, "node_modules/@types/bn.js": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", - "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/cacheable-request": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -4011,17 +3425,15 @@ } }, "node_modules/@types/chai": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.12.tgz", - "integrity": "sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==", + "version": "4.3.19", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@types/chai-as-promised": { "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/chai": "*" @@ -4029,49 +3441,43 @@ }, "node_modules/@types/concat-stream": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/estree": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ethereum-protocol": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/ethereum-protocol/-/ethereum-protocol-1.0.5.tgz", - "integrity": "sha512-4wr+t2rYbwMmDrT447SGzE/43Z0EN++zyHCBoruIx32fzXQDxVa1rnQbYwPO8sLP2OugE/L8KaAIJC5kieUuBg==", + "license": "MIT", "dependencies": { "bignumber.js": "7.2.1" } }, "node_modules/@types/ethereum-protocol/node_modules/bignumber.js": { "version": "7.2.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", - "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/@types/form-data": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/fs-extra": { "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/jsonfile": "*", "@types/node": "*" @@ -4079,9 +3485,8 @@ }, "node_modules/@types/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimatch": "*", "@types/node": "*" @@ -4089,14 +3494,12 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + "license": "MIT" }, "node_modules/@types/inquirer": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-6.5.0.tgz", - "integrity": "sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==", "dev": true, + "license": "MIT", "dependencies": { "@types/through": "*", "rxjs": "^6.4.0" @@ -4104,9 +3507,8 @@ }, "node_modules/@types/inquirer/node_modules/rxjs": { "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -4116,142 +3518,121 @@ }, "node_modules/@types/inquirer/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "license": "MIT" }, "node_modules/@types/jsonfile": { "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/keyv": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/minimatch": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mocha": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", - "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", + "version": "10.0.7", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@types/node": { - "version": "20.11.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.27.tgz", - "integrity": "sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg==", + "version": "22.5.3", + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/pbkdf2": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/prettier": { "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ps-tree": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.6.tgz", - "integrity": "sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.12", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.12.tgz", - "integrity": "sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==", - "dev": true + "version": "6.9.15", + "dev": true, + "license": "MIT" }, "node_modules/@types/resolve": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/responselike": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/secp256k1": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", - "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/semver": { "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" + "license": "MIT" }, "node_modules/@types/through": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", - "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/tinycolor2": { "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", - "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/underscore": { "version": "1.11.15", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.15.tgz", - "integrity": "sha512-HP38xE+GuWGlbSRq9WrZkousaQ7dragtZCruBVMi0oX1migFZavZ3OROKHSkNp/9ouq82zrWtZpg18jFnVN96g==" + "license": "MIT" }, "node_modules/@types/web3": { "version": "1.0.20", - "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.20.tgz", - "integrity": "sha512-KTDlFuYjzCUlBDGt35Ir5QRtyV9klF84MMKUsEJK10sTWga/71V+8VYLT7yysjuBjaOx2uFYtIWNGoz3yrNDlg==", + "license": "MIT", "dependencies": { "@types/bn.js": "*", "@types/underscore": "*" @@ -4259,22 +3640,19 @@ }, "node_modules/@types/web3-provider-engine": { "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@types/web3-provider-engine/-/web3-provider-engine-14.0.4.tgz", - "integrity": "sha512-59wFvtceRmWXfQFoH8qtFIQZf6B7PqBwgBBmZLu4SjRK6pycnjV8K+jihbaGOFwHjTPcPFm15m+CS6I0BBm4lw==", + "license": "MIT", "dependencies": { "@types/ethereum-protocol": "*" } }, "node_modules/@types/which": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.3.tgz", - "integrity": "sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==", - "dev": true + "version": "3.0.4", + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", @@ -4306,31 +3684,15 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4338,15 +3700,9 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@typescript-eslint/parser": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -4372,8 +3728,7 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" @@ -4388,8 +3743,7 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/utils": "6.21.0", @@ -4414,8 +3768,7 @@ }, "node_modules/@typescript-eslint/types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -4426,8 +3779,7 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", @@ -4453,8 +3805,7 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -4471,31 +3822,28 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4503,15 +3851,9 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@typescript-eslint/utils": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", @@ -4532,24 +3874,9 @@ "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4557,15 +3884,9 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" @@ -4580,8 +3901,7 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4590,29 +3910,30 @@ } }, "node_modules/@wagmi/cli": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@wagmi/cli/-/cli-2.1.2.tgz", - "integrity": "sha512-gJLjPDD+xc7IN6OJYQdOl3xhfnf7nXZoaELCchNo9Pt+1hUVFYq2uC4HGBXYvUQ03RJNmZca1X8qP8pJeuJFYA==", + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@wagmi/cli/-/cli-2.1.16.tgz", + "integrity": "sha512-uERiNCAwThM6Vwgyrimlf+X8tOF0EjDnir6NHqCoumTquJ1/nlKBvpe0CHD3aDx2RQCOWCqhkUIImtN9yk3Oag==", "dev": true, "dependencies": { - "abitype": "^0.9.8", + "abitype": "^1.0.4", "bundle-require": "^4.0.2", "cac": "^6.7.14", - "change-case": "^4.1.2", + "change-case": "^5.4.4", "chokidar": "^3.5.3", "dedent": "^0.7.0", "dotenv": "^16.3.1", "dotenv-expand": "^10.0.0", "esbuild": "^0.19.0", "execa": "^8.0.1", + "fdir": "^6.1.1", "find-up": "^6.3.0", - "fs-extra": "^11.1.1", - "globby": "^13.2.2", + "fs-extra": "^11.2.0", "ora": "^6.3.1", - "pathe": "^1.1.1", + "pathe": "^1.1.2", "picocolors": "^1.0.0", + "picomatch": "^3.0.0", "prettier": "^3.0.3", - "viem": "2.*", + "viem": "2.x", "zod": "^3.22.2" }, "bin": { @@ -4630,419 +3951,347 @@ } } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/android-arm": { + "node_modules/@wagmi/cli/node_modules/@esbuild/darwin-arm64": { "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ - "arm" + "arm64" ], "dev": true, "optional": true, "os": [ - "android" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], + "node_modules/@wagmi/cli/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "optional": true, - "os": [ - "android" - ], "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], + "node_modules/@wagmi/cli/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], + "node_modules/@wagmi/cli/node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true + }, + "node_modules/@wagmi/cli/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "restore-cursor": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/darwin-x64": { + "node_modules/@wagmi/cli/node_modules/esbuild": { "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], + "node_modules/@wagmi/cli/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], + "node_modules/@wagmi/cli/node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], + "node_modules/@wagmi/cli/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], + "node_modules/@wagmi/cli/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=14.14" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], + "node_modules/@wagmi/cli/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], + "node_modules/@wagmi/cli/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=16.17.0" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], + "node_modules/@wagmi/cli/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], + "node_modules/@wagmi/cli/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], + "node_modules/@wagmi/cli/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], + "node_modules/@wagmi/cli/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "p-locate": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], + "node_modules/@wagmi/cli/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], + "node_modules/@wagmi/cli/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], + "node_modules/@wagmi/cli/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "path-key": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], + "node_modules/@wagmi/cli/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "dependencies": { + "mimic-fn": "^4.0.0" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], + "node_modules/@wagmi/cli/node_modules/ora": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", + "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, "engines": { - "node": ">=12" - } - }, - "node_modules/@wagmi/cli/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@wagmi/cli/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@wagmi/cli/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "node_modules/@wagmi/cli/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/@wagmi/cli/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, + "yocto-queue": "^1.0.0" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@wagmi/cli/node_modules/change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "node_modules/@wagmi/cli/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "dependencies": { - "restore-cursor": "^4.0.0" + "p-limit": "^4.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -5051,181 +4300,131 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, - "node_modules/@wagmi/cli/node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/@wagmi/cli/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/@wagmi/cli/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "node_modules/@wagmi/cli/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, "engines": { "node": ">=12" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "node_modules/@wagmi/cli/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, "engines": { - "node": ">=16.17" + "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@wagmi/cli/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "node_modules/@wagmi/cli/node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@wagmi/cli/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "node_modules/@wagmi/cli/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=14.14" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/@wagmi/cli/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", - "dev": true, - "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, - "node_modules/@wagmi/cli/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "node_modules/@wagmi/cli/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "engines": { - "node": ">=16.17.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@wagmi/cli/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "node_modules/@wagmi/cli/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { - "node": ">= 4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@wagmi/cli/node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "node_modules/@wagmi/cli/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "engines": { "node": ">=12" @@ -5234,1130 +4433,984 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/@wagmi/cli/node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "dev": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "node_modules/abbrev": { + "version": "1.0.9", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/abitype": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.6.tgz", + "integrity": "sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==", "dev": true, - "engines": { - "node": ">=12" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } } }, - "node_modules/@wagmi/cli/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", + "license": "MIT" + }, + "node_modules/abstract-leveldown": { + "version": "2.6.3", + "license": "MIT", "dependencies": { - "p-locate": "^6.0.0" + "xtend": "~4.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@wagmi/cli/node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" + "acorn": "^8.11.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.0" } }, - "node_modules/@wagmi/cli/node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/acorn-walk/node_modules/acorn": { + "version": "8.12.1", "dev": true, - "dependencies": { - "tslib": "^2.0.3" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@wagmi/cli/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/add": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/adm-zip": { + "version": "0.4.16", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.3.0" } }, - "node_modules/@wagmi/cli/node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/aes-js": { + "version": "4.0.0-beta.5", "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } + "license": "MIT" }, - "node_modules/@wagmi/cli/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/agent-base": { + "version": "6.0.2", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "debug": "4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6.0.0" } }, - "node_modules/@wagmi/cli/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/aggregate-error": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@wagmi/cli/node_modules/ora": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", - "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", + "node_modules/all-contributors-cli": { + "version": "6.26.1", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" + "@babel/runtime": "^7.7.6", + "async": "^3.1.0", + "chalk": "^4.0.0", + "didyoumean": "^1.2.1", + "inquirer": "^7.3.3", + "json-fixer": "^1.6.8", + "lodash": "^4.11.2", + "node-fetch": "^2.6.0", + "pify": "^5.0.0", + "yargs": "^15.0.1" + }, + "bin": { + "all-contributors": "dist/cli.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "prettier": "^2" } }, - "node_modules/@wagmi/cli/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "node_modules/all-contributors-cli/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^1.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@wagmi/cli/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "node_modules/all-contributors-cli/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@wagmi/cli/node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/all-contributors-cli/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@wagmi/cli/node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/all-contributors-cli/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } + "license": "MIT" }, - "node_modules/@wagmi/cli/node_modules/path-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "node_modules/all-contributors-cli/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@wagmi/cli/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "node_modules/all-contributors-cli/node_modules/inquirer": { + "version": "7.3.3", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "node_modules/all-contributors-cli/node_modules/rxjs": { + "version": "6.6.7", "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "npm": ">=2.0.0" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "node_modules/all-contributors-cli/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/all-contributors-cli/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/amdefine": { + "version": "1.0.1", "dev": true, + "license": "BSD-3-Clause OR MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=6" + "node": ">=0.4.2" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/ansi-align": { + "version": "3.0.1", "dev": true, + "license": "ISC", "dependencies": { - "mimic-fn": "^2.1.0" - }, + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "license": "MIT", "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/@wagmi/cli/node_modules/sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "node_modules/ansi-escapes": { + "version": "4.3.2", "dev": true, + "license": "MIT", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/@wagmi/cli/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, + "type-fest": "^0.21.3" + }, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@wagmi/cli/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=4" } }, - "node_modules/@wagmi/cli/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/antlr4": { + "version": "4.13.2", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=16" } }, - "node_modules/@wagmi/cli/node_modules/upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } + "license": "BSD-3-Clause" }, - "node_modules/@wagmi/cli/node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, + "license": "ISC", "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/@wagmi/cli/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 8" } }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "node_modules/arg": { + "version": "4.1.3", "dev": true, - "peer": true + "license": "MIT" }, - "node_modules/abitype": { - "version": "0.9.10", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.9.10.tgz", - "integrity": "sha512-FIS7U4n7qwAT58KibwYig5iFG4K61rbhAqaQh/UWj8v1Y8mjX3F8TC9gd8cz9yT1TYel9f8nS5NO5kZp2RW0jQ==", + "node_modules/argparse": { + "version": "2.0.1", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wagmi-dev" - } - ], - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", - "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" + "license": "Python-2.0" }, - "node_modules/abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "dependencies": { - "xtend": "~4.0.0" + "node_modules/array-back": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" + "node": ">= 0.4" }, - "engines": { - "node": ">=0.4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } + "node_modules/array-flatten": { + "version": "1.1.1", + "license": "MIT" }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, + "node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/add": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", - "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==", - "dev": true - }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "node_modules/array-uniq": { + "version": "1.0.3", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.3.0" + "node": ">=0.10.0" } }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "debug": "4" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/asap": { + "version": "2.0.6", "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/asn1": { + "version": "0.2.6", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "safer-buffer": "~2.1.0" } }, - "node_modules/all-contributors-cli": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.26.1.tgz", - "integrity": "sha512-Ymgo3FJACRBEd1eE653FD1J/+uD0kqpUNYfr9zNC1Qby0LgbhDBzB3EF6uvkAbYpycStkk41J+0oo37Lc02yEw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.7.6", - "async": "^3.1.0", - "chalk": "^4.0.0", - "didyoumean": "^1.2.1", - "inquirer": "^7.3.3", - "json-fixer": "^1.6.8", - "lodash": "^4.11.2", - "node-fetch": "^2.6.0", - "pify": "^5.0.0", - "yargs": "^15.0.1" - }, - "bin": { - "all-contributors": "dist/cli.js" - }, + "node_modules/assert-plus": { + "version": "1.0.0", + "license": "MIT", "engines": { - "node": ">=4" - }, - "optionalDependencies": { - "prettier": "^2" + "node": ">=0.8" } }, - "node_modules/all-contributors-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/assertion-error": { + "version": "1.1.0", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", + "peer": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "*" } }, - "node_modules/all-contributors-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/ast-parents": { + "version": "0.0.1", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } + "license": "MIT" }, - "node_modules/all-contributors-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/ast-types": { + "version": "0.13.4", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "tslib": "^2.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/all-contributors-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/all-contributors-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "node_modules/astral-regex": { + "version": "2.0.0", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/all-contributors-cli/node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/async": { + "version": "3.2.6", "dev": true, + "license": "MIT" + }, + "node_modules/async-eventemitter": { + "version": "0.2.4", + "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" + "async": "^2.4.0" } }, - "node_modules/all-contributors-cli/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, + "node_modules/async-eventemitter/node_modules/async": { + "version": "2.6.4", + "license": "MIT", "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "lodash": "^4.17.14" } }, - "node_modules/all-contributors-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/async-limiter": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/async-mutex": { + "version": "0.2.6", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "tslib": "^2.0.0" } }, - "node_modules/all-contributors-cli/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "node_modules/at-least-node": { + "version": "1.0.0", "dev": true, - "optional": true, - "peer": true, + "license": "ISC", "engines": { - "node": ">=0.4.2" + "node": ">= 4.0.0" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "node_modules/autoprefixer": { + "version": "10.4.20", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, + "node_modules/aws-sign2": { + "version": "0.7.0", + "license": "Apache-2.0", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" + "node_modules/aws4": { + "version": "1.13.2", + "license": "MIT" + }, + "node_modules/axios": { + "version": "0.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/antlr4": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.1.tgz", - "integrity": "sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==", - "dev": true, - "engines": { - "node": ">=16" + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, + "node_modules/backoff": { + "version": "2.5.0", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "precond": "0.2" }, "engines": { - "node": ">= 8" + "node": ">= 0.6" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "node_modules/base-x": { + "version": "3.0.10", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/basic-ftp": { + "version": "5.0.5", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10.0.0" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "license": "BSD-3-Clause", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "tweetnacl": "^0.14.3" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/bech32": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "license": "MIT", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "node_modules/binary-extensions": { + "version": "2.3.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "node_modules/bl": { + "version": "4.1.0", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true + "node_modules/boolbase": { + "version": "1.0.0", + "dev": true, + "license": "ISC" }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "node_modules/boxen": { + "version": "5.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "safer-buffer": "~2.1.0" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ast-parents": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", - "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==", - "dev": true - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "async": "^2.4.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/async-eventemitter/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "lodash": "^4.17.14" + "balanced-match": "^1.0.0" } }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "node_modules/async-mutex": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz", - "integrity": "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==", + "node_modules/braces": { + "version": "3.0.3", + "license": "MIT", "dependencies": { - "tslib": "^2.0.0" + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/browser-stdout": { + "version": "1.3.1", "dev": true, - "engines": { - "node": ">= 4.0.0" + "license": "ISC" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/autoprefixer": { - "version": "10.4.18", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.18.tgz", - "integrity": "sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==", - "dev": true, + "node_modules/browserslist": { + "version": "4.23.3", "funding": [ { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" + "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001591", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "browserslist": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" - }, - "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz", - "integrity": "sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.1", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "node_modules/bs58": { + "version": "4.0.1", + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "base-x": "^3.0.2" } }, - "node_modules/babel-plugin-polyfill-regenerator/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "node_modules/bs58check": { + "version": "2.1.2", + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==", - "dependencies": { - "precond": "0.2" + "node_modules/btoa": { + "version": "1.2.1", + "license": "(MIT OR Apache-2.0)", + "bin": { + "btoa": "bin/btoa.js" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" + "node": ">= 0.4.0" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/buffer": { + "version": "5.7.1", "funding": [ { "type": "github", @@ -6371,150 +5424,159 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + ], + "license": "MIT", "dependencies": { - "tweetnacl": "^0.14.3" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "license": "MIT" }, - "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "node_modules/buffer-xor": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, "engines": { - "node": "*" + "node": ">=6.14.2" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/builtin-modules": { + "version": "3.3.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/bundle-require": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.2.1.tgz", + "integrity": "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==", "dev": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.17" } }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "node_modules/cacheable-lookup": { + "version": "6.1.0", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "node_modules/cacheable-request": { + "version": "7.0.4", + "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=8" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "license": "MIT", "dependencies": { - "ms": "2.0.0" + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/body-parser/node_modules/ms": { + "node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "node_modules/call-bind": { + "version": "1.0.7", + "license": "MIT", "dependencies": { - "side-channel": "^1.0.4" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { - "node": ">=0.6" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "node_modules/camel-case": { + "version": "3.0.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6522,235 +5584,237 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/caniuse-api": { + "version": "3.0.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001655", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "license": "Apache-2.0" + }, + "node_modules/cbor": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=12.19" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/chai": { + "version": "4.5.0", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/chai-as-promised": { + "version": "7.1.2", "dev": true, + "license": "WTFPL", + "peer": true, "dependencies": { - "color-name": "~1.1.4" + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/change-case": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "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" + } }, - "node_modules/boxen/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/charenc": { + "version": "0.0.2", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/check-error": { + "version": "1.0.3", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "get-func-name": "^2.0.2" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/checkpoint-store": { + "version": "1.1.0", + "license": "ISC", "dependencies": { - "balanced-match": "^1.0.0" + "functional-red-black-tree": "^1.0.1" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/chokidar": { + "version": "3.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=8" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "node_modules/chownr": { + "version": "1.1.4", + "license": "ISC" }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/cids": { + "version": "0.7.5", + "license": "MIT", "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=4.0.0", + "npm": ">=3.0.0" } }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", + "license": "MIT", "dependencies": { - "base-x": "^3.0.2" + "buffer": "^5.6.0", + "varint": "^5.0.0" } }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "node_modules/cipher-base": { + "version": "1.0.4", + "license": "MIT", "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "bin": { - "btoa": "bin/btoa.js" - }, - "engines": { - "node": ">= 0.4.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/citty": { + "version": "0.1.6", + "dev": true, + "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "consola": "^3.2.3" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + "node_modules/class-is": { + "version": "1.1.0", + "license": "MIT" }, - "node_modules/bufferutil": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", - "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6.14.2" + "node": ">=6" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "node_modules/cli-boxes": { + "version": "2.2.1", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -6758,1254 +5822,766 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/builtins/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/cli-cursor": { + "version": "3.1.0", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/builtins/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/cli-spinners": { + "version": "2.9.2", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/builtins/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/bundle-require": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.0.2.tgz", - "integrity": "sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==", + "node_modules/cli-table3": { + "version": "0.6.5", "dev": true, + "license": "MIT", "dependencies": { - "load-tsconfig": "^0.2.3" + "string-width": "^4.2.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "10.* || >= 12.*" }, - "peerDependencies": { - "esbuild": ">=0.17" + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/cli-width": { + "version": "3.0.0", + "dev": true, + "license": "ISC", "engines": { - "node": ">= 0.8" + "node": ">= 10" } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "node_modules/cliui": { + "version": "6.0.0", "dev": true, - "engines": { - "node": ">=8" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/cacheable-lookup": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", - "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10.6.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "pump": "^3.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/clone": { + "version": "1.0.4", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/clone-response": { + "version": "1.0.3", + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" + "mimic-response": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", - "dev": true, - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/colord": { + "version": "2.9.3", "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.1.90" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001597", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", - "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "node_modules/command-exists": { + "version": "1.2.9", "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } + "license": "MIT" }, - "node_modules/capital-case/node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/command-line-args": { + "version": "5.2.1", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^2.0.3" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/capital-case/node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/command-line-usage": { + "version": "6.1.3", "dev": true, + "license": "MIT", "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/capital-case/node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", "dev": true, - "dependencies": { - "tslib": "^2.0.3" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", "dev": true, - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, + "license": "MIT", "engines": { - "node": ">=12.19" + "node": ">=8" } }, - "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "node_modules/commander": { + "version": "10.0.1", "dev": true, - "peer": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=14" } }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "node_modules/commondir": { + "version": "1.0.1", "dev": true, - "peer": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 5" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/change-case": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.1.0.tgz", - "integrity": "sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==", + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", "dev": true, + "license": "MIT", "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" + "safe-buffer": "~5.1.0" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "node_modules/confbox": { + "version": "0.1.7", + "dev": true, + "license": "MIT" }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "node_modules/consola": { + "version": "3.2.3", "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "node_modules/constant-case": { + "version": "2.0.0", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "get-func-name": "^2.0.2" + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" }, "engines": { - "node": "*" + "node": ">= 0.6" } }, - "node_modules/checkpoint-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==", + "node_modules/content-hash": { + "version": "2.5.2", + "license": "ISC", "dependencies": { - "functional-red-black-tree": "^1.0.1" + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, + "node_modules/content-type": { + "version": "1.0.5", + "license": "MIT", "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">= 0.6" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/ci-info": { + "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "license": "MIT" }, - "node_modules/cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, + "node_modules/cookie": { + "version": "0.4.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" + "node": ">= 0.6" } }, - "node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } + "node_modules/cookie-signature": { + "version": "1.0.6", + "license": "MIT" }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/core-js-compat": { + "version": "3.38.1", + "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "node_modules/core-js-pure": { + "version": "3.38.1", "dev": true, - "dependencies": { - "consola": "^3.2.3" + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" + "node_modules/core-util-is": { + "version": "1.0.2", + "license": "MIT" }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, + "node_modules/cors": { + "version": "2.8.5", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, "engines": { - "node": ">=6" + "node": ">= 0.10" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/cosmiconfig": { + "version": "8.3.6", "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", "dev": true, + "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "engines": { - "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" + "node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" }, "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "node": ">=0.8" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" + "node_modules/create-hash": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, + "node_modules/create-hmac": { + "version": "1.1.7", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-fetch": { + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node-fetch": "^2.6.12" } }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">= 8" } }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/crypt": { + "version": "0.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/crypto-random-string": { + "version": "2.0.0", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/css-declaration-sorter": { + "version": "7.2.0", "dev": true, + "license": "ISC", "engines": { - "node": ">=0.8" + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "node_modules/css-select": { + "version": "5.1.0", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "mimic-response": "^1.0.0" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/css-tree": { + "version": "2.3.1", + "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "node_modules/css-what": { + "version": "6.1.0", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=0.1.90" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "node_modules/cssnano": { + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "cssnano-preset-default": "^7.0.5", + "lilconfig": "^3.1.2" }, "engines": { - "node": ">=4.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "node_modules/cssnano-preset-default": { + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" + "browserslist": "^4.23.3", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.1", + "postcss-colormin": "^7.0.2", + "postcss-convert-values": "^7.0.3", + "postcss-discard-comments": "^7.0.2", + "postcss-discard-duplicates": "^7.0.1", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.3", + "postcss-merge-rules": "^7.0.3", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.2", + "postcss-minify-selectors": "^7.0.3", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.2", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.2", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "node_modules/cssnano-utils": { + "version": "5.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/csso": { + "version": "5.0.5", "dev": true, + "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", - "dev": true, + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/constant-case": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "integrity": "sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==", + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", "dev": true, - "dependencies": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" - } + "license": "CC0-1.0" }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/d": { + "version": "1.0.2", + "license": "ISC", "dependencies": { - "safe-buffer": "5.2.1" + "es5-ext": "^0.10.64", + "type": "^2.7.2" }, "engines": { - "node": ">= 0.6" + "node": ">=0.12" } }, - "node_modules/content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "node_modules/dashdash": { + "version": "1.14.1", + "license": "MIT", "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "assert-plus": "^1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.10" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 14" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/core-js-compat": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", - "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", + "node_modules/data-view-buffer": { + "version": "1.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.22.3" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/core-js-pure": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz", - "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", + "node_modules/data-view-byte-length": { + "version": "1.0.1", "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", "dev": true, + "license": "MIT", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/death": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "node_modules/debug": { + "version": "4.3.6", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" }, - "peerDependencies": { - "typescript": ">=4.9.5" + "engines": { + "node": ">=6.0" }, "peerDependenciesMeta": { - "typescript": { + "supports-color": { "optional": true } } }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/decamelize": { + "version": "1.2.0", "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.1.1.tgz", - "integrity": "sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.0.tgz", - "integrity": "sha512-e2v4w/t3OFM6HTuSweI4RSdABaqgVgHlJp5FZrQsopHnKKHLFIvK2D3C4kHWeFIycN/1L1J5VIrg5KlDzn3r/g==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^6.1.0", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.0.tgz", - "integrity": "sha512-4DUXZoDj+PI3fRl3MqMjl9DwLGjcsFP4qt+92nLUcN1RGfw2TY+GwNoG2B38Usu1BrcTs8j9pxNfSusmvtSjfg==", - "dev": true, - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.1.1", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.4", - "postcss-merge-rules": "^6.1.0", - "postcss-minify-font-values": "^6.0.3", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.3", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.3" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dev": true, - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true - }, - "node_modules/d": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", - "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true, - "peer": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8013,8 +6589,7 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -8029,10 +6604,9 @@ "dev": true }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "4.1.4", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "type-detect": "^4.0.0" @@ -8043,32 +6617,28 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/defaults": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -8078,24 +6648,21 @@ }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/deferred-leveldown": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "license": "MIT", "dependencies": { "abstract-leveldown": "~2.6.0" } }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -8110,9 +6677,8 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -8127,15 +6693,13 @@ }, "node_modules/defu": { "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/degenerator": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -8147,9 +6711,8 @@ }, "node_modules/del": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", "dev": true, + "license": "MIT", "dependencies": { "globby": "^10.0.1", "graceful-fs": "^4.2.2", @@ -8166,9 +6729,8 @@ }, "node_modules/del/node_modules/p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -8178,24 +6740,21 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -8203,36 +6762,28 @@ }, "node_modules/didyoumean": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.2.0", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/difflib": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", "dev": true, "peer": true, "dependencies": { "heap": ">= 0.2.0" - }, - "engines": { - "node": "*" } }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -8242,8 +6793,7 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -8253,9 +6803,8 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -8266,27 +6815,23 @@ } }, "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + "version": "0.1.2" }, "node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -8299,9 +6844,8 @@ }, "node_modules/domutils": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -8313,18 +6857,16 @@ }, "node_modules/dot-case": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", - "integrity": "sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^2.2.0" } }, "node_modules/dotenv": { "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -8343,14 +6885,12 @@ }, "node_modules/duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ecc-jsbn": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -8358,23 +6898,19 @@ }, "node_modules/ecc-jsbn/node_modules/jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.703", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.703.tgz", - "integrity": "sha512-094ZZC4nHXPKl/OwPinSMtLN9+hoFkdfQGKnvXbY+3WEAYtVDpz9UhJIViiY6Zb8agvqxiaJzNG9M+pRZWvSZw==" + "version": "1.5.13", + "license": "ISC" }, "node_modules/elliptic": { "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -8387,40 +6923,34 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "license": "MIT" }, "node_modules/encode-utf8": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enquirer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -8431,9 +6961,8 @@ }, "node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -8443,17 +6972,15 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/errno": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "license": "MIT", "dependencies": { "prr": "~1.0.1" }, @@ -8463,25 +6990,27 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", - "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", + "version": "1.23.3", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", @@ -8492,10 +7021,11 @@ "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", @@ -8506,17 +7036,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.5", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -8527,8 +7057,7 @@ }, "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -8538,23 +7067,31 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", - "dev": true + "version": "1.5.4", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/es-set-tostringtag": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -8566,9 +7103,8 @@ }, "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -8583,9 +7119,8 @@ }, "node_modules/es5-ext": { "version": "0.10.64", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", - "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "hasInstallScript": true, + "license": "ISC", "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -8598,8 +7133,7 @@ }, "node_modules/es6-iterator": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", "dependencies": { "d": "1", "es5-ext": "^0.10.35", @@ -8608,13 +7142,11 @@ }, "node_modules/es6-promise": { "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + "license": "MIT" }, "node_modules/es6-symbol": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", - "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", "dependencies": { "d": "^1.0.2", "ext": "^1.7.0" @@ -8625,10 +7157,9 @@ }, "node_modules/esbuild": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -8660,182 +7191,479 @@ "@esbuild/win32-x64": "0.17.19" } }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/esbuild/node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.8.0" + "node": ">=12" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "node_modules/esbuild/node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">=12" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4.0" + "node": ">=12" } }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, + "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-custom": { - "resolved": "config/eslint-config-custom", - "link": true - }, - "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-config-turbo": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.12.5.tgz", - "integrity": "sha512-wXytbX+vTzQ6rwgM6sIr447tjYJBlRj5V/eBFNGNXw5Xs1R715ppPYhbmxaFbkrWNQSGJsWRrYGAlyq0sT/OsQ==", - "dependencies": { - "eslint-plugin-turbo": "1.12.5" - }, - "peerDependencies": { - "eslint": ">6.6.0" + "node": ">=12" } }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, + "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-turbo": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.12.5.tgz", - "integrity": "sha512-cXy7mCzAdngBTJIWH4DASXHy0vQpujWDBqRTu0YYqCN/QEGsi3HWM+STZEbPYELdjtm5EsN2HshOSSqWnjdRHg==", - "dependencies": { - "dotenv": "16.0.3" - }, - "peerDependencies": { - "eslint": ">6.6.0" + "node": ">=12" } }, - "node_modules/eslint-plugin-turbo/node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "node_modules/esbuild/node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" } }, - "node_modules/eslint-scope": { + "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-custom": { + "resolved": "config/eslint-config-custom", + "link": true + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -8846,8 +7674,7 @@ }, "node_modules/eslint-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^1.1.0" }, @@ -8860,24 +7687,21 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "license": "Apache-2.0", "engines": { "node": ">=4" } }, "node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -8890,16 +7714,14 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8907,8 +7729,7 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -8922,8 +7743,7 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -8933,13 +7753,11 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -8949,16 +7767,14 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -8967,21 +7783,9 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8990,12 +7794,8 @@ } }, "node_modules/eslint/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -9005,13 +7805,11 @@ }, "node_modules/eslint/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "license": "BSD-3-Clause" }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9019,15 +7817,9 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/esniff": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", - "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", @@ -9040,8 +7832,7 @@ }, "node_modules/espree": { "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "license": "BSD-2-Clause", "dependencies": { "acorn": "^7.4.0", "acorn-jsx": "^5.3.1", @@ -9053,16 +7844,14 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "license": "Apache-2.0", "engines": { "node": ">=4" } }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -9072,9 +7861,8 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -9084,16 +7872,14 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -9103,46 +7889,40 @@ }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/eth-block-tracker": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-4.4.3.tgz", - "integrity": "sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==", + "license": "MIT", "dependencies": { "@babel/plugin-transform-runtime": "^7.5.5", "@babel/runtime": "^7.5.5", @@ -9154,25 +7934,21 @@ }, "node_modules/eth-block-tracker/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/eth-create2-calculator": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/eth-create2-calculator/-/eth-create2-calculator-1.1.5.tgz", - "integrity": "sha512-nFXjUR4psWYStCK4PYC5cChmcU960FxbaH919XRsLhgvqW5sRZt4xClaxW04hqyAZ0+riIYzRam6W9OstbHzeA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "ethers": "^5.0.19" } }, "node_modules/eth-create2-calculator/node_modules/ethers": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "dev": true, "funding": [ { @@ -9184,6 +7960,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -9219,8 +7996,7 @@ }, "node_modules/eth-ens-namehash": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", + "license": "ISC", "dependencies": { "idna-uts46-hx": "^2.3.1", "js-sha3": "^0.5.7" @@ -9228,14 +8004,12 @@ }, "node_modules/eth-ens-namehash/node_modules/js-sha3": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + "license": "MIT" }, "node_modules/eth-gas-reporter": { "version": "0.2.27", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", - "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", "dev": true, + "license": "MIT", "dependencies": { "@solidity-parser/parser": "^0.14.0", "axios": "^1.5.1", @@ -9262,32 +8036,28 @@ }, "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", "dev": true, "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/eth-gas-reporter/node_modules/@noble/secp256k1": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", "dev": true, "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", "dev": true, "funding": [ { @@ -9295,6 +8065,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@noble/secp256k1": "~1.7.0", @@ -9303,8 +8074,6 @@ }, "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", "dev": true, "funding": [ { @@ -9312,6 +8081,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@scure/base": "~1.1.0" @@ -9319,29 +8089,26 @@ }, "node_modules/eth-gas-reporter/node_modules/ansi-regex": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/eth-gas-reporter/node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.7.7", "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "node_modules/eth-gas-reporter/node_modules/cli-table3": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4.1.0", "string-width": "^2.1.1" @@ -9355,9 +8122,8 @@ }, "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "1.2.0", "@noble/secp256k1": "1.7.1", @@ -9367,8 +8133,6 @@ }, "node_modules/eth-gas-reporter/node_modules/ethers": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "dev": true, "funding": [ { @@ -9380,6 +8144,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -9415,18 +8180,16 @@ }, "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/eth-gas-reporter/node_modules/string-width": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "license": "MIT", "dependencies": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -9437,9 +8200,8 @@ }, "node_modules/eth-gas-reporter/node_modules/strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^3.0.0" }, @@ -9449,8 +8211,7 @@ }, "node_modules/eth-json-rpc-filters": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/eth-json-rpc-filters/-/eth-json-rpc-filters-4.2.2.tgz", - "integrity": "sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==", + "license": "ISC", "dependencies": { "@metamask/safe-event-emitter": "^2.0.0", "async-mutex": "^0.2.6", @@ -9462,9 +8223,7 @@ }, "node_modules/eth-json-rpc-infura": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-5.1.0.tgz", - "integrity": "sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "ISC", "dependencies": { "eth-json-rpc-middleware": "^6.0.0", "eth-rpc-errors": "^3.0.0", @@ -9474,8 +8233,7 @@ }, "node_modules/eth-json-rpc-infura/node_modules/json-rpc-engine": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", + "license": "ISC", "dependencies": { "eth-rpc-errors": "^3.0.0", "safe-event-emitter": "^1.0.1" @@ -9483,8 +8241,7 @@ }, "node_modules/eth-json-rpc-middleware": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-6.0.0.tgz", - "integrity": "sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==", + "license": "ISC", "dependencies": { "btoa": "^1.2.1", "clone": "^2.1.1", @@ -9501,21 +8258,18 @@ }, "node_modules/eth-json-rpc-middleware/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/eth-json-rpc-middleware/node_modules/clone": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "license": "MPL-2.0", "dependencies": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -9528,8 +8282,7 @@ }, "node_modules/eth-json-rpc-middleware/node_modules/json-rpc-engine": { "version": "5.4.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-5.4.0.tgz", - "integrity": "sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==", + "license": "ISC", "dependencies": { "eth-rpc-errors": "^3.0.0", "safe-event-emitter": "^1.0.1" @@ -9537,16 +8290,14 @@ }, "node_modules/eth-json-rpc-middleware/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/eth-lib": { "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "license": "MIT", "dependencies": { "bn.js": "^4.11.6", "elliptic": "^6.4.0", @@ -9558,13 +8309,11 @@ }, "node_modules/eth-lib/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/eth-query": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==", + "license": "ISC", "dependencies": { "json-rpc-random-id": "^1.0.0", "xtend": "^4.0.1" @@ -9572,17 +8321,14 @@ }, "node_modules/eth-rpc-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-3.0.0.tgz", - "integrity": "sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==", + "license": "MIT", "dependencies": { "fast-safe-stringify": "^2.0.6" } }, "node_modules/eth-sig-util": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==", - "deprecated": "Deprecated in favor of '@metamask/eth-sig-util'", + "license": "ISC", "dependencies": { "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", "ethereumjs-util": "^5.1.1" @@ -9590,13 +8336,11 @@ }, "node_modules/eth-sig-util/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/eth-sig-util/node_modules/ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "license": "MPL-2.0", "dependencies": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -9608,22 +8352,29 @@ } }, "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "version": "1.2.0", + "license": "MIT", "dependencies": { - "js-sha3": "^0.8.0" + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { + "version": "1.5.0", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/ethereum-common": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" + "license": "MIT" }, "node_modules/ethereum-cryptography": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "license": "MIT", "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -9644,13 +8395,11 @@ }, "node_modules/ethereum-protocol": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ethereum-protocol/-/ethereum-protocol-1.0.1.tgz", - "integrity": "sha512-3KLX1mHuEsBW0dKG+c6EOJS1NBNqdCICvZW9sInmZTt5aY0oxmHVggYRE0lJu1tcnMD1K+AKHdLi6U43Awm1Vg==" + "license": "MIT" }, "node_modules/ethereumjs-abi": { "version": "0.6.8", "resolved": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", - "license": "MIT", "dependencies": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" @@ -9658,21 +8407,18 @@ }, "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/ethereumjs-abi/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -9685,10 +8431,8 @@ }, "node_modules/ethereumjs-account": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz", - "integrity": "sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA==", - "deprecated": "Please use Util.Account class found on package ethereumjs-util@^7.0.6 https://github.com/ethereumjs/ethereumjs-util/releases/tag/v7.0.6", "dev": true, + "license": "MPL-2.0", "dependencies": { "ethereumjs-util": "^6.0.0", "rlp": "^2.2.1", @@ -9697,24 +8441,21 @@ }, "node_modules/ethereumjs-account/node_modules/@types/bn.js": { "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/ethereumjs-account/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ethereumjs-account/node_modules/ethereumjs-util": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "dev": true, + "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -9727,9 +8468,7 @@ }, "node_modules/ethereumjs-block": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "deprecated": "New package name format for new versions: @ethereumjs/block. Please update.", + "license": "MPL-2.0", "dependencies": { "async": "^2.0.1", "ethereum-common": "0.2.0", @@ -9740,21 +8479,18 @@ }, "node_modules/ethereumjs-block/node_modules/async": { "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/ethereumjs-block/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/ethereumjs-block/node_modules/ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "license": "MPL-2.0", "dependencies": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -9767,15 +8503,11 @@ }, "node_modules/ethereumjs-common": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", - "deprecated": "New package name format for new versions: @ethereumjs/common. Please update." + "license": "MIT" }, "node_modules/ethereumjs-tx": { "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", + "license": "MPL-2.0", "dependencies": { "ethereum-common": "^0.0.18", "ethereumjs-util": "^5.0.0" @@ -9783,18 +8515,15 @@ }, "node_modules/ethereumjs-tx/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/ethereumjs-tx/node_modules/ethereum-common": { "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==" + "license": "MIT" }, "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "license": "MPL-2.0", "dependencies": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -9807,8 +8536,7 @@ }, "node_modules/ethereumjs-util": { "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -9822,9 +8550,7 @@ }, "node_modules/ethereumjs-vm": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", - "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", - "deprecated": "New package name format for new versions: @ethereumjs/vm. Please update.", + "license": "MPL-2.0", "dependencies": { "async": "^2.1.2", "async-eventemitter": "^0.2.2", @@ -9841,29 +8567,25 @@ }, "node_modules/ethereumjs-vm/node_modules/@types/bn.js": { "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/ethereumjs-vm/node_modules/async": { "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/ethereumjs-vm/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/ethereumjs-vm/node_modules/ethereumjs-account": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", + "license": "MPL-2.0", "dependencies": { "ethereumjs-util": "^5.0.0", "rlp": "^2.0.0", @@ -9872,8 +8594,7 @@ }, "node_modules/ethereumjs-vm/node_modules/ethereumjs-account/node_modules/ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "license": "MPL-2.0", "dependencies": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -9886,9 +8607,7 @@ }, "node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", - "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", - "deprecated": "New package name format for new versions: @ethereumjs/block. Please update.", + "license": "MPL-2.0", "dependencies": { "async": "^2.0.1", "ethereumjs-common": "^1.5.0", @@ -9899,8 +8618,7 @@ }, "node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "license": "MPL-2.0", "dependencies": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -9913,9 +8631,7 @@ }, "node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", + "license": "MPL-2.0", "dependencies": { "ethereumjs-common": "^1.5.0", "ethereumjs-util": "^6.0.0" @@ -9923,8 +8639,7 @@ }, "node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -9936,9 +8651,7 @@ } }, "node_modules/ethers": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.11.1.tgz", - "integrity": "sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==", + "version": "6.13.2", "dev": true, "funding": [ { @@ -9950,6 +8663,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", @@ -9957,7 +8671,7 @@ "@types/node": "18.15.13", "aes-js": "4.0.0-beta.5", "tslib": "2.4.0", - "ws": "8.5.0" + "ws": "8.17.1" }, "engines": { "node": ">=14.0.0" @@ -9965,21 +8679,19 @@ }, "node_modules/ethers/node_modules/@types/node": { "version": "18.15.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ethers/node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.17.1", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -9992,8 +8704,7 @@ }, "node_modules/ethjs-unit": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "license": "MIT", "dependencies": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" @@ -10005,13 +8716,11 @@ }, "node_modules/ethjs-unit/node_modules/bn.js": { "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "license": "MIT" }, "node_modules/ethjs-util": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "license": "MIT", "dependencies": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" @@ -10023,8 +8732,7 @@ }, "node_modules/event-emitter": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", "dependencies": { "d": "1", "es5-ext": "~0.10.14" @@ -10032,9 +8740,8 @@ }, "node_modules/event-stream": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1", "from": "~0", @@ -10047,21 +8754,18 @@ }, "node_modules/eventemitter3": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -10069,9 +8773,8 @@ }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -10091,16 +8794,15 @@ } }, "node_modules/express": { - "version": "4.18.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", - "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", + "version": "4.19.2", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -10132,30 +8834,26 @@ } }, "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, "node_modules/express/node_modules/qs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -10168,22 +8866,19 @@ }, "node_modules/ext": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", "dependencies": { "type": "^2.7.2" } }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "license": "MIT" }, "node_modules/external-editor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -10195,34 +8890,29 @@ }, "node_modules/extsprintf": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" - ] + ], + "license": "MIT" }, "node_modules/fake-merkle-patricia-tree": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==", + "license": "ISC", "dependencies": { "checkpoint-store": "^1.1.0" } }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + "license": "Apache-2.0" }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -10236,31 +8926,29 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "license": "MIT" }, "node_modules/fast-safe-stringify": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fetch-blob": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, "funding": [ { @@ -10272,6 +8960,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -10282,9 +8971,8 @@ }, "node_modules/figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -10297,8 +8985,7 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -10307,9 +8994,8 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -10319,8 +9005,7 @@ }, "node_modules/finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -10336,22 +9021,19 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, "node_modules/find-replace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -10361,9 +9043,8 @@ }, "node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -10373,17 +9054,15 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -10395,22 +9074,18 @@ }, "node_modules/flatted": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" + "license": "ISC" }, "node_modules/fmix": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", - "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", "dev": true, + "license": "MIT", "dependencies": { "imul": "^1.0.0" } }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.8", "dev": true, "funding": [ { @@ -10418,6 +9093,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -10429,25 +9105,22 @@ }, "node_modules/for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -10459,14 +9132,12 @@ }, "node_modules/form-data-encoder": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" + "license": "MIT" }, "node_modules/formdata-polyfill": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, + "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -10476,23 +9147,20 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fp-ts": { "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fraction.js": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, + "license": "MIT", "engines": { "node": "*" }, @@ -10503,23 +9171,20 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/from": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -10531,29 +9196,24 @@ }, "node_modules/fs-minipass": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "license": "ISC", "dependencies": { "minipass": "^2.6.0" } }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -10564,17 +9224,15 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -10590,49 +9248,43 @@ }, "node_modules/functional-red-black-tree": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + "license": "MIT" }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/fx": { - "version": "32.0.0", - "resolved": "https://registry.npmjs.org/fx/-/fx-32.0.0.tgz", - "integrity": "sha512-/9CUlLC5lfp/S/38u6sapZgrN1BOhHbdsfIMm9Vrs0y9YdPNPNlmSMg+HZkhX1NDrQGNt3IOVqc6XxFy7fL7hQ==", + "version": "35.0.0", "dev": true, + "license": "MIT", "bin": { "fx": "index.js" } }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": "*" @@ -10640,8 +9292,7 @@ }, "node_modules/get-intrinsic": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -10658,17 +9309,15 @@ }, "node_modules/get-port": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -10678,9 +9327,8 @@ }, "node_modules/get-symbol-description": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -10695,9 +9343,8 @@ }, "node_modules/get-uri": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", "dev": true, + "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", @@ -10710,9 +9357,8 @@ }, "node_modules/get-uri/node_modules/fs-extra": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -10724,17 +9370,15 @@ }, "node_modules/getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/ghost-testrpc": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", - "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "chalk": "^2.4.2", @@ -10746,8 +9390,7 @@ }, "node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10765,8 +9408,7 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -10776,8 +9418,7 @@ }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10785,8 +9426,7 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10796,8 +9436,7 @@ }, "node_modules/global": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "license": "MIT", "dependencies": { "min-document": "^2.19.0", "process": "^0.11.10" @@ -10805,9 +9444,8 @@ }, "node_modules/global-modules": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "global-prefix": "^3.0.0" @@ -10818,9 +9456,8 @@ }, "node_modules/global-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "ini": "^1.3.5", @@ -10833,9 +9470,8 @@ }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "isexe": "^2.0.0" @@ -10846,8 +9482,7 @@ }, "node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -10859,12 +9494,12 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -10875,9 +9510,8 @@ }, "node_modules/globby": { "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "dev": true, + "license": "MIT", "dependencies": { "@types/glob": "^7.1.1", "array-union": "^2.1.0", @@ -10893,24 +9527,21 @@ } }, "node_modules/globby/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/globrex": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -10920,8 +9551,7 @@ }, "node_modules/got": { "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.6.0", "@szmarczak/http-timer": "^5.0.1", @@ -10946,14 +9576,12 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "license": "ISC" }, "node_modules/gradient-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-2.0.2.tgz", - "integrity": "sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "tinygradient": "^1.1.5" @@ -10964,9 +9592,8 @@ }, "node_modules/gradient-string/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10979,9 +9606,8 @@ }, "node_modules/gradient-string/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10995,9 +9621,8 @@ }, "node_modules/gradient-string/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11007,24 +9632,21 @@ }, "node_modules/gradient-string/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/gradient-string/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/gradient-string/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11034,14 +9656,12 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + "license": "MIT" }, "node_modules/handlebars": { "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -11060,17 +9680,14 @@ }, "node_modules/har-schema": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", "engines": { "node": ">=4" } }, "node_modules/har-validator": { "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", + "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -11080,14 +9697,13 @@ } }, "node_modules/hardhat": { - "version": "2.21.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.21.0.tgz", - "integrity": "sha512-8DlJAVJDEVHaV1sh9FLuKLLgCFv9EAJ+M+8IbjSIPgoeNo3ss5L1HgGBMfnI88c7OzMEZkdcuyGoobFeK3Orqw==", + "version": "2.22.10", "dev": true, + "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.2.0", + "@nomicfoundation/edr": "^0.5.2", "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-tx": "5.0.4", "@nomicfoundation/ethereumjs-util": "9.0.4", @@ -11121,7 +9737,7 @@ "raw-body": "^2.4.1", "resolve": "1.17.0", "semver": "^6.3.0", - "solc": "0.7.3", + "solc": "0.8.26", "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", @@ -11147,9 +9763,8 @@ }, "node_modules/hardhat-contract-sizer": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz", - "integrity": "sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "cli-table3": "^0.6.0", @@ -11161,9 +9776,8 @@ }, "node_modules/hardhat-contract-sizer/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11176,9 +9790,8 @@ }, "node_modules/hardhat-contract-sizer/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11192,9 +9805,8 @@ }, "node_modules/hardhat-contract-sizer/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11204,24 +9816,21 @@ }, "node_modules/hardhat-contract-sizer/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hardhat-contract-sizer/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hardhat-contract-sizer/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11262,21 +9871,19 @@ } }, "node_modules/hardhat-deploy-ethers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.4.1.tgz", - "integrity": "sha512-RM6JUcD0dOCjemxnKLtK7XQQI7NWn+LxF5qicGYax0PtWayEUXAewOb4WIHZ/yearhj+s2t6dL0MnHyLTENwJg==", + "version": "0.4.2", "dev": true, + "license": "MIT", "peerDependencies": { "@nomicfoundation/hardhat-ethers": "^3.0.2", "hardhat": "^2.16.0", - "hardhat-deploy": "^0.11.34" + "hardhat-deploy": "^0.12.0" } }, "node_modules/hardhat-deploy/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11289,9 +9896,8 @@ }, "node_modules/hardhat-deploy/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11305,9 +9911,8 @@ }, "node_modules/hardhat-deploy/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11317,14 +9922,11 @@ }, "node_modules/hardhat-deploy/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hardhat-deploy/node_modules/ethers": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "dev": true, "funding": [ { @@ -11336,6 +9938,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -11371,18 +9974,16 @@ }, "node_modules/hardhat-deploy/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hardhat-deploy/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11402,9 +10003,8 @@ }, "node_modules/hardhat-gas-reporter": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", - "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", "dev": true, + "license": "MIT", "dependencies": { "array-uniq": "1.0.3", "eth-gas-reporter": "^0.2.25", @@ -11416,9 +10016,8 @@ }, "node_modules/hardhat-packager": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/hardhat-packager/-/hardhat-packager-1.4.2.tgz", - "integrity": "sha512-6ZX+IMcO6i7Vf5gFrKtq+SwSi6AcLcqSVnX59gzhXGqR+sLL6J1C8EDFS8NCSYwmJkpCD0bb7QbNOd46JZxSGg==", "dev": true, + "license": "MIT", "dependencies": { "@typechain/hardhat": "9.1.0", "fs-extra": "^10.0.1", @@ -11433,34 +10032,129 @@ "typechain": "8.x" } }, + "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", + "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.1.1", + "typescript": ">=4.3.0" + } + }, + "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", + "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@typechain/ethers-v5": "^10.2.1", + "ethers": "^5.4.7", + "hardhat": "^2.9.9", + "typechain": "^8.1.1" + } + }, + "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hardhat-packager/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", "dev": true, "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/hardhat/node_modules/@noble/secp256k1": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", "dev": true, "funding": [ { "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/hardhat/node_modules/@scure/bip32": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", "dev": true, "funding": [ { @@ -11468,6 +10162,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@noble/secp256k1": "~1.7.0", @@ -11476,8 +10171,6 @@ }, "node_modules/hardhat/node_modules/@scure/bip39": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", "dev": true, "funding": [ { @@ -11485,6 +10178,7 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "dependencies": { "@noble/hashes": "~1.2.0", "@scure/base": "~1.1.0" @@ -11492,9 +10186,8 @@ }, "node_modules/hardhat/node_modules/ethereum-cryptography": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "1.2.0", "@noble/secp256k1": "1.7.1", @@ -11504,9 +10197,8 @@ }, "node_modules/hardhat/node_modules/fs-extra": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -11518,27 +10210,24 @@ }, "node_modules/hardhat/node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/hardhat/node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/hardhat/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "7.5.10", "dev": true, + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -11557,25 +10246,22 @@ }, "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -11585,8 +10271,7 @@ }, "node_modules/has-proto": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11596,8 +10281,7 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11607,8 +10291,7 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -11621,8 +10304,7 @@ }, "node_modules/hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -11634,8 +10316,7 @@ }, "node_modules/hash.js": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -11643,8 +10324,7 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -11654,18 +10334,16 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/header-case": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", - "integrity": "sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^2.2.0", "upper-case": "^1.1.3" @@ -11673,15 +10351,13 @@ }, "node_modules/heap": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -11690,21 +10366,18 @@ }, "node_modules/hookable": { "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/http-basic": { "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", "dev": true, + "license": "MIT", "dependencies": { "caseless": "^0.12.0", "concat-stream": "^1.6.2", @@ -11717,13 +10390,11 @@ }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -11737,14 +10408,12 @@ }, "node_modules/http-https": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + "license": "ISC" }, "node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -11754,10 +10423,9 @@ } }, "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -11767,23 +10435,20 @@ }, "node_modules/http-response-object": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^10.0.3" } }, "node_modules/http-response-object/node_modules/@types/node": { "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/http-signature": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -11796,8 +10461,7 @@ }, "node_modules/http2-wrapper": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -11808,9 +10472,8 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -11821,17 +10484,15 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -11841,8 +10502,7 @@ }, "node_modules/idna-uts46-hx": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "license": "MIT", "dependencies": { "punycode": "2.1.0" }, @@ -11852,16 +10512,13 @@ }, "node_modules/idna-uts46-hx/node_modules/punycode": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -11875,31 +10532,28 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/immediate": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + "license": "MIT" }, "node_modules/immutable": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", - "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", - "dev": true + "version": "4.3.7", + "dev": true, + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -11913,34 +10567,30 @@ }, "node_modules/imul": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", - "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -11948,20 +10598,17 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/inquirer": { "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -11985,9 +10632,8 @@ }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12000,9 +10646,8 @@ }, "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12016,9 +10661,8 @@ }, "node_modules/inquirer/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12028,24 +10672,21 @@ }, "node_modules/inquirer/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/inquirer/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/inquirer/node_modules/ora": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -12066,9 +10707,8 @@ }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12078,9 +10718,8 @@ }, "node_modules/inquirer/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -12092,9 +10731,8 @@ }, "node_modules/internal-slot": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -12106,9 +10744,8 @@ }, "node_modules/interpret": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">= 0.10" @@ -12116,18 +10753,16 @@ }, "node_modules/io-ts": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "dev": true, + "license": "MIT", "dependencies": { "fp-ts": "^1.0.0" } }, "node_modules/ip-address": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -12138,16 +10773,14 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/is-arguments": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -12161,9 +10794,8 @@ }, "node_modules/is-array-buffer": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -12177,15 +10809,13 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -12195,9 +10825,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -12207,9 +10836,8 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -12223,9 +10851,8 @@ }, "node_modules/is-builtin-module": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-modules": "^3.3.0" }, @@ -12238,8 +10865,7 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12248,12 +10874,28 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12261,9 +10903,8 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -12276,37 +10917,32 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fn": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-function": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + "license": "MIT" }, "node_modules/is-generator-function": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -12319,8 +10955,7 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -12330,8 +10965,7 @@ }, "node_modules/is-hex-prefixed": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "license": "MIT", "engines": { "node": ">=6.5.0", "npm": ">=3" @@ -12339,33 +10973,29 @@ }, "node_modules/is-interactive": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-lower-case": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==", "dev": true, + "license": "MIT", "dependencies": { "lower-case": "^1.1.0" } }, "node_modules/is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12375,17 +11005,15 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -12398,45 +11026,40 @@ }, "node_modules/is-path-cwd": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-reference": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*" } }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -12450,9 +11073,8 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -12465,9 +11087,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -12477,9 +11098,8 @@ }, "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -12492,9 +11112,8 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -12507,8 +11126,7 @@ }, "node_modules/is-typed-array": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -12521,14 +11139,12 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "license": "MIT" }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -12538,18 +11154,16 @@ }, "node_modules/is-upper-case": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==", "dev": true, + "license": "MIT", "dependencies": { "upper-case": "^1.1.0" } }, "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -12559,14 +11173,12 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "license": "MIT" }, "node_modules/isbinaryfile": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8.0.0" }, @@ -12576,18 +11188,17 @@ }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "license": "ISC" }, "node_modules/isows": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz", - "integrity": "sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.6.tgz", + "integrity": "sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==", "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/wagmi-dev" + "url": "https://github.com/sponsors/wevm" } ], "peerDependencies": { @@ -12596,42 +11207,36 @@ }, "node_modules/isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + "license": "MIT" }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "1.21.6", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, "node_modules/joycon": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/js-sha3": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -12641,14 +11246,12 @@ }, "node_modules/jsbn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -12658,14 +11261,12 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "license": "MIT" }, "node_modules/json-fixer": { "version": "1.6.15", - "resolved": "https://registry.npmjs.org/json-fixer/-/json-fixer-1.6.15.tgz", - "integrity": "sha512-TuDuZ5KrgyjoCIppdPXBMqiGfota55+odM+j2cQ5rt/XKyKmqGB3Whz1F8SN8+60yYGy/Nu5lbRZ+rx8kBIvBw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.9", "chalk": "^4.1.2", @@ -12677,9 +11278,8 @@ }, "node_modules/json-fixer/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12692,9 +11292,8 @@ }, "node_modules/json-fixer/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12708,9 +11307,8 @@ }, "node_modules/json-fixer/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12720,24 +11318,21 @@ }, "node_modules/json-fixer/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-fixer/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/json-fixer/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12747,20 +11342,17 @@ }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-rpc-engine": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz", - "integrity": "sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==", + "license": "ISC", "dependencies": { "@metamask/safe-event-emitter": "^2.0.0", "eth-rpc-errors": "^4.0.2" @@ -12771,31 +11363,26 @@ }, "node_modules/json-rpc-engine/node_modules/eth-rpc-errors": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz", - "integrity": "sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==", + "license": "MIT", "dependencies": { "fast-safe-stringify": "^2.0.6" } }, "node_modules/json-rpc-random-id": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==" + "license": "ISC" }, "node_modules/json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "license": "MIT" }, "node_modules/json-stable-stringify": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", - "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "isarray": "^2.0.5", @@ -12811,18 +11398,15 @@ }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + "license": "ISC" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -12831,16 +11415,14 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true + "version": "3.3.1", + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -12850,17 +11432,15 @@ }, "node_modules/jsonify": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "license": "Public Domain", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/jsonschema": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": "*" @@ -12868,8 +11448,7 @@ }, "node_modules/jsprim": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -12882,9 +11461,8 @@ }, "node_modules/keccak": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -12896,48 +11474,34 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, "node_modules/level-codec": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + "license": "MIT" }, "node_modules/level-errors": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", + "license": "MIT", "dependencies": { "errno": "~0.1.1" } }, "node_modules/level-iterator-stream": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==", + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "level-errors": "^1.0.3", @@ -12947,13 +11511,11 @@ }, "node_modules/level-iterator-stream/node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "license": "MIT" }, "node_modules/level-iterator-stream/node_modules/readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -12963,13 +11525,11 @@ }, "node_modules/level-iterator-stream/node_modules/string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "license": "MIT" }, "node_modules/level-ws": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==", + "license": "MIT", "dependencies": { "readable-stream": "~1.0.15", "xtend": "~2.1.1" @@ -12977,18 +11537,15 @@ }, "node_modules/level-ws/node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "license": "MIT" }, "node_modules/level-ws/node_modules/object-keys": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" + "license": "MIT" }, "node_modules/level-ws/node_modules/readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -12998,13 +11555,10 @@ }, "node_modules/level-ws/node_modules/string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "license": "MIT" }, "node_modules/level-ws/node_modules/xtend": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", "dependencies": { "object-keys": "~0.4.0" }, @@ -13014,8 +11568,7 @@ }, "node_modules/levelup": { "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "license": "MIT", "dependencies": { "deferred-leveldown": "~1.2.1", "level-codec": "~7.0.0", @@ -13028,16 +11581,14 @@ }, "node_modules/levelup/node_modules/semver": { "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -13047,10 +11598,9 @@ } }, "node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "version": "3.1.2", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -13060,15 +11610,13 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -13081,9 +11629,8 @@ }, "node_modules/load-json-file/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13099,9 +11646,8 @@ }, "node_modules/locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -13112,73 +11658,61 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "license": "MIT" }, "node_modules/lodash.get": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isequal": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "license": "MIT" }, "node_modules/lodash.pick": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" + "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -13192,9 +11726,8 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13207,9 +11740,8 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13223,9 +11755,8 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13235,24 +11766,21 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13262,9 +11790,8 @@ }, "node_modules/loupe": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "get-func-name": "^2.0.1" @@ -13272,23 +11799,20 @@ }, "node_modules/lower-case": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lower-case-first": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==", "dev": true, + "license": "MIT", "dependencies": { "lower-case": "^1.1.2" } }, "node_modules/lowercase-keys": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -13298,70 +11822,56 @@ }, "node_modules/lru_map": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/ltgt": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" + "license": "MIT" }, "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "version": "0.30.11", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/map-stream": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, "node_modules/markdown-table": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/markdown-table-ts": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/markdown-table-ts/-/markdown-table-ts-1.0.3.tgz", - "integrity": "sha512-lYrp7FXmBqpmGmsEF92WnSukdgYvLm15FPIODZOx9+3nobkxJxjBYcszqZf5VqTjBtISPSNC7zjU9o3zwpL6AQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/match-all": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", - "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/md5.js": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -13370,22 +11880,19 @@ }, "node_modules/mdn-data": { "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/memdown": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==", + "license": "MIT", "dependencies": { "abstract-leveldown": "~2.7.1", "functional-red-black-tree": "^1.0.1", @@ -13397,21 +11904,17 @@ }, "node_modules/memdown/node_modules/abstract-leveldown": { "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "license": "MIT", "dependencies": { "xtend": "~4.0.0" } }, "node_modules/memdown/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "license": "MIT" }, "node_modules/memorystream": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, "engines": { "node": ">= 0.10.0" @@ -13419,27 +11922,23 @@ }, "node_modules/merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "license": "MIT" }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/merkle-patricia-tree": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "license": "MPL-2.0", "dependencies": { "async": "^1.4.2", "ethereumjs-util": "^5.0.0", @@ -13453,18 +11952,15 @@ }, "node_modules/merkle-patricia-tree/node_modules/async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==" + "license": "MIT" }, "node_modules/merkle-patricia-tree/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "license": "MPL-2.0", "dependencies": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -13477,13 +11973,11 @@ }, "node_modules/merkle-patricia-tree/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "license": "MIT" }, "node_modules/merkle-patricia-tree/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -13496,37 +11990,32 @@ }, "node_modules/merkle-patricia-tree/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "license": "MIT" }, "node_modules/merkle-patricia-tree/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micro-ftch": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -13535,8 +12024,7 @@ }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -13546,16 +12034,14 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -13565,43 +12051,37 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/min-document": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dependencies": { "dom-walk": "^0.1.0" } }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "license": "MIT" }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -13614,16 +12094,14 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "license": "ISC", "dependencies": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -13631,16 +12109,14 @@ }, "node_modules/minizlib": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "license": "MIT", "dependencies": { "minipass": "^2.9.0" } }, "node_modules/mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -13650,9 +12126,7 @@ }, "node_modules/mkdirp-promise": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", + "license": "ISC", "dependencies": { "mkdirp": "*" }, @@ -13661,31 +12135,31 @@ } }, "node_modules/mkdist": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mkdist/-/mkdist-1.4.0.tgz", - "integrity": "sha512-LzzdzWDx6cWWPd8saIoO+kT5jnbijfeDaE6jZfmCYEi3YL2aJSyF23/tCFee/mDuh/ek1UQeSYdLeSa6oesdiw==", + "version": "1.5.5", "dev": true, + "license": "MIT", "dependencies": { - "autoprefixer": "^10.4.14", - "citty": "^0.1.5", - "cssnano": "^6.0.1", - "defu": "^6.1.3", - "esbuild": "^0.19.7", - "fs-extra": "^11.1.1", - "globby": "^13.2.2", - "jiti": "^1.21.0", - "mlly": "^1.4.2", - "mri": "^1.2.0", - "pathe": "^1.1.1", - "postcss": "^8.4.26", - "postcss-nested": "^6.0.1" + "autoprefixer": "^10.4.20", + "citty": "^0.1.6", + "cssnano": "^7.0.5", + "defu": "^6.1.4", + "esbuild": "^0.23.1", + "fast-glob": "^3.3.2", + "jiti": "^1.21.6", + "mlly": "^1.7.1", + "pathe": "^1.1.2", + "pkg-types": "^1.1.3", + "postcss": "^8.4.41", + "postcss-nested": "^6.2.0", + "semver": "^7.6.3" }, "bin": { "mkdist": "dist/cli.cjs" }, "peerDependencies": { - "sass": "^1.69.5", - "typescript": ">=5.3.2" + "sass": "^1.77.8", + "typescript": ">=5.5.4", + "vue-tsc": "^1.8.27 || ^2.0.21" }, "peerDependenciesMeta": { "sass": { @@ -13693,13 +12167,32 @@ }, "typescript": { "optional": true + }, + "vue-tsc": { + "optional": true } } }, + "node_modules/mkdist/node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/mkdist/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "cpu": [ "arm" ], @@ -13709,13 +12202,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "cpu": [ "arm64" ], @@ -13725,13 +12218,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "cpu": [ "x64" ], @@ -13741,29 +12234,28 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "version": "0.23.1", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "cpu": [ "x64" ], @@ -13773,13 +12265,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "cpu": [ "arm64" ], @@ -13789,13 +12281,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "cpu": [ "x64" ], @@ -13805,13 +12297,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "cpu": [ "arm" ], @@ -13821,13 +12313,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "cpu": [ "arm64" ], @@ -13837,13 +12329,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "cpu": [ "ia32" ], @@ -13853,13 +12345,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "cpu": [ "loong64" ], @@ -13869,13 +12361,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "cpu": [ "mips64el" ], @@ -13885,13 +12377,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "cpu": [ "ppc64" ], @@ -13901,13 +12393,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "cpu": [ "riscv64" ], @@ -13917,13 +12409,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "cpu": [ "s390x" ], @@ -13933,13 +12425,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "cpu": [ "x64" ], @@ -13949,13 +12441,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", "cpu": [ "x64" ], @@ -13965,13 +12457,13 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "cpu": [ "x64" ], @@ -13981,13 +12473,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "cpu": [ "x64" ], @@ -13997,13 +12489,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "cpu": [ "arm64" ], @@ -14013,13 +12505,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "cpu": [ "ia32" ], @@ -14029,13 +12521,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "cpu": [ "x64" ], @@ -14045,118 +12537,73 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/mkdist/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "version": "0.23.1", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } - }, - "node_modules/mkdist/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/mkdist/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/mkdist/node_modules/semver": { + "version": "7.6.3", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mkdist/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, "engines": { - "node": ">= 4" - } - }, - "node_modules/mkdist/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, "node_modules/mlly": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", - "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", + "version": "1.7.1", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.11.3", "pathe": "^1.1.2", - "pkg-types": "^1.0.3", - "ufo": "^1.3.2" + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" } }, "node_modules/mlly/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.12.1", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -14166,39 +12613,37 @@ }, "node_modules/mnemonist": { "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", "dev": true, + "license": "MIT", "dependencies": { "obliterator": "^2.0.0" } }, "node_modules/mocha": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", - "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "8.1.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "version": "10.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", @@ -14208,47 +12653,10 @@ "node": ">= 14.0.0" } }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -14257,9 +12665,8 @@ }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -14269,9 +12676,8 @@ }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -14285,9 +12691,8 @@ }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14304,18 +12709,16 @@ }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -14327,10 +12730,9 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "version": "5.1.6", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -14340,15 +12742,13 @@ }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -14361,9 +12761,8 @@ }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -14376,18 +12775,16 @@ }, "node_modules/mocha/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14400,18 +12797,16 @@ }, "node_modules/mocha/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -14427,28 +12822,23 @@ }, "node_modules/mock-fs": { "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" + "license": "MIT" }, "node_modules/mri": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "license": "MIT" }, "node_modules/multibase": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "deprecated": "This module has been superseded by the multiformats module", + "license": "MIT", "dependencies": { "base-x": "^3.0.8", "buffer": "^5.5.0" @@ -14456,17 +12846,14 @@ }, "node_modules/multicodec": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "deprecated": "This module has been superseded by the multiformats module", + "license": "MIT", "dependencies": { "varint": "^5.0.0" } }, "node_modules/multihashes": { "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "multibase": "^0.7.0", @@ -14475,9 +12862,7 @@ }, "node_modules/multihashes/node_modules/multibase": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "deprecated": "This module has been superseded by the multiformats module", + "license": "MIT", "dependencies": { "base-x": "^3.0.8", "buffer": "^5.5.0" @@ -14485,9 +12870,8 @@ }, "node_modules/murmur-128": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", - "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", "dev": true, + "license": "MIT", "dependencies": { "encode-utf8": "^1.0.2", "fmix": "^0.1.0", @@ -14496,19 +12880,15 @@ }, "node_modules/mute-stream": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nano-json-stream-parser": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" + "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -14516,6 +12896,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -14525,61 +12906,51 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/netmask": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/next-tick": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "license": "ISC" }, "node_modules/nice-try": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/no-case": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, + "license": "MIT", "dependencies": { "lower-case": "^1.1.1" } }, "node_modules/node-addon-api": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, "funding": [ { @@ -14591,15 +12962,15 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-emoji": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "lodash": "^4.17.21" @@ -14607,8 +12978,7 @@ }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -14625,9 +12995,8 @@ } }, "node_modules/node-gyp-build": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", - "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", + "version": "4.8.2", + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -14636,9 +13005,8 @@ }, "node_modules/node-plop": { "version": "0.26.3", - "resolved": "https://registry.npmjs.org/node-plop/-/node-plop-0.26.3.tgz", - "integrity": "sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime-corejs3": "^7.9.2", "@types/inquirer": "^6.5.0", @@ -14658,9 +13026,8 @@ }, "node_modules/node-plop/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14673,9 +13040,8 @@ }, "node_modules/node-plop/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14689,9 +13055,8 @@ }, "node_modules/node-plop/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -14701,24 +13066,21 @@ }, "node_modules/node-plop/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-plop/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/node-plop/node_modules/inquirer": { "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", @@ -14740,9 +13102,8 @@ }, "node_modules/node-plop/node_modules/rxjs": { "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -14752,9 +13113,8 @@ }, "node_modules/node-plop/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14764,20 +13124,17 @@ }, "node_modules/node-plop/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "version": "2.0.18", + "license": "MIT" }, "node_modules/nofilter": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=12.19" @@ -14785,9 +13142,8 @@ }, "node_modules/nopt": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "abbrev": "1" @@ -14798,9 +13154,8 @@ }, "node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -14810,35 +13165,31 @@ }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -14848,9 +13199,8 @@ }, "node_modules/npm-run-all": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", @@ -14873,9 +13223,8 @@ }, "node_modules/npm-run-all/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14883,9 +13232,8 @@ }, "node_modules/npm-run-all/node_modules/cross-spawn": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, + "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -14899,9 +13247,8 @@ }, "node_modules/npm-run-all/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14911,27 +13258,24 @@ }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/npm-run-all/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/npm-run-all/node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -14941,18 +13285,16 @@ }, "node_modules/npm-run-all/node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-all/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -14962,9 +13304,8 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -14974,9 +13315,8 @@ }, "node_modules/nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -14986,8 +13326,7 @@ }, "node_modules/number-to-bn": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "license": "MIT", "dependencies": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" @@ -14999,46 +13338,43 @@ }, "node_modules/number-to-bn/node_modules/bn.js": { "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "license": "MIT" }, "node_modules/oauth-sign": { "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -15054,22 +13390,19 @@ }, "node_modules/obliterator": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/oboe": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "license": "BSD", "dependencies": { "http-https": "^1.0.0" } }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -15079,17 +13412,15 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -15101,16 +13432,15 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -15118,9 +13448,8 @@ }, "node_modules/ora": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^3.0.0", "cli-cursor": "^3.1.0", @@ -15140,9 +13469,8 @@ }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15155,9 +13483,8 @@ }, "node_modules/ora/node_modules/chalk": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15168,9 +13495,8 @@ }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15180,24 +13506,21 @@ }, "node_modules/ora/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/log-symbols": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^2.4.2" }, @@ -15207,9 +13530,8 @@ }, "node_modules/ora/node_modules/log-symbols/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -15219,9 +13541,8 @@ }, "node_modules/ora/node_modules/log-symbols/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -15233,33 +13554,29 @@ }, "node_modules/ora/node_modules/log-symbols/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/ora/node_modules/log-symbols/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ora/node_modules/log-symbols/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/ora/node_modules/log-symbols/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -15269,9 +13586,8 @@ }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15281,33 +13597,29 @@ }, "node_modules/ordinal": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/p-cancelable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "license": "MIT", "engines": { "node": ">=12.20" } }, "node_modules/p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -15317,9 +13629,8 @@ }, "node_modules/p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -15329,9 +13640,8 @@ }, "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -15344,37 +13654,34 @@ }, "node_modules/p-try": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/pac-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", - "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "pac-resolver": "^7.0.0", - "socks-proxy-agent": "^8.0.2" + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" }, "engines": { "node": ">= 14" } }, "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -15383,10 +13690,9 @@ } }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -15397,9 +13703,8 @@ }, "node_modules/pac-resolver": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, + "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" @@ -15410,17 +13715,15 @@ }, "node_modules/param-case": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^2.2.0" } }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -15430,20 +13733,16 @@ }, "node_modules/parse-cache-control": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", "dev": true }, "node_modules/parse-headers": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + "license": "MIT" }, "node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -15454,17 +13753,15 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/pascal-case": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", - "integrity": "sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==", "dev": true, + "license": "MIT", "dependencies": { "camel-case": "^3.0.0", "upper-case-first": "^1.1.0" @@ -15472,67 +13769,58 @@ }, "node_modules/path-case": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", - "integrity": "sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==", "dev": true, + "license": "MIT", "dependencies": { "no-case": "^2.2.0" } }, "node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "license": "MIT" }, "node_modules/path-to-regexp": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pathe": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pathval": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": "*" @@ -15540,17 +13828,18 @@ }, "node_modules/pause-stream": { "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, + "license": [ + "MIT", + "Apache2" + ], "dependencies": { "through": "~2.3" } }, "node_modules/pbkdf2": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "license": "MIT", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -15564,9 +13853,8 @@ }, "node_modules/pegjs": { "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", - "integrity": "sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow==", "dev": true, + "license": "MIT", "bin": { "pegjs": "bin/pegjs" }, @@ -15576,18 +13864,15 @@ }, "node_modules/performance-now": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.0", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -15597,9 +13882,8 @@ }, "node_modules/pidtree": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, + "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -15609,8 +13893,7 @@ }, "node_modules/pify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -15619,37 +13902,32 @@ } }, "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "version": "1.2.0", "dev": true, + "license": "MIT", "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" } }, "node_modules/pluralize": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/possible-typed-array-names": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.44", "dev": true, "funding": [ { @@ -15665,415 +13943,399 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "version": "10.0.2", "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.11", + "postcss-selector-parser": "^6.1.2", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12 || ^20.9 || >=22.0" }, "peerDependencies": { - "postcss": "^8.2.2" + "postcss": "^8.4.38" } }, "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.23.3", "caniuse-api": "^3.0.0", "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", + "version": "7.0.3", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.23.3", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", + "version": "7.0.2", "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", + "version": "7.0.1", "dev": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", + "version": "7.0.0", "dev": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", + "version": "7.0.0", "dev": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-merge-longhand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.4.tgz", - "integrity": "sha512-vAfWGcxUUGlFiPM3nDMZA+/Yo9sbpc3JNkcYZez8FfJDv41Dh7tAgA3QGVTocaHCZZL6aXPXPOaBMJsjujodsA==", + "version": "7.0.3", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.0" + "stylehacks": "^7.0.3" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-merge-rules": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.0.tgz", - "integrity": "sha512-lER+W3Gr6XOvxOYk1Vi/6UsAgKMg6MDBthmvbNqi2XxAk/r9XfhdYZSigfWjuWWn3zYw2wLelvtM8XuAEFqRkA==", + "version": "7.0.3", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.23.3", "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.15" + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-font-values": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.3.tgz", - "integrity": "sha512-SmAeTA1We5rMnN3F8X9YBNo9bj9xB4KyDHnaNJnBfQIPi+60fNiR9OTRnIaMqkYzAQX0vObIw4Pn0vuKEOettg==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", + "browserslist": "^4.23.3", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-minify-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.3.tgz", - "integrity": "sha512-IcV7ZQJcaXyhx4UBpWZMsinGs2NmiUC60rJSkyvjPCPqhNjVGsrJUM+QhAtCaikZ0w0/AbZuH4wVvF/YMuMhvA==", + "version": "7.0.3", "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.15" + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "version": "6.2.0", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.11" + "postcss-selector-parser": "^6.1.1" }, "engines": { "node": ">=12.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": "^8.2.14" } }, "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", + "version": "7.0.0", "dev": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.23.3", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-utils": "^4.0.2", + "cssnano-utils": "^5.0.0", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", + "browserslist": "^4.23.3", "caniuse-api": "^3.0.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", + "version": "7.0.0", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "6.1.2", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -16083,31 +14345,29 @@ } }, "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" + "svgo": "^3.3.2" }, "engines": { - "node": "^14 || ^16 || >= 18" + "node": "^18.12.0 || ^20.9.0 || >= 18" }, "peerDependencies": { "postcss": "^8.4.31" } }, "node_modules/postcss-unique-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.3.tgz", - "integrity": "sha512-NFXbYr8qdmCr/AFceaEfdcsKGCvWTeGO6QVC9h2GvtWgj0/0dklKQcaMMVzs6tr8bY+ase8hOtHW8OBTTRvS8A==", + "version": "7.0.2", "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.15" + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" @@ -16115,30 +14375,25 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/precond": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==", "engines": { "node": ">= 0.6" } }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -16151,8 +14406,7 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -16161,14 +14415,12 @@ } }, "node_modules/prettier-plugin-solidity": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.3.1.tgz", - "integrity": "sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==", + "version": "1.4.1", "dev": true, + "license": "MIT", "dependencies": { - "@solidity-parser/parser": "^0.17.0", - "semver": "^7.5.4", - "solidity-comments-extractor": "^0.0.8" + "@solidity-parser/parser": "^0.18.0", + "semver": "^7.5.4" }, "engines": { "node": ">=16" @@ -16178,31 +14430,14 @@ } }, "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.17.0.tgz", - "integrity": "sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==", - "dev": true - }, - "node_modules/prettier-plugin-solidity/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "0.18.0", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, "node_modules/prettier-plugin-solidity/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.3", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -16210,17 +14445,10 @@ "node": ">=10" } }, - "node_modules/prettier-plugin-solidity/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/pretty-bytes": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", - "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -16230,38 +14458,33 @@ }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/promise": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dev": true, + "license": "MIT", "dependencies": { "asap": "~2.0.6" } }, "node_modules/promise-to-callback": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==", + "license": "MIT", "dependencies": { "is-fn": "^1.0.0", "set-immediate-shim": "^1.0.1" @@ -16272,8 +14495,7 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -16284,9 +14506,8 @@ }, "node_modules/proxy-agent": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -16302,10 +14523,9 @@ } }, "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "version": "7.1.1", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -16314,10 +14534,9 @@ } }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.5", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -16328,20 +14547,17 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prr": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + "license": "MIT" }, "node_modules/ps-tree": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", "dev": true, + "license": "MIT", "dependencies": { "event-stream": "=3.3.4" }, @@ -16354,13 +14570,11 @@ }, "node_modules/psl": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "license": "MIT" }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -16368,17 +14582,15 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/qs": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", - "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", + "version": "6.13.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -16391,8 +14603,7 @@ }, "node_modules/query-string": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "license": "MIT", "dependencies": { "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", @@ -16404,8 +14615,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -16419,12 +14628,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -16434,24 +14643,21 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -16464,9 +14670,8 @@ }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -16479,18 +14684,16 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/read-pkg": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -16502,9 +14705,8 @@ }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -16514,17 +14716,15 @@ }, "node_modules/read-pkg/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16536,9 +14736,8 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -16548,8 +14747,6 @@ }, "node_modules/rechoir": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "peer": true, "dependencies": { @@ -16561,9 +14758,8 @@ }, "node_modules/recursive-readdir": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "minimatch": "^3.0.5" @@ -16574,9 +14770,8 @@ }, "node_modules/recursive-readdir/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0", @@ -16585,9 +14780,8 @@ }, "node_modules/recursive-readdir/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -16598,23 +14792,20 @@ }, "node_modules/reduce-flatten": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/regenerator-runtime": { "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -16630,8 +14821,7 @@ }, "node_modules/regexpp": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -16641,9 +14831,8 @@ }, "node_modules/registry-auth-token": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", "dev": true, + "license": "MIT", "dependencies": { "rc": "^1.1.6", "safe-buffer": "^5.0.1" @@ -16651,9 +14840,8 @@ }, "node_modules/registry-url": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", "dev": true, + "license": "MIT", "dependencies": { "rc": "^1.0.1" }, @@ -16663,9 +14851,8 @@ }, "node_modules/req-cwd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", "dev": true, + "license": "MIT", "dependencies": { "req-from": "^2.0.0" }, @@ -16675,9 +14862,8 @@ }, "node_modules/req-from": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^3.0.0" }, @@ -16687,18 +14873,15 @@ }, "node_modules/req-from/node_modules/resolve-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/request": { "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -16727,8 +14910,7 @@ }, "node_modules/request/node_modules/form-data": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -16740,48 +14922,41 @@ }, "node_modules/request/node_modules/qs": { "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, "node_modules/request/node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/resolve": { "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "license": "MIT", "dependencies": { "path-parse": "^1.0.6" }, @@ -16791,21 +14966,18 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + "license": "MIT" }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/responselike": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -16815,17 +14987,15 @@ }, "node_modules/responselike/node_modules/lowercase-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -16836,8 +15006,7 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -16845,8 +15014,7 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -16859,8 +15027,7 @@ }, "node_modules/ripemd160": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -16868,8 +15035,7 @@ }, "node_modules/rlp": { "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "license": "MPL-2.0", "dependencies": { "bn.js": "^5.2.0" }, @@ -16879,9 +15045,8 @@ }, "node_modules/rollup": { "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -16894,12 +15059,11 @@ } }, "node_modules/rollup-plugin-dts": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.1.0.tgz", - "integrity": "sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==", + "version": "6.1.1", "dev": true, + "license": "LGPL-3.0-only", "dependencies": { - "magic-string": "^0.30.4" + "magic-string": "^0.30.10" }, "engines": { "node": ">=16" @@ -16908,7 +15072,7 @@ "url": "https://github.com/sponsors/Swatinem" }, "optionalDependencies": { - "@babel/code-frame": "^7.22.13" + "@babel/code-frame": "^7.24.2" }, "peerDependencies": { "rollup": "^3.29.4 || ^4", @@ -16916,14 +15080,13 @@ } }, "node_modules/rollup-plugin-dts/node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", "dev": true, + "license": "MIT", "optional": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -16931,9 +15094,8 @@ }, "node_modules/rollup-plugin-esbuild": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-5.0.0.tgz", - "integrity": "sha512-1cRIOHAPh8WQgdQQyyvFdeOdxuiyk+zB5zJ5+YOwrZP4cJ0MT3Fs48pQxrZeyZHcn+klFherytILVfE4aYrneg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "debug": "^4.3.4", @@ -16952,17 +15114,14 @@ }, "node_modules/run-async": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -16977,29 +15136,27 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rustbn.js": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + "license": "(MIT OR Apache-2.0)" }, "node_modules/rxjs": { "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -17015,8 +15172,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -17030,22 +15185,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-event-emitter": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "deprecated": "Renamed to @metamask/safe-event-emitter", + "license": "ISC", "dependencies": { "events": "^3.0.0" } }, "node_modules/safe-regex-test": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -17060,14 +15213,12 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "license": "MIT" }, "node_modules/sc-istanbul": { "version": "0.4.6", - "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", - "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", "dev": true, + "license": "BSD-3-Clause", "peer": true, "dependencies": { "abbrev": "1.0.x", @@ -17091,9 +15242,8 @@ }, "node_modules/sc-istanbul/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "sprintf-js": "~1.0.2" @@ -17101,16 +15251,14 @@ }, "node_modules/sc-istanbul/node_modules/async": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/sc-istanbul/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0", @@ -17119,9 +15267,8 @@ }, "node_modules/sc-istanbul/node_modules/escodegen": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { "esprima": "^2.7.1", @@ -17142,9 +15289,8 @@ }, "node_modules/sc-istanbul/node_modules/esprima": { "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "bin": { "esparse": "bin/esparse.js", @@ -17156,8 +15302,6 @@ }, "node_modules/sc-istanbul/node_modules/estraverse": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", "dev": true, "peer": true, "engines": { @@ -17166,9 +15310,8 @@ }, "node_modules/sc-istanbul/node_modules/glob": { "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "inflight": "^1.0.4", @@ -17183,9 +15326,8 @@ }, "node_modules/sc-istanbul/node_modules/has-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -17193,9 +15335,8 @@ }, "node_modules/sc-istanbul/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "argparse": "^1.0.7", @@ -17207,9 +15348,8 @@ }, "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "bin": { "esparse": "bin/esparse.js", @@ -17221,9 +15361,8 @@ }, "node_modules/sc-istanbul/node_modules/levn": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "prelude-ls": "~1.1.2", @@ -17235,9 +15374,8 @@ }, "node_modules/sc-istanbul/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -17248,9 +15386,8 @@ }, "node_modules/sc-istanbul/node_modules/optionator": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "deep-is": "~0.1.3", @@ -17266,8 +15403,6 @@ }, "node_modules/sc-istanbul/node_modules/prelude-ls": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, "peer": true, "engines": { @@ -17276,15 +15411,12 @@ }, "node_modules/sc-istanbul/node_modules/resolve": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/sc-istanbul/node_modules/source-map": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", "dev": true, "optional": true, "peer": true, @@ -17297,16 +15429,14 @@ }, "node_modules/sc-istanbul/node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, + "license": "BSD-3-Clause", "peer": true }, "node_modules/sc-istanbul/node_modules/supports-color": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "has-flag": "^1.0.0" @@ -17317,9 +15447,8 @@ }, "node_modules/sc-istanbul/node_modules/type-check": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "prelude-ls": "~1.1.2" @@ -17330,9 +15459,8 @@ }, "node_modules/sc-istanbul/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "isexe": "^2.0.0" @@ -17343,20 +15471,17 @@ }, "node_modules/scrypt-js": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "license": "MIT" }, "node_modules/scule": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", - "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/secp256k1": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "elliptic": "^6.5.4", "node-addon-api": "^2.0.0", @@ -17368,24 +15493,20 @@ }, "node_modules/semaphore": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", "engines": { "node": ">=0.8.0" } }, "node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -17407,2686 +15528,2095 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/sentence-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", - "integrity": "sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==", - "dev": true, - "dependencies": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dev": true, - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/sentence-case": { + "version": "2.1.1", "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" } }, - "node_modules/snake-case": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "integrity": "sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==", + "node_modules/serialize-javascript": { + "version": "6.0.2", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "no-case": "^2.2.0" + "randombytes": "^2.1.0" } }, - "node_modules/socks": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", - "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", - "dev": true, + "node_modules/serve-static": { + "version": "1.15.0", + "license": "MIT", "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">= 0.8.0" } }, - "node_modules/socks-proxy-agent": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", - "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", - "dev": true, + "node_modules/servify": { + "version": "0.1.12", + "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "socks": "^2.7.1" + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" }, "engines": { - "node": ">= 14" + "node": ">=6" } }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "node_modules/set-blocking": { + "version": "2.0.0", "dev": true, + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "license": "MIT", "dependencies": { - "debug": "^4.3.4" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">= 14" + "node": ">= 0.4" } }, - "node_modules/solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "node_modules/set-function-name": { + "version": "2.0.2", "dev": true, + "license": "MIT", "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.4" } }, - "node_modules/solc/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" }, - "node_modules/solc/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "glob": "^7.1.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" + "sha.js": "bin.js" } }, - "node_modules/solhint": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/solhint/-/solhint-3.6.2.tgz", - "integrity": "sha512-85EeLbmkcPwD+3JR7aEMKsVC9YrRSxd4qkXuMzrlf7+z2Eqdfm1wHWq1ffTuo5aDhoZxp2I9yF3QkxZOxOL7aQ==", + "node_modules/sha1": { + "version": "1.1.1", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@solidity-parser/parser": "^0.16.0", - "ajv": "^6.12.6", - "antlr4": "^4.11.0", - "ast-parents": "^0.0.1", - "chalk": "^4.1.2", - "commander": "^10.0.0", - "cosmiconfig": "^8.0.0", - "fast-diff": "^1.2.0", - "glob": "^8.0.3", - "ignore": "^5.2.4", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "semver": "^7.5.2", - "strip-ansi": "^6.0.1", - "table": "^6.8.1", - "text-table": "^0.2.0" - }, - "bin": { - "solhint": "solhint.js" + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" }, - "optionalDependencies": { - "prettier": "^2.8.3" + "engines": { + "node": "*" } }, - "node_modules/solhint/node_modules/@solidity-parser/parser": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.2.tgz", - "integrity": "sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==", - "dev": true, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/solhint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/solhint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/shell-quote": { + "version": "1.8.1", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, + "license": "MIT", "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/solhint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/shelljs": { + "version": "0.8.5", "dev": true, + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "color-name": "~1.1.4" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/solhint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/solhint/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, + "node_modules/side-channel": { + "version": "1.0.6", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/solhint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/signal-exit": { + "version": "3.0.7", "dev": true, - "engines": { - "node": ">=8" - } + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/solhint/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" + "node_modules/simple-get": { + "version": "2.8.2", + "license": "MIT", + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/solhint/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "3.3.0", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "mimic-response": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/solhint/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/solhint/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, + "node_modules/slice-ansi": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/solhint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/solhint/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/solidity-bytes-utils": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/solidity-bytes-utils/-/solidity-bytes-utils-0.8.0.tgz", - "integrity": "sha512-r109ZHEf7zTMm1ENW6/IJFDWilFR/v0BZnGuFgDHJUV80ByobnV2k3txvwQaJ9ApL+6XAfwqsw5VFzjALbQPCw==", + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "@truffle/hdwallet-provider": "latest" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/solidity-comments-extractor": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/solidity-comments-extractor/-/solidity-comments-extractor-0.0.8.tgz", - "integrity": "sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==", - "dev": true + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" }, - "node_modules/solidity-coverage": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.11.tgz", - "integrity": "sha512-yy0Yk+olovBbXn0Me8BWULmmv7A69ZKkP5aTOJGOO8u61Tu2zS989erfjtFlUjDnfWtxRAVkd8BsQD704yLWHw==", + "node_modules/smart-buffer": { + "version": "4.2.0", "dev": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.18.0", - "chalk": "^2.4.2", - "death": "^1.1.0", - "difflib": "^0.2.4", - "fs-extra": "^8.1.0", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.15", - "mocha": "^10.2.0", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.6" - }, - "bin": { - "solidity-coverage": "plugins/bin.js" - }, - "peerDependencies": { - "hardhat": "^2.11.0" + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", - "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", + "node_modules/snake-case": { + "version": "2.1.0", "dev": true, - "peer": true + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" + } }, - "node_modules/solidity-coverage/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/socks": { + "version": "2.8.3", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/solidity-coverage/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/solidity-coverage/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/socks-proxy-agent": { + "version": "8.0.4", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/solidity-coverage/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, "engines": { - "node": ">=6" + "node": ">= 14" } }, - "node_modules/solidity-coverage/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "node_modules/solc": { + "version": "0.8.26", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" }, "bin": { - "semver": "bin/semver.js" + "solcjs": "solc.js" }, "engines": { - "node": ">=10" - } - }, - "node_modules/solidity-coverage/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/solidity-coverage/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/solc/node_modules/commander": { + "version": "8.3.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "node_modules/solhint": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/solhint/-/solhint-3.6.2.tgz", + "integrity": "sha512-85EeLbmkcPwD+3JR7aEMKsVC9YrRSxd4qkXuMzrlf7+z2Eqdfm1wHWq1ffTuo5aDhoZxp2I9yF3QkxZOxOL7aQ==", "dev": true, "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "@solidity-parser/parser": "^0.16.0", + "ajv": "^6.12.6", + "antlr4": "^4.11.0", + "ast-parents": "^0.0.1", + "chalk": "^4.1.2", + "commander": "^10.0.0", + "cosmiconfig": "^8.0.0", + "fast-diff": "^1.2.0", + "glob": "^8.0.3", + "ignore": "^5.2.4", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "semver": "^7.5.2", + "strip-ansi": "^6.0.1", + "table": "^6.8.1", + "text-table": "^0.2.0" + }, + "bin": { + "solhint": "solhint.js" + }, + "optionalDependencies": { + "prettier": "^2.8.3" } }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/solhint/node_modules/@solidity-parser/parser": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.2.tgz", + "integrity": "sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", - "dev": true - }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "node_modules/solhint/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "through": "2" + "color-convert": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true - }, - "node_modules/squirrelly": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/squirrelly/-/squirrelly-8.0.8.tgz", - "integrity": "sha512-7dyZJ9Gw86MmH0dYLiESsjGOTj6KG8IWToTaqBuB6LwPI+hyNb6mbQaZwrfnAQ4cMDnSWMUvX/zAYDLTSWLk/w==", + "node_modules/solhint/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/squirrellyjs/squirrelly?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "node_modules/solhint/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "node_modules/sshpk/node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + "node_modules/solhint/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "node_modules/solhint/node_modules/glob": { + "version": "8.1.0", "dev": true, + "license": "ISC", "dependencies": { - "type-fest": "^0.7.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "node_modules/solhint/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/solhint/node_modules/ignore": { + "version": "5.3.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 4" } }, - "node_modules/stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "node_modules/solhint/node_modules/minimatch": { + "version": "5.1.6", "dev": true, + "license": "ISC", "dependencies": { - "bl": "^5.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stdin-discarder/node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "node": ">=10" } }, - "node_modules/stdin-discarder/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/solhint/node_modules/semver": { + "version": "7.6.3", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "node_modules/solhint/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "duplexer": "~0.1.1" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/solidity-bytes-utils": { + "version": "0.8.0", + "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "@truffle/hdwallet-provider": "latest" } }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/solidity-coverage": { + "version": "0.8.13", + "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.18.0", + "chalk": "^2.4.2", + "death": "^1.1.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" }, - "engines": { - "node": ">=8" + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" } }, - "node_modules/string.prototype.padend": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", - "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6 <7 || >=8" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "node_modules/solidity-coverage/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "node_modules/solidity-coverage/node_modules/pify": { + "version": "4.0.1", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.6.3", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "node_modules/solidity-coverage/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">=8" + "node": ">= 4.0.0" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "node_modules/source-map": { + "version": "0.6.1", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/source-map-js": { + "version": "1.2.0", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/stylehacks": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.0.tgz", - "integrity": "sha512-ETErsPFgwlfYZ/CSjMO2Ddf+TsnkCVPBPaoB99Ro8WMAxf7cglzmFsRBhRmKObFjibtcvlNxFFPHuyr3sNlNUQ==", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.15" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split": { + "version": "0.3.3", + "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "through": "2" }, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/squirrelly": { + "version": "8.0.8", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=6.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/squirrellyjs/squirrelly?sponsor=1" } }, - "node_modules/svgo": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", - "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", - "dev": true, + "node_modules/sshpk": { + "version": "1.18.0", + "license": "MIT", "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" }, "bin": { - "svgo": "bin/svgo" + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" }, "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" + "node": ">=0.10.0" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/sshpk/node_modules/jsbn": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==", + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", "dev": true, - "dependencies": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" } }, - "node_modules/swarm-js": { - "version": "0.1.42", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", - "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^11.8.5", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, "dependencies": { - "defer-to-connect": "^2.0.0" + "bl": "^5.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/swarm-js/node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "engines": { - "node": ">=10.6.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "node_modules/stdin-discarder/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/swarm-js/node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "node_modules/stdin-discarder/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/swarm-js/node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "node_modules/stream-combiner": { + "version": "0.0.4", + "dev": true, + "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, + "duplexer": "~0.1.1" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "license": "MIT", "engines": { - "node": ">=10.19.0" + "node": ">=0.10.0" } }, - "node_modules/swarm-js/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "node_modules/swarm-js/node_modules/lowercase-keys": { + "node_modules/string-format": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } + "dev": true, + "license": "WTFPL OR MIT" }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/swarm-js/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/string.prototype.padend": { + "version": "3.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "node_modules/string.prototype.trim": { + "version": "1.2.9", "dev": true, + "license": "MIT", "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", "dev": true, + "license": "MIT", "dependencies": { - "get-port": "^3.1.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "node_modules/strip-bom": { + "version": "3.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "node_modules/strip-final-newline": { + "version": "2.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "node": ">=6" } }, - "node_modules/table/node_modules/json-schema-traverse": { + "node_modules/strip-hex-prefix": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "license": "MIT", "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" + "is-hex-prefixed": "1.0.0" }, "engines": { - "node": ">=4.5" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "license": "MIT", "engines": { "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", - "dev": true, - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tempy/node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "node_modules/stylehacks": { + "version": "7.0.3", "dev": true, + "license": "MIT", "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "browserslist": "^4.23.3", + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": ">=10" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/tempy/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/tempy/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">= 4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "node_modules/svgo": { + "version": "3.3.2", "dev": true, + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, "engines": { - "node": ">=10" + "node": ">=14.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", "dev": true, - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">= 10" } }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true - }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "node_modules/swap-case": { + "version": "1.1.2", "dev": true, + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" } }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "node_modules/swarm-js": { + "version": "0.1.42", + "license": "MIT", + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true - }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "dev": true + "node_modules/swarm-js/node_modules/cacheable-lookup": { + "version": "5.0.4", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } }, - "node_modules/tinygradient": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", - "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", - "dev": true, + "node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "license": "MIT", "dependencies": { - "@types/tinycolor2": "^1.4.0", - "tinycolor2": "^1.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "node_modules/title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==", - "dev": true, + "node_modules/swarm-js/node_modules/got": { + "version": "11.8.6", + "license": "MIT", "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, + "node_modules/swarm-js/node_modules/http2-wrapper": { + "version": "1.0.3", + "license": "MIT", "dependencies": { - "os-tmpdir": "~1.0.2" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=10.19.0" } }, - "node_modules/to-fast-properties": { + "node_modules/swarm-js/node_modules/jsonfile": { + "version": "4.0.0", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/swarm-js/node_modules/lowercase-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "2.1.1", + "license": "MIT", "engines": { - "node": ">=8.0" + "node": ">=8" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/swarm-js/node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">= 4.0.0" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "node_modules/sync-request": { + "version": "6.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" }, "engines": { - "node": ">=0.8" + "node": ">=8.0.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "node_modules/sync-rpc": { + "version": "1.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "get-port": "^3.1.0" + } }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "engines": { - "node": ">=16" + "node_modules/table": { + "version": "6.8.2", + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, - "peerDependencies": { - "typescript": ">=4.2.0" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", - "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "node_modules/table-layout": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" }, - "bin": { - "write-markdown": "dist/write-markdown.js" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ts-command-line-args/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ts-command-line-args/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ts-command-line-args/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/tar": { + "version": "4.4.19", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "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" }, "engines": { - "node": ">=7.0.0" + "node": ">=4.5" } }, - "node_modules/ts-command-line-args/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-command-line-args/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/temp-dir": { + "version": "2.0.0", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ts-command-line-args/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/tempy": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peerDependencies": { - "typescript": ">=3.7.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "node_modules/tempy/node_modules/del": { + "version": "6.1.1", "dev": true, + "license": "MIT", "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "node_modules/tempy/node_modules/globby": { + "version": "11.1.0", "dev": true, - "bin": { - "acorn": "bin/acorn" + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/tempy/node_modules/ignore": { + "version": "5.3.2", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.3.1" + "node": ">= 4" } }, - "node_modules/tsconfck": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.0.3.tgz", - "integrity": "sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==", + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", "dev": true, - "bin": { - "tsconfck": "bin/tsconfck.js" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "^18 || >=20" - }, - "peerDependencies": { - "typescript": "^5.0.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tsconfig": { - "resolved": "config/tsconfig", - "link": true - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true + "node_modules/text-table": { + "version": "0.2.0", + "license": "MIT" }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "node_modules/then-request": { + "version": "6.0.2", + "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" }, "engines": { - "node": "*" + "node": ">=6.0.0" } }, - "node_modules/turbo": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.12.5.tgz", - "integrity": "sha512-FATU5EnhrYG8RvQJYFJnDd18DpccDjyvd53hggw9T9JEg9BhWtIEoeaKtBjYbpXwOVrJQMDdXcIB4f2nD3QPPg==", + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", "dev": true, - "bin": { - "turbo": "bin/turbo" + "license": "MIT" + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, - "optionalDependencies": { - "turbo-darwin-64": "1.12.5", - "turbo-darwin-arm64": "1.12.5", - "turbo-linux-64": "1.12.5", - "turbo-linux-arm64": "1.12.5", - "turbo-windows-64": "1.12.5", - "turbo-windows-arm64": "1.12.5" + "engines": { + "node": ">= 0.12" } }, - "node_modules/turbo-darwin-64": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.12.5.tgz", - "integrity": "sha512-0GZ8reftwNQgIQLHkHjHEXTc/Z1NJm+YjsrBP+qhM/7yIZ3TEy9gJhuogDt2U0xIWwFgisTyzbtU7xNaQydtoA==", - "cpu": [ - "x64" - ], + "node_modules/through": { + "version": "2.3.8", "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "license": "MIT" }, - "node_modules/turbo-darwin-arm64": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.12.5.tgz", - "integrity": "sha512-8WpOLNNzvH6kohQOjihD+gaWL+ZFNfjvBwhOF0rjEzvW+YR3Pa7KjhulrjWyeN2yMFqAPubTbZIGOz1EVXLuQA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "node_modules/timed-out": { + "version": "4.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/turbo-linux-64": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.12.5.tgz", - "integrity": "sha512-INit73+bNUpwqGZCxgXCR3I+cQsdkQ3/LkfkgSOibkpg+oGqxJRzeXw3sp990d7SCoE8QOcs3iw+PtiFX/LDAA==", - "cpu": [ - "x64" - ], + "node_modules/tiny-invariant": { + "version": "1.3.3", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/turbo-linux-arm64": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.12.5.tgz", - "integrity": "sha512-6lkRBvxtI/GQdGtaAec9LvVQUoRw6nXFp0kM+Eu+5PbZqq7yn6cMkgDJLI08zdeui36yXhone8XGI8pHg8bpUQ==", - "cpu": [ - "arm64" - ], + "node_modules/tinycolor2": { + "version": "1.6.0", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/turbo-windows-64": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.12.5.tgz", - "integrity": "sha512-gQYbOhZg5Ww0bQ/bC0w/4W6yQRwBumUUnkB+QPo15VznwxZe2a7bo6JM+9Xy9dKLa/kn+p7zTqme4OEp6M3/Yg==", - "cpu": [ - "x64" - ], + "node_modules/tinygradient": { + "version": "1.1.5", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "license": "MIT", + "dependencies": { + "@types/tinycolor2": "^1.4.0", + "tinycolor2": "^1.0.0" + } }, - "node_modules/turbo-windows-arm64": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.12.5.tgz", - "integrity": "sha512-auvhZ9FrhnvQ4mgBlY9O68MT4dIfprYGvd2uPICba/mHUZZvVy5SGgbHJ0KbMwaJfnnFoPgLJO6M+3N2gDprKw==", - "cpu": [ - "arm64" - ], + "node_modules/title-case": { + "version": "2.1.1", "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" - }, - "node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "peer": true, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.6" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/tough-cookie": { + "version": "2.5.0", + "license": "BSD-3-Clause", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">=0.8" } }, - "node_modules/typechain": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", - "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", - "dev": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">=16" }, "peerDependencies": { - "typescript": ">=4.3.0" + "typescript": ">=4.2.0" } }, - "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/ts-command-line-args": { + "version": "2.5.1", "dev": true, + "license": "ISC", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" } }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/ts-command-line-args/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "node_modules/ts-command-line-args/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/ts-command-line-args/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "color-name": "~1.1.4" }, "engines": { - "node": "*" + "node": ">=7.0.0" } }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/ts-command-line-args/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/ts-command-line-args/node_modules/has-flag": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "node_modules/ts-command-line-args/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "node_modules/ts-essentials": { + "version": "7.0.3", "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "peerDependencies": { + "typescript": ">=3.7.0" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "node_modules/ts-node": { + "version": "10.9.2", "dev": true, + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "node_modules/ts-node/node_modules/acorn": { + "version": "8.12.1", + "dev": true, + "license": "MIT", "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "acorn": "bin/acorn" }, "engines": { - "node": ">=14.17" + "node": ">=0.4.0" } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=0.3.1" } }, - "node_modules/ufo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", - "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==", - "dev": true - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "node_modules/tsconfck": { + "version": "3.1.3", "dev": true, - "optional": true, + "license": "MIT", "bin": { - "uglifyjs": "bin/uglifyjs" + "tsconfck": "bin/tsconfck.js" }, "engines": { - "node": ">=0.8.0" + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + "node_modules/tsconfig": { + "resolved": "config/tsconfig", + "link": true }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "node_modules/tslib": { + "version": "2.4.0", + "license": "0BSD" + }, + "node_modules/tsort": { + "version": "0.0.1", "dev": true, + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "license": "Apache-2.0", "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "safe-buffer": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "*" } }, - "node_modules/unbuild": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unbuild/-/unbuild-2.0.0.tgz", - "integrity": "sha512-JWCUYx3Oxdzvw2J9kTAp+DKE8df/BnH/JTSj6JyA4SH40ECdFu7FoJJcrm8G92B7TjofQ6GZGjJs50TRxoH6Wg==", + "node_modules/turbo": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.2.1.tgz", + "integrity": "sha512-clZFkh6U6NpsLKBVZYRjlZjRTfju1Z5STqvFVaOGu5443uM75alJe1nCYH9pQ9YJoiOvXAqA2rDHWN5kLS9JMg==", "dev": true, - "dependencies": { - "@rollup/plugin-alias": "^5.0.0", - "@rollup/plugin-commonjs": "^25.0.4", - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.2.1", - "@rollup/plugin-replace": "^5.0.2", - "@rollup/pluginutils": "^5.0.3", - "chalk": "^5.3.0", - "citty": "^0.1.2", - "consola": "^3.2.3", - "defu": "^6.1.2", - "esbuild": "^0.19.2", - "globby": "^13.2.2", - "hookable": "^5.5.3", - "jiti": "^1.19.3", - "magic-string": "^0.30.3", - "mkdist": "^1.3.0", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "pretty-bytes": "^6.1.1", - "rollup": "^3.28.1", - "rollup-plugin-dts": "^6.0.0", - "scule": "^1.0.0", - "untyped": "^1.4.0" - }, "bin": { - "unbuild": "dist/cli.mjs" - }, - "peerDependencies": { - "typescript": "^5.1.6" + "turbo": "bin/turbo" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "optionalDependencies": { + "turbo-darwin-64": "2.2.1", + "turbo-darwin-arm64": "2.2.1", + "turbo-linux-64": "2.2.1", + "turbo-linux-arm64": "2.2.1", + "turbo-windows-64": "2.2.1", + "turbo-windows-arm64": "2.2.1" } }, - "node_modules/unbuild/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "node_modules/turbo-darwin-64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.2.1.tgz", + "integrity": "sha512-jltMdSQ+7rQDVaorjW729PCw6fwAn1MgZSdoa0Gil7GZCOF3SnR/ok0uJw6G5mdm6F5XM8ZTlz+mdGzBLuBRaA==", "cpu": [ - "arm" + "x64" ], "dev": true, "optional": true, "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "darwin" + ] }, - "node_modules/unbuild/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "node_modules/turbo-darwin-arm64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.2.1.tgz", + "integrity": "sha512-RHW0c1NonsJXXlutlZeunmhLanf0/WbeizFfYgWuTEaJE4MbbhyD/RG4Fm/7iob5kxQ4Es2TzfDPqyMqpIO0GA==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "darwin" + ] }, - "node_modules/unbuild/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "node_modules/turbo-linux-64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.2.1.tgz", + "integrity": "sha512-RasrjV+i2B90hoR8r6B2Btf2/ebNT5MJbhkpY0G1EN06E1IkjCKfAXj/1Dwmjy9+Zo0NC2r69L3HxRrtpar8jQ==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "linux" + ] }, - "node_modules/unbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "node_modules/turbo-linux-arm64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.2.1.tgz", + "integrity": "sha512-LNkUUJuu1gNkhlo7Ky/zilXEiajLoGlWLiKT1XV5neEf+x1s+aU9Hzd/+HhSVMiyI8l7z6zLbrM1a6+v4co/SQ==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } + "linux" + ] }, - "node_modules/unbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "node_modules/turbo-windows-64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.2.1.tgz", + "integrity": "sha512-Mn5tlFrLzlQ6tW6wTWNlyT1osXuDUg0VT1VAjRpmRXlK2Zi3oKVVG0rs0nkkq4rmuheryD1xyuGPN9nFKbAn/A==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } + "win32" + ] }, - "node_modules/unbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "node_modules/turbo-windows-arm64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.2.1.tgz", + "integrity": "sha512-bvYOJ3SMN00yiem+uAqwRMbUMau/KiMzJYxnD0YkFo6INc08z8gZi5g0GLZAR7g/L3JegktX3UQW2cJvryjvLg==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "freebsd" - ], + "win32" + ] + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "license": "Unlicense" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "license": "Unlicense" + }, + "node_modules/type": { + "version": "2.7.3", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, "engines": { - "node": ">=12" + "node": ">= 0.8.0" } }, - "node_modules/unbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], + "node_modules/type-detect": { + "version": "4.1.0", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typechain": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=12" + "node": ">=6 <7 || >=8" } }, - "node_modules/unbuild/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/unbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/unbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/unbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/unbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 4.0.0" } }, - "node_modules/unbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], + "node_modules/typed-array-buffer": { + "version": "1.0.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/unbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], + "node_modules/typed-array-byte-length": { + "version": "1.0.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unbuild/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], + "node_modules/typed-array-length": { + "version": "1.0.6", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], + "node_modules/typedarray": { + "version": "0.0.6", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" } }, - "node_modules/unbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "node_modules/typescript": { + "version": "5.5.4", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=12" + "node": ">=14.17" } }, - "node_modules/unbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], + "node_modules/typical": { + "version": "4.0.0", "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/unbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], + "node_modules/ufo": { + "version": "1.5.4", + "dev": true, + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "3.19.3", "dev": true, + "license": "BSD-2-Clause", "optional": true, - "os": [ - "win32" - ], + "bin": { + "uglifyjs": "bin/uglifyjs" + }, "engines": { - "node": ">=12" + "node": ">=0.8.0" } }, - "node_modules/unbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], + "node_modules/ultron": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbuild": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-alias": "^5.0.0", + "@rollup/plugin-commonjs": "^25.0.4", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.2.1", + "@rollup/plugin-replace": "^5.0.2", + "@rollup/pluginutils": "^5.0.3", + "chalk": "^5.3.0", + "citty": "^0.1.2", + "consola": "^3.2.3", + "defu": "^6.1.2", + "esbuild": "^0.19.2", + "globby": "^13.2.2", + "hookable": "^5.5.3", + "jiti": "^1.19.3", + "magic-string": "^0.30.3", + "mkdist": "^1.3.0", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "pretty-bytes": "^6.1.1", + "rollup": "^3.28.1", + "rollup-plugin-dts": "^6.0.0", + "scule": "^1.0.0", + "untyped": "^1.4.0" + }, + "bin": { + "unbuild": "dist/cli.mjs" + }, + "peerDependencies": { + "typescript": "^5.1.6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/unbuild/node_modules/@esbuild/win32-x64": { + "node_modules/unbuild/node_modules/@esbuild/darwin-arm64": { "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ - "x64" + "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { "node": ">=12" @@ -20094,9 +17624,8 @@ }, "node_modules/unbuild/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -20106,10 +17635,9 @@ }, "node_modules/unbuild/node_modules/esbuild": { "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -20144,9 +17672,8 @@ }, "node_modules/unbuild/node_modules/globby": { "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, + "license": "MIT", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", @@ -20162,19 +17689,17 @@ } }, "node_modules/unbuild/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/unbuild/node_modules/slash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -20183,10 +17708,9 @@ } }, "node_modules/undici": { - "version": "5.28.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", - "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", + "version": "5.28.4", "dev": true, + "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -20195,15 +17719,13 @@ } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.19.8", + "license": "MIT" }, "node_modules/unique-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, + "license": "MIT", "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -20213,26 +17735,23 @@ }, "node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/untyped": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.4.2.tgz", - "integrity": "sha512-nC5q0DnPEPVURPhfPQLahhSTnemVtPzdx7ofiRxXpOB2SYnb3MfdU3DVGyJdS8Lx+tBWeAePO8BfU/3EgksM7Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.23.7", "@babel/standalone": "^7.23.8", @@ -20247,9 +17766,7 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", "funding": [ { "type": "opencollective", @@ -20264,9 +17781,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -20277,9 +17795,8 @@ }, "node_modules/update-check": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", - "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", "dev": true, + "license": "MIT", "dependencies": { "registry-auth-token": "3.3.2", "registry-url": "3.1.0" @@ -20287,37 +17804,32 @@ }, "node_modules/upper-case": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/upper-case-first": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==", "dev": true, + "license": "MIT", "dependencies": { "upper-case": "^1.1.1" } }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/url-set-query": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" + "license": "MIT" }, "node_modules/utf-8-validate": { "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-gyp-build": "^4.3.0" }, @@ -20327,13 +17839,11 @@ }, "node_modules/utf8": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + "license": "MIT" }, "node_modules/util": { "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -20344,79 +17854,66 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==" + "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "version": "5.0.1", "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/varint": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/verror": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "engines": [ "node >=0.6.0" ], + "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -20424,9 +17921,9 @@ } }, "node_modules/viem": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.8.9.tgz", - "integrity": "sha512-C9D4rlA95NY6MyO1d1JT/dTrP8iFdilBApJPPitLZOkpo2zkl4Oe3gMMXjUeOvsfnnO7kZI6TGxq5osHrVdM0Q==", + "version": "2.21.32", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.21.32.tgz", + "integrity": "sha512-2oXt5JNIb683oy7C8wuIJ/SeL3XtHVMEQpy1U2TA6WMnJQ4ScssRvyPwYLcaP6mKlrGXE/cR/V7ncWpvLUVPYQ==", "dev": true, "funding": [ { @@ -20435,14 +17932,15 @@ } ], "dependencies": { - "@adraffy/ens-normalize": "1.10.0", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@scure/bip32": "1.3.2", - "@scure/bip39": "1.2.1", - "abitype": "1.0.0", - "isows": "1.0.3", - "ws": "8.13.0" + "@adraffy/ens-normalize": "1.11.0", + "@noble/curves": "1.6.0", + "@noble/hashes": "1.5.0", + "@scure/bip32": "1.5.0", + "@scure/bip39": "1.4.0", + "abitype": "1.0.6", + "isows": "1.0.6", + "webauthn-p256": "0.0.10", + "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" @@ -20454,63 +17952,69 @@ } }, "node_modules/viem/node_modules/@adraffy/ens-normalize": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", - "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz", + "integrity": "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==", "dev": true }, - "node_modules/viem/node_modules/@scure/bip32": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", - "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", + "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", "dev": true, "dependencies": { - "@noble/curves": "~1.2.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.2" + "@noble/hashes": "1.5.0" + }, + "engines": { + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/viem/node_modules/@scure/bip39": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", - "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", "dev": true, - "dependencies": { - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" + "engines": { + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" } }, - "node_modules/viem/node_modules/abitype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.0.tgz", - "integrity": "sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==", + "node_modules/viem/node_modules/@scure/bip32": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.5.0.tgz", + "integrity": "sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/wevm" + "dependencies": { + "@noble/curves": "~1.6.0", + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.7" }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@scure/bip39": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.4.0.tgz", + "integrity": "sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==", + "dev": true, + "dependencies": { + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.8" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/viem/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "engines": { "node": ">=10.0.0" @@ -20529,15 +18033,14 @@ } }, "node_modules/vite": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", - "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", + "version": "5.4.3", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.35", - "rollup": "^4.2.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -20556,6 +18059,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -20573,6 +18077,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -20586,9 +18093,8 @@ }, "node_modules/vite-plugin-checker": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.5.6.tgz", - "integrity": "sha512-ftRyON0gORUHDxcDt2BErmsikKSkfvl1i2DoP6Jt2zDO9InfvM6tqO1RkXhSjkaXEhKPea6YOnhFaZxW3BzudQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "ansi-escapes": "^4.3.0", @@ -20649,37 +18155,35 @@ } }, "node_modules/vite-plugin-checker/node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/vite-plugin-checker/node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/vite-plugin-checker/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/vite-plugin-checker/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -20691,38 +18195,10 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/vite-plugin-checker/node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/vite-plugin-checker/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -20732,24 +18208,21 @@ }, "node_modules/vite-plugin-checker/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vite-plugin-checker/node_modules/commander": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/vite-plugin-checker/node_modules/fs-extra": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -20761,18 +18234,27 @@ }, "node_modules/vite-plugin-checker/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-checker/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, "node_modules/vite-tsconfig-paths": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz", - "integrity": "sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", @@ -20787,10 +18269,27 @@ } } }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -20805,9 +18304,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -20822,9 +18321,9 @@ } }, "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -20839,13 +18338,12 @@ } }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "version": "0.21.5", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -20854,11 +18352,11 @@ "engines": { "node": ">=12" } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -20873,9 +18371,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -20890,9 +18388,9 @@ } }, "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -20907,9 +18405,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -20924,9 +18422,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -20941,9 +18439,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -20958,9 +18456,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -20975,9 +18473,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -20992,9 +18490,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -21009,9 +18507,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -21026,9 +18524,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -21043,9 +18541,9 @@ } }, "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -21060,9 +18558,9 @@ } }, "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -21077,9 +18575,9 @@ } }, "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -21094,9 +18592,9 @@ } }, "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -21111,9 +18609,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -21128,9 +18626,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -21145,9 +18643,9 @@ } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -21162,11 +18660,10 @@ } }, "node_modules/vite/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "version": "0.21.5", "dev": true, "hasInstallScript": true, + "license": "MIT", "peer": true, "bin": { "esbuild": "bin/esbuild" @@ -21175,36 +18672,35 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/vite/node_modules/rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "version": "4.21.2", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/estree": "1.0.5" @@ -21217,36 +18713,37 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", "fsevents": "~2.3.2" } }, "node_modules/vscode-jsonrpc": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0 || >=10.0.0" } }, "node_modules/vscode-languageclient": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", "dev": true, + "license": "MIT", "dependencies": { "minimatch": "^3.0.4", "semver": "^7.3.4", @@ -21258,31 +18755,17 @@ }, "node_modules/vscode-languageclient/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/vscode-languageclient/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/vscode-languageclient/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -21291,13 +18774,9 @@ } }, "node_modules/vscode-languageclient/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.3", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -21305,17 +18784,10 @@ "node": ">=10" } }, - "node_modules/vscode-languageclient/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/vscode-languageserver": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", "dev": true, + "license": "MIT", "dependencies": { "vscode-languageserver-protocol": "3.16.0" }, @@ -21325,56 +18797,49 @@ }, "node_modules/vscode-languageserver-protocol": { "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", "dev": true, + "license": "MIT", "dependencies": { "vscode-jsonrpc": "6.0.0", "vscode-languageserver-types": "3.16.0" } }, "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", - "dev": true + "version": "1.0.12", + "dev": true, + "license": "MIT" }, "node_modules/vscode-languageserver-types": { "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vscode-uri": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wcwidth": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/web-streams-polyfill": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/web3": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.10.4.tgz", - "integrity": "sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA==", "dev": true, "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { "web3-bzz": "1.10.4", "web3-core": "1.10.4", @@ -21390,10 +18855,9 @@ }, "node_modules/web3-bzz": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.10.4.tgz", - "integrity": "sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw==", "dev": true, "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { "@types/node": "^12.12.6", "got": "12.1.0", @@ -21405,15 +18869,13 @@ }, "node_modules/web3-bzz/node_modules/@types/node": { "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/web3-core": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.10.4.tgz", - "integrity": "sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "@types/bn.js": "^5.1.1", "@types/node": "^12.12.6", @@ -21429,9 +18891,8 @@ }, "node_modules/web3-core-helpers": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz", - "integrity": "sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "web3-eth-iban": "1.10.4", "web3-utils": "1.10.4" @@ -21442,9 +18903,8 @@ }, "node_modules/web3-core-method": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.10.4.tgz", - "integrity": "sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "@ethersproject/transactions": "^5.6.2", "web3-core-helpers": "1.10.4", @@ -21458,9 +18918,8 @@ }, "node_modules/web3-core-promievent": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz", - "integrity": "sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "eventemitter3": "4.0.4" }, @@ -21470,9 +18929,8 @@ }, "node_modules/web3-core-requestmanager": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz", - "integrity": "sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "util": "^0.12.5", "web3-core-helpers": "1.10.4", @@ -21486,9 +18944,8 @@ }, "node_modules/web3-core-subscriptions": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz", - "integrity": "sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "eventemitter3": "4.0.4", "web3-core-helpers": "1.10.4" @@ -21499,15 +18956,13 @@ }, "node_modules/web3-core/node_modules/@types/node": { "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/web3-eth": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.10.4.tgz", - "integrity": "sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "web3-core": "1.10.4", "web3-core-helpers": "1.10.4", @@ -21528,9 +18983,8 @@ }, "node_modules/web3-eth-abi": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz", - "integrity": "sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "@ethersproject/abi": "^5.6.3", "web3-utils": "1.10.4" @@ -21541,9 +18995,8 @@ }, "node_modules/web3-eth-accounts": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.10.4.tgz", - "integrity": "sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "@ethereumjs/common": "2.6.5", "@ethereumjs/tx": "3.5.2", @@ -21562,15 +19015,13 @@ }, "node_modules/web3-eth-accounts/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/web3-eth-accounts/node_modules/eth-lib": { "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.6", "elliptic": "^6.4.0", @@ -21579,22 +19030,20 @@ }, "node_modules/web3-eth-accounts/node_modules/uuid": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/web3-eth-contract": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz", - "integrity": "sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "@types/bn.js": "^5.1.1", "web3-core": "1.10.4", @@ -21611,9 +19060,8 @@ }, "node_modules/web3-eth-ens": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.10.4.tgz", - "integrity": "sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "content-hash": "^2.5.2", "eth-ens-namehash": "2.0.8", @@ -21630,9 +19078,8 @@ }, "node_modules/web3-eth-iban": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz", - "integrity": "sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "bn.js": "^5.2.1", "web3-utils": "1.10.4" @@ -21643,9 +19090,8 @@ }, "node_modules/web3-eth-personal": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.10.4.tgz", - "integrity": "sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "@types/node": "^12.12.6", "web3-core": "1.10.4", @@ -21660,15 +19106,13 @@ }, "node_modules/web3-eth-personal/node_modules/@types/node": { "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/web3-net": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.10.4.tgz", - "integrity": "sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "web3-core": "1.10.4", "web3-core-method": "1.10.4", @@ -21680,8 +19124,7 @@ }, "node_modules/web3-provider-engine": { "version": "16.0.3", - "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-16.0.3.tgz", - "integrity": "sha512-Q3bKhGqLfMTdLvkd4TtkGYJHcoVQ82D1l8jTIwwuJp/sAp7VHnRYb9YJ14SW/69VMWoOhSpPLZV2tWb9V0WJoA==", + "license": "MIT", "dependencies": { "@ethereumjs/tx": "^3.3.0", "async": "^2.5.0", @@ -21712,29 +19155,25 @@ }, "node_modules/web3-provider-engine/node_modules/async": { "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/web3-provider-engine/node_modules/bn.js": { "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "license": "MIT" }, "node_modules/web3-provider-engine/node_modules/clone": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/web3-provider-engine/node_modules/cross-fetch": { "version": "2.2.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", - "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", + "license": "MIT", "dependencies": { "node-fetch": "^2.6.7", "whatwg-fetch": "^2.0.4" @@ -21742,8 +19181,7 @@ }, "node_modules/web3-provider-engine/node_modules/ethereumjs-util": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "license": "MPL-2.0", "dependencies": { "bn.js": "^4.11.0", "create-hash": "^1.1.2", @@ -21756,13 +19194,11 @@ }, "node_modules/web3-provider-engine/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "license": "MIT" }, "node_modules/web3-provider-engine/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -21775,30 +19211,26 @@ }, "node_modules/web3-provider-engine/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "license": "MIT" }, "node_modules/web3-provider-engine/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/web3-provider-engine/node_modules/ws": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", - "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", + "version": "5.2.4", + "license": "MIT", "dependencies": { "async-limiter": "~1.0.0" } }, "node_modules/web3-providers-http": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.10.4.tgz", - "integrity": "sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "abortcontroller-polyfill": "^1.7.5", "cross-fetch": "^4.0.0", @@ -21811,9 +19243,8 @@ }, "node_modules/web3-providers-ipc": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz", - "integrity": "sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "oboe": "2.1.5", "web3-core-helpers": "1.10.4" @@ -21824,9 +19255,8 @@ }, "node_modules/web3-providers-ws": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz", - "integrity": "sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "eventemitter3": "4.0.4", "web3-core-helpers": "1.10.4", @@ -21838,10 +19268,9 @@ }, "node_modules/web3-shh": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.10.4.tgz", - "integrity": "sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw==", "dev": true, "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { "web3-core": "1.10.4", "web3-core-method": "1.10.4", @@ -21854,9 +19283,8 @@ }, "node_modules/web3-utils": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", - "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", "dev": true, + "license": "LGPL-3.0", "dependencies": { "@ethereumjs/util": "^8.1.0", "bn.js": "^5.2.1", @@ -21872,22 +19300,20 @@ } }, "node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "version": "1.4.2", "dev": true, + "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.3" + "@noble/hashes": "1.4.0" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "version": "1.4.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 16" }, @@ -21896,39 +19322,78 @@ } }, "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/webauthn-p256": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/webauthn-p256/-/webauthn-p256-0.0.10.tgz", + "integrity": "sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@noble/curves": "^1.4.0", + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/webauthn-p256/node_modules/@noble/curves": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", + "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", "dev": true, "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" + "@noble/hashes": "1.5.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/webauthn-p256/node_modules/@noble/hashes": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", + "dev": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "license": "BSD-2-Clause" }, "node_modules/webpod": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/webpod/-/webpod-0.0.2.tgz", - "integrity": "sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==", "dev": true, + "license": "MIT", "bin": { "webpod": "dist/index.js" } }, "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "version": "1.0.35", + "license": "Apache-2.0", "dependencies": { "bufferutil": "^4.0.1", "debug": "^2.2.0", - "es5-ext": "^0.10.50", + "es5-ext": "^0.10.63", "typedarray-to-buffer": "^3.1.5", "utf-8-validate": "^5.0.2", "yaeti": "^0.0.6" @@ -21939,26 +19404,22 @@ }, "node_modules/websocket/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/websocket/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, "node_modules/whatwg-fetch": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "license": "MIT" }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -21966,8 +19427,7 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -21980,9 +19440,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -21996,14 +19455,12 @@ }, "node_modules/which-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -22020,9 +19477,8 @@ }, "node_modules/widest-line": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.0.0" }, @@ -22032,25 +19488,20 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wordwrapjs": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, + "license": "MIT", "dependencies": { "reduce-flatten": "^2.0.0", "typical": "^5.2.0" @@ -22061,24 +19512,21 @@ }, "node_modules/wordwrapjs/node_modules/typical": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "version": "6.5.1", + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -22093,9 +19541,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -22108,9 +19555,8 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -22120,19 +19566,16 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "license": "ISC" }, "node_modules/ws": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "license": "MIT", "dependencies": { "async-limiter": "~1.0.0", "safe-buffer": "~5.1.0", @@ -22141,13 +19584,11 @@ }, "node_modules/ws/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "license": "MIT" }, "node_modules/xhr": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "license": "MIT", "dependencies": { "global": "~4.4.0", "is-function": "^1.0.1", @@ -22157,8 +19598,7 @@ }, "node_modules/xhr-request": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "license": "MIT", "dependencies": { "buffer-to-arraybuffer": "^0.0.5", "object-assign": "^4.1.1", @@ -22171,44 +19611,38 @@ }, "node_modules/xhr-request-promise": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "license": "MIT", "dependencies": { "xhr-request": "^1.1.0" } }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yaeti": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "license": "MIT", "engines": { "node": ">=0.10.32" } }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "license": "ISC" }, "node_modules/yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "version": "2.5.1", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -22218,9 +19652,8 @@ }, "node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -22239,19 +19672,17 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "20.2.9", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -22264,9 +19695,8 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -22276,18 +19706,16 @@ }, "node_modules/yargs/node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -22298,9 +19726,8 @@ }, "node_modules/yargs/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -22310,9 +19737,8 @@ }, "node_modules/yargs/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -22325,9 +19751,8 @@ }, "node_modules/yargs/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -22337,27 +19762,24 @@ }, "node_modules/yargs/node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/yargs/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -22368,18 +19790,16 @@ }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -22388,9 +19808,9 @@ } }, "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "dev": true, "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -22398,9 +19818,8 @@ }, "node_modules/zx": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/zx/-/zx-7.2.3.tgz", - "integrity": "sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@types/fs-extra": "^11.0.1", "@types/minimist": "^1.2.2", @@ -22426,19 +19845,17 @@ } }, "node_modules/zx/node_modules/@types/node": { - "version": "18.19.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.24.tgz", - "integrity": "sha512-eghAz3gnbQbvnHqB+mgB2ZR3aH6RhdEmHGS48BnV75KceQPHqabkxKI0BbUSsqhqy2Ddhc2xD/VAR9ySZd57Lw==", + "version": "18.19.49", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/zx/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -22448,18 +19865,16 @@ }, "node_modules/zx/node_modules/data-uri-to-buffer": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/zx/node_modules/fs-extra": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -22471,9 +19886,8 @@ }, "node_modules/zx/node_modules/globby": { "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, + "license": "MIT", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.3.0", @@ -22489,19 +19903,17 @@ } }, "node_modules/zx/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/zx/node_modules/node-fetch": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", "dev": true, + "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -22517,9 +19929,8 @@ }, "node_modules/zx/node_modules/slash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -22527,11 +19938,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zx/node_modules/undici-types": { + "version": "5.26.5", + "dev": true, + "license": "MIT" + }, "node_modules/zx/node_modules/which": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -22544,67 +19959,68 @@ }, "packages/lsp-smart-contracts": { "name": "@lukso/lsp-smart-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@lukso/lsp0-contracts": "~0.15.0-rc.5", - "@lukso/lsp1-contracts": "~0.15.0-rc.5", - "@lukso/lsp10-contracts": "~0.15.0-rc.5", - "@lukso/lsp12-contracts": "~0.15.0-rc.5", - "@lukso/lsp14-contracts": "~0.15.0-rc.5", - "@lukso/lsp16-contracts": "~0.15.0-rc.5", - "@lukso/lsp17-contracts": "~0.15.0-rc.5", - "@lukso/lsp17contractextension-contracts": "~0.15.0-rc.5", - "@lukso/lsp1delegate-contracts": "~0.15.0-rc.5", - "@lukso/lsp2-contracts": "~0.15.0-rc.5", - "@lukso/lsp20-contracts": "~0.15.0-rc.5", - "@lukso/lsp23-contracts": "~0.15.0-rc.5", - "@lukso/lsp25-contracts": "~0.15.0-rc.5", - "@lukso/lsp3-contracts": "~0.15.0-rc.5", - "@lukso/lsp4-contracts": "~0.15.0-rc.5", - "@lukso/lsp5-contracts": "~0.15.0-rc.5", - "@lukso/lsp6-contracts": "~0.15.0-rc.5", - "@lukso/lsp7-contracts": "~0.15.0-rc.5", - "@lukso/lsp8-contracts": "~0.15.0-rc.5", - "@lukso/lsp9-contracts": "~0.15.0-rc.5", - "@lukso/universalprofile-contracts": "~0.15.0-rc.5" + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp10-contracts": "~0.15.0", + "@lukso/lsp12-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp16-contracts": "~0.15.0", + "@lukso/lsp17-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp1delegate-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp23-contracts": "~0.15.0", + "@lukso/lsp25-contracts": "~0.15.0", + "@lukso/lsp3-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", + "@lukso/lsp5-contracts": "~0.15.0", + "@lukso/lsp6-contracts": "~0.15.0", + "@lukso/lsp7-contracts": "~0.15.0", + "@lukso/lsp8-contracts": "~0.15.0", + "@lukso/lsp9-contracts": "~0.15.0", + "@lukso/universalprofile-contracts": "~0.15.0" } }, "packages/lsp0-contracts": { "name": "@lukso/lsp0-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0-rc.5", - "@lukso/lsp14-contracts": "~0.15.0-rc.5", - "@lukso/lsp17contractextension-contracts": "~0.15.0-rc.5", - "@lukso/lsp2-contracts": "~0.15.0-rc.5", - "@lukso/lsp20-contracts": "~0.15.0-rc.5", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp1-contracts": { "name": "@lukso/lsp1-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0-rc.5", + "@lukso/lsp2-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp10-contracts": { "name": "@lukso/lsp10-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^6.0.0", - "@lukso/lsp2-contracts": "~0.15.0-rc.5" + "@lukso/lsp2-contracts": "~0.15.0" } }, "packages/lsp10-contracts/node_modules/@erc725/smart-contracts": { "version": "6.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-6.0.0.tgz", + "integrity": "sha512-6okutGGL9xbg/MSgAof2FU1UcSNE/z3p9TORlROVGaM3gi1A6FQQ7fDqtBYkPtvHureX8yS9gP7xPt3PRbP43Q==", "dependencies": { "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/contracts-upgradeable": "^4.9.3", @@ -22621,34 +20037,26 @@ "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp11-contracts/node_modules/@lukso/lsp25-contracts": { - "version": "0.15.0-rc.4", - "resolved": "https://registry.npmjs.org/@lukso/lsp25-contracts/-/lsp25-contracts-0.15.0-rc.4.tgz", - "integrity": "sha512-Wk7wmpkri1INyfmhlLW0e7TzU9fqVa1Ok+3OIlrYtsCjv2zebDNryPTRb2erfySwCISOYRfKGRApzLeMpmWvnQ==", - "dependencies": { - "@openzeppelin/contracts": "^4.9.3" - } - }, "packages/lsp12-contracts": { "name": "@lukso/lsp12-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0-rc.5" + "@lukso/lsp2-contracts": "~0.15.0" } }, "packages/lsp14-contracts": { "name": "@lukso/lsp14-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0-rc.5" + "@lukso/lsp1-contracts": "~0.15.0" } }, "packages/lsp16-contracts": { "name": "@lukso/lsp16-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", @@ -22658,21 +20066,21 @@ }, "packages/lsp17-contracts": { "name": "@lukso/lsp17-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@account-abstraction/contracts": "^0.6.0", "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp14-contracts": "~0.15.0-rc.5", - "@lukso/lsp17contractextension-contracts": "~0.15.0-rc.5", - "@lukso/lsp20-contracts": "~0.15.0-rc.5", - "@lukso/lsp6-contracts": "~0.15.0-rc.5", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp6-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp17contractextension-contracts": { "name": "@lukso/lsp17contractextension-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", @@ -22681,22 +20089,22 @@ }, "packages/lsp1delegate-contracts": { "name": "@lukso/lsp1delegate-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0-rc.5", - "@lukso/lsp10-contracts": "~0.15.0-rc.5", - "@lukso/lsp5-contracts": "~0.15.0-rc.5", - "@lukso/lsp7-contracts": "~0.15.0-rc.5", - "@lukso/lsp8-contracts": "~0.15.0-rc.5", - "@lukso/lsp9-contracts": "~0.15.0-rc.5", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp10-contracts": "~0.15.0", + "@lukso/lsp5-contracts": "~0.15.0", + "@lukso/lsp7-contracts": "~0.15.0", + "@lukso/lsp8-contracts": "~0.15.0", + "@lukso/lsp9-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp2-contracts": { "name": "@lukso/lsp2-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", @@ -22705,115 +20113,152 @@ }, "packages/lsp20-contracts": { "name": "@lukso/lsp20-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0" }, "packages/lsp23-contracts": { "name": "@lukso/lsp23-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/universalprofile-contracts": "~0.15.0-rc.5", + "@lukso/universalprofile-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp25-contracts": { "name": "@lukso/lsp25-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", + "license": "Apache-2.0", + "dependencies": { + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp26-contracts": { + "name": "@lukso/lsp26-contracts", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { + "@lukso/lsp0-contracts": "*", + "@lukso/lsp1-contracts": "*", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp3-contracts": { "name": "@lukso/lsp3-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0-rc.5" + "@lukso/lsp2-contracts": "~0.15.0" } }, "packages/lsp4-contracts": { "name": "@lukso/lsp4-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0-rc.5" + "@lukso/lsp2-contracts": "~0.15.0" + } + }, + "packages/lsp4-contracts/node_modules/@erc725/smart-contracts": { + "version": "8.0.0", + "license": "Apache-2.0", + "dependencies": { + "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts-upgradeable": "^4.9.6", + "solidity-bytes-utils": "0.8.0" } }, "packages/lsp5-contracts": { "name": "@lukso/lsp5-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0-rc.5" + "@lukso/lsp2-contracts": "~0.15.0" } }, "packages/lsp6-contracts": { "name": "@lukso/lsp6-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0-rc.5", - "@lukso/lsp14-contracts": "~0.15.0-rc.5", - "@lukso/lsp17contractextension-contracts": "~0.15.0-rc.5", - "@lukso/lsp2-contracts": "~0.15.0-rc.5", - "@lukso/lsp20-contracts": "~0.15.0-rc.5", - "@lukso/lsp25-contracts": "~0.15.0-rc.5", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp25-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp7-contracts": { "name": "@lukso/lsp7-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0-rc.5", - "@lukso/lsp17contractextension-contracts": "~0.15.0-rc.5", - "@lukso/lsp2-contracts": "~0.15.0-rc.5", - "@lukso/lsp4-contracts": "~0.15.0-rc.5", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, + "packages/lsp7-contracts/node_modules/@erc725/smart-contracts": { + "version": "8.0.0", + "license": "Apache-2.0", + "dependencies": { + "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts-upgradeable": "^4.9.6", + "solidity-bytes-utils": "0.8.0" + } + }, "packages/lsp8-contracts": { "name": "@lukso/lsp8-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0-rc.5", - "@lukso/lsp17contractextension-contracts": "~0.15.0-rc.5", - "@lukso/lsp2-contracts": "~0.15.0-rc.5", - "@lukso/lsp4-contracts": "~0.15.0-rc.5", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, + "packages/lsp8-contracts/node_modules/@erc725/smart-contracts": { + "version": "8.0.0", + "license": "Apache-2.0", + "dependencies": { + "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts-upgradeable": "^4.9.6", + "solidity-bytes-utils": "0.8.0" + } + }, "packages/lsp9-contracts": { "name": "@lukso/lsp9-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0-rc.5", - "@lukso/lsp6-contracts": "~0.15.0-rc.5", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp6-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, "packages/universalprofile-contracts": { "name": "@lukso/universalprofile-contracts", - "version": "0.15.0-rc.5", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp0-contracts": "~0.15.0-rc.5", - "@lukso/lsp3-contracts": "~0.15.0-rc.5", + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp3-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } } } -} +} \ No newline at end of file diff --git a/packages/lsp26-contracts/.eslintrc.js b/packages/lsp26-contracts/.eslintrc.js new file mode 100644 index 000000000..03ee7431b --- /dev/null +++ b/packages/lsp26-contracts/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['custom'], +}; diff --git a/packages/lsp26-contracts/.solhint.json b/packages/lsp26-contracts/.solhint.json new file mode 100644 index 000000000..26e01c48a --- /dev/null +++ b/packages/lsp26-contracts/.solhint.json @@ -0,0 +1,25 @@ +{ + "extends": "solhint:recommended", + "rules": { + "avoid-sha3": "error", + "avoid-suicide": "error", + "avoid-throw": "error", + "avoid-tx-origin": "error", + "check-send-result": "error", + "compiler-version": ["error", "^0.8.0"], + "func-visibility": ["error", { "ignoreConstructors": true }], + "not-rely-on-block-hash": "error", + "not-rely-on-time": "error", + "reentrancy": "error", + "constructor-syntax": "error", + "private-vars-leading-underscore": ["error", { "strict": false }], + "imports-on-top": "error", + "visibility-modifier-order": "error", + "no-unused-import": "error", + "no-global-import": "error", + "reason-string": ["warn", { "maxLength": 120 }], + "avoid-low-level-calls": "off", + "no-empty-blocks": ["error", { "ignoreConstructors": true }], + "custom-errors": "off" + } +} diff --git a/packages/lsp26-contracts/README.md b/packages/lsp26-contracts/README.md new file mode 100644 index 000000000..44c90d86b --- /dev/null +++ b/packages/lsp26-contracts/README.md @@ -0,0 +1,51 @@ +# LSP Package Template + +This project can be used as a skeleton to build a package for a LSP implementation in Solidity (LUKSO Standard Proposal) + +It is based on Hardhat. + +## How to setup a LSP as a package? + +1. Copy the `template/` folder and paste it under the `packages/` folder. Then rename this `template/` folder that you copied with the LSP name. + +You can do so either: + +- manually, by copying the folder and pasting it inside `packages` and then renaming it. + or +- by running the following command from the root of the repository. + +```bash +cp -r template packages/lsp-name +``` + +2. Update the `"name"` and `"description"` field inside the `package.json` for this LSP package you just created. + +3. Setup the dependencies + +If this LSP uses external dependencies like `@openzeppelin/contracts`, put them under `dependencies` with the version number. + +```json +"@openzeppelin/contracts": "^4.9.3" +``` + +If this LSP uses other LSP as dependencies, put each LSP dependency as shown below. This will use the current code in the package: + +```json +"@lsp2": "*" +``` + +4. Setup the npm commands for linting, building, testing, etc... under the `"scripts"` in the `package.json` + +5. Test that all commands you setup run successfully + +By running the commands below, your LSP package should come up in the list of packages that Turbo is running this command for. + +```bash +turbo build +turbo lint +turbo lint:solidity +turbo test +turbo test:foundry +``` + +6. Finally update the relevant information in the `README.md` file in the folder of the newly created package, such as the title at the top, some description, etc... diff --git a/packages/lsp26-contracts/build.config.ts b/packages/lsp26-contracts/build.config.ts new file mode 100644 index 000000000..71798d1ff --- /dev/null +++ b/packages/lsp26-contracts/build.config.ts @@ -0,0 +1,9 @@ +import { defineBuildConfig } from 'unbuild'; + +export default defineBuildConfig({ + entries: ['./constants'], + declaration: 'compatible', // generate .d.ts files + rollup: { + emitCJS: true, + }, +}); diff --git a/packages/lsp26-contracts/constants.ts b/packages/lsp26-contracts/constants.ts new file mode 100644 index 000000000..7ae3bf471 --- /dev/null +++ b/packages/lsp26-contracts/constants.ts @@ -0,0 +1,4 @@ +// Define your constants to be exported here + +// example +export const LSPN_CONSTANT_VALUE = 123; diff --git a/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol b/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol new file mode 100644 index 000000000..0485eb5b3 --- /dev/null +++ b/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +interface ILSP26FollowingSystem { + event Follow(address follower, address addr); + event Unfollow(address unfollower, address addr); + + /// @notice Followed `addr`. + /// @custom:events {Follow} event when following someone. + /// @param addr The address of the user to start following. + function follow(address addr) external; + + /// @notice Unfollowed `addr`. + /// @custom:events {Unfollow} event when unfollowing someone. + /// @param addr The address of the user to stop following. + function unfollow(address addr) external; + + /// @notice Checks if `follower` is following `addr`. + /// @param follower The address of the follower to check. + /// @param addr The address of the user being followed. + /// @return True if `follower` is following `addr`, false otherwise. + function isFollowing( + address follower, + address addr + ) external view returns (bool); + + /// @notice Get the number of followers for `addr`. + /// @param addr The address of the user whose followers count is requested. + /// @return The number of followers of `addr`. + function followerCount(address addr) external view returns (uint256); + + /// @notice Get the number of users that `addr` is following. + /// @param addr The address of the follower whose following count is requested. + /// @return The number of users that `addr` is following. + function followingCount(address addr) external view returns (uint256); + + /// @notice Get a list of users followed by `addr` within a specified range. + /// @param addr The address of the follower whose followed users are requested. + /// @param startIndex The start index of the range (inclusive). + /// @param endIndex The end index of the range (exclusive). + /// @return An array of addresses representing the users followed by `addr`. + function getFollowingByIndex( + address addr, + uint256 startIndex, + uint256 endIndex + ) external view returns (address[] memory); + + /// @notice Get a list of users following `addr` within a specified range. + /// @param addr The address of the user whose followers are requested. + /// @param startIndex The start index of the range (inclusive). + /// @param endIndex The end index of the range (exclusive). + /// @return An array of addresses representing the users following `addr`. + function getFollowersByIndex( + address addr, + uint256 startIndex, + uint256 endIndex + ) external view returns (address[] memory); +} diff --git a/packages/lsp26-contracts/contracts/Imports.sol b/packages/lsp26-contracts/contracts/Imports.sol new file mode 100644 index 000000000..262912d42 --- /dev/null +++ b/packages/lsp26-contracts/contracts/Imports.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +// solhint-disable no-unused-import +import { + LSP0ERC725Account +} from "@lukso/lsp0-contracts/contracts/LSP0ERC725Account.sol"; diff --git a/packages/lsp26-contracts/contracts/LSP26Constants.sol b/packages/lsp26-contracts/contracts/LSP26Constants.sol new file mode 100644 index 000000000..41aa959a4 --- /dev/null +++ b/packages/lsp26-contracts/contracts/LSP26Constants.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +// keccak256('LSP26FollowerSystem_FollowNotification') +bytes32 constant _TYPEID_LSP26_FOLLOW = 0x71e02f9f05bcd5816ec4f3134aa2e5a916669537ec6c77fe66ea595fabc2d51a; + +// keccak256('LSP26FollowerSystem_UnfollowNotification') +bytes32 constant _TYPEID_LSP26_UNFOLLOW = 0x9d3c0b4012b69658977b099bdaa51eff0f0460f421fba96d15669506c00d1c4f; diff --git a/packages/lsp26-contracts/contracts/LSP26Errors.sol b/packages/lsp26-contracts/contracts/LSP26Errors.sol new file mode 100644 index 000000000..93c39e4aa --- /dev/null +++ b/packages/lsp26-contracts/contracts/LSP26Errors.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +error LSP26CannotSelfFollow(); + +error LSP26CannotSelfUnfollow(); + +error LSP26AlreadyFollowing(address addr); + +error LSP26NotFollowing(address addr); diff --git a/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol b/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol new file mode 100644 index 000000000..932bbd83d --- /dev/null +++ b/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +// interafces +import {ILSP26FollowingSystem} from "./ILSP26FollowingSystem.sol"; +import { + ILSP1UniversalReceiver +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; + +// libraries +import { + EnumerableSet +} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import { + ERC165Checker +} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; + +// constants +import { + _TYPEID_LSP26_FOLLOW, + _TYPEID_LSP26_UNFOLLOW +} from "./LSP26Constants.sol"; +import { + _INTERFACEID_LSP1 +} from "@lukso/lsp1-contracts/contracts/LSP1Constants.sol"; + +// errors +import { + LSP26CannotSelfFollow, + LSP26CannotSelfUnfollow, + LSP26AlreadyFollowing, + LSP26NotFollowing +} from "./LSP26Errors.sol"; + +contract LSP26FollowingSystem is ILSP26FollowingSystem { + using EnumerableSet for EnumerableSet.AddressSet; + using ERC165Checker for address; + + mapping(address => EnumerableSet.AddressSet) private _followersOf; + mapping(address => EnumerableSet.AddressSet) private _followingsOf; + + // @inheritdoc ILSP26FollowingSystem + function follow(address addr) public { + _follow(addr); + } + + // @inheritdoc ILSP26FollowingSystem + function followBatch(address[] memory addresses) public { + for (uint256 index = 0; index < addresses.length; index++) { + _follow(addresses[index]); + } + } + + // @inheritdoc ILSP26FollowingSystem + function unfollow(address addr) public { + if (msg.sender == addr) { + revert LSP26CannotSelfUnfollow(); + } + + if (!_followingsOf[msg.sender].contains(addr)) { + revert LSP26NotFollowing(addr); + } + + _followingsOf[msg.sender].add(addr); + _followersOf[addr].remove(msg.sender); + + if (addr.supportsERC165InterfaceUnchecked(_INTERFACEID_LSP1)) { + // solhint-disable no-empty-blocks + try + ILSP1UniversalReceiver(addr).universalReceiver( + _TYPEID_LSP26_UNFOLLOW, + abi.encodePacked(msg.sender) + ) + {} catch {} + // returns (bytes memory data) {} catch {} + } + + emit Unfollow(msg.sender, addr); + } + + // @inheritdoc ILSP26FollowingSystem + function isFollowing( + address follower, + address addr + ) public view returns (bool) { + return _followingsOf[follower].contains(addr); + } + + // @inheritdoc ILSP26FollowingSystem + function followerCount(address addr) public view returns (uint256) { + return _followersOf[addr].length(); + } + + // @inheritdoc ILSP26FollowingSystem + function followingCount(address addr) public view returns (uint256) { + return _followingsOf[addr].length(); + } + + // @inheritdoc ILSP26FollowingSystem + function getFollowingByIndex( + address addr, + uint256 startIndex, + uint256 endIndex + ) public view returns (address[] memory) { + address[] memory followings = new address[](endIndex - startIndex); + + for (uint256 index = 0; index < endIndex - startIndex; index++) { + followings[index] = _followingsOf[addr].at(startIndex + index); + } + + return followings; + } + + // @inheritdoc ILSP26FollowingSystem + function getFollowersByIndex( + address addr, + uint256 startIndex, + uint256 endIndex + ) public view returns (address[] memory) { + address[] memory followers = new address[](endIndex - startIndex); + + for (uint256 index = 0; index < endIndex - startIndex; index++) { + followers[index] = _followersOf[addr].at(startIndex + index); + } + + return followers; + } + + function _follow(address addr) internal { + if (msg.sender == addr) { + revert LSP26CannotSelfFollow(); + } + + if (_followingsOf[msg.sender].contains(addr)) { + revert LSP26AlreadyFollowing(addr); + } + + _followingsOf[msg.sender].add(addr); + _followersOf[addr].add(msg.sender); + + if (addr.supportsERC165InterfaceUnchecked(_INTERFACEID_LSP1)) { + // solhint-disable no-empty-blocks + try + ILSP1UniversalReceiver(addr).universalReceiver( + _TYPEID_LSP26_FOLLOW, + abi.encodePacked(msg.sender) + ) + {} catch {} + // returns (bytes memory data) {} catch {} + } + + emit Follow(msg.sender, addr); + } +} diff --git a/packages/lsp26-contracts/gasCost.json b/packages/lsp26-contracts/gasCost.json new file mode 100644 index 000000000..000832ffe --- /dev/null +++ b/packages/lsp26-contracts/gasCost.json @@ -0,0 +1,1120 @@ +{ + "followCost": 143167, + "unfollowCost": 35700, + "batchFollowCost": 1227152, + "executeBatchFollowCost": 1264096, + "followingGasCost": [ + 160255, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, 143155, + 143155 + ] +} diff --git a/packages/lsp26-contracts/hardhat.config.ts b/packages/lsp26-contracts/hardhat.config.ts new file mode 100644 index 000000000..80627f056 --- /dev/null +++ b/packages/lsp26-contracts/hardhat.config.ts @@ -0,0 +1,133 @@ +import { HardhatUserConfig } from 'hardhat/config'; +import { NetworkUserConfig } from 'hardhat/types'; +import { config as dotenvConfig } from 'dotenv'; +import { resolve } from 'path'; + +/** + * this package includes: + * - @nomiclabs/hardhat-ethers + * - @nomicfoundation/hardhat-chai-matchers + * - @nomicfoundation/hardhat-network-helpers + * - @nomiclabs/hardhat-etherscan + * - hardhat-gas-reporter (is this true? Why do we have it as a separate dependency?) + * - @typechain/hardhat + * - solidity-coverage + */ +import '@nomicfoundation/hardhat-toolbox'; + +// additional hardhat plugins +import 'hardhat-packager'; +import 'hardhat-contract-sizer'; +import 'hardhat-deploy'; +import { hexlify, randomBytes } from 'ethers'; + +// custom built hardhat plugins and scripts +// can be imported here (e.g: docs generation, gas benchmark, etc...) + +dotenvConfig({ path: resolve(__dirname, './.env') }); + +function getTestnetChainConfig(): NetworkUserConfig { + const config: NetworkUserConfig = { + live: true, + url: 'https://rpc.testnet.lukso.network', + chainId: 4201, + }; + + if (process.env.CONTRACT_VERIFICATION_TESTNET_PK !== undefined) { + config['accounts'] = [process.env.CONTRACT_VERIFICATION_TESTNET_PK]; + } + + return config; +} + +const config: HardhatUserConfig = { + defaultNetwork: 'hardhat', + networks: { + hardhat: { + live: false, + saveDeployments: false, + allowBlocksWithSameTimestamp: true, + accounts: new Array(10_100).fill('').map(() => ({ + privateKey: hexlify(randomBytes(32)), + balance: '1000000000000000000', + })), + }, + luksoTestnet: getTestnetChainConfig(), + }, + namedAccounts: { + owner: 0, + }, + // uncomment if the contracts from this LSP package must be deployed at deterministic + // // addresses across multiple chains + // deterministicDeployment: { + // luksoTestnet: { + // // Nick Factory. See https://github.com/Arachnid/deterministic-deployment-proxy + // factory: '0x4e59b44847b379578588920ca78fbf26c0b4956c', + // deployer: '0x3fab184622dc19b6109349b94811493bf2a45362', + // funding: '0x0000000000000000000000000000000000000000000000000000000000000000', + // signedTx: + // '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222', + // }, + // }, + etherscan: { + apiKey: 'no-api-key-needed', + customChains: [ + { + network: 'luksoTestnet', + chainId: 4201, + urls: { + apiURL: 'https://api.explorer.execution.testnet.lukso.network/api', + browserURL: 'https://explorer.execution.testnet.lukso.network/', + }, + }, + ], + }, + gasReporter: { + enabled: true, + currency: 'USD', + gasPrice: 21, + excludeContracts: ['Helpers/'], + src: './contracts', + showMethodSig: true, + }, + solidity: { + version: '0.8.17', + settings: { + optimizer: { + enabled: true, + /** + * Optimize for how many times you intend to run the code. + * Lower values will optimize more for initial deployment cost, higher + * values will optimize more for high-frequency usage. + * @see https://docs.soliditylang.org/en/v0.8.6/internals/optimizer.html#opcode-based-optimizer-module + */ + runs: 1000, + }, + outputSelection: { + '*': { + '*': ['storageLayout'], + }, + }, + }, + }, + packager: { + // What contracts to keep the artifacts and the bindings for. + contracts: [], + // Whether to include the TypeChain factories or not. + // If this is enabled, you need to run the TypeChain files through the TypeScript compiler before shipping to the registry. + includeFactories: true, + }, + paths: { + artifacts: 'artifacts', + tests: 'tests', + }, + typechain: { + outDir: 'types', + target: 'ethers-v6', + }, + mocha: { + timeout: 10000000, + }, +}; + +export default config; diff --git a/packages/lsp26-contracts/index.ts b/packages/lsp26-contracts/index.ts new file mode 100644 index 000000000..c94f80f84 --- /dev/null +++ b/packages/lsp26-contracts/index.ts @@ -0,0 +1 @@ +export * from './constants'; diff --git a/packages/lsp26-contracts/package.json b/packages/lsp26-contracts/package.json new file mode 100644 index 000000000..bf7832ff1 --- /dev/null +++ b/packages/lsp26-contracts/package.json @@ -0,0 +1,55 @@ +{ + "name": "@lukso/lsp26-contracts", + "version": "0.15.0", + "description": "Package for the LSP26 Following System standard", + "license": "Apache-2.0", + "author": "", + "main": "./dist/index.cjs", + "module": "./dist/index.mjs", + "typings": "./dist/index.d.ts", + "exports": { + ".": { + "require": "./dist/index.cjs", + "import": "./dist/index.mjs", + "types": "./dist/index.d.ts" + }, + "./artifacts/*": "./artifacts/*", + "./package.json": "./package.json" + }, + "keywords": [ + "LUKSO", + "LSP", + "Blockchain", + "Standards", + "Smart Contracts", + "Ethereum", + "EVM", + "Solidity" + ], + "files": [ + "contracts/**/*.sol", + "!contracts/Mocks/**/*.sol", + "artifacts/*.json", + "dist", + "types", + "!types/factories", + "./README.md" + ], + "scripts": { + "build": "hardhat compile --show-stack-traces", + "build:types": "npx wagmi generate", + "clean": "hardhat clean && rm -Rf dist/", + "format": "prettier --write .", + "lint": "eslint . --ext .ts,.js", + "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", + "test": "hardhat test --no-compile tests/*.test.ts", + "test:foundry": "FOUNDRY_PROFILE=lspN forge test --no-match-test Skip -vvv", + "test:coverage": "hardhat coverage", + "package": "hardhat prepare-package" + }, + "dependencies": { + "@openzeppelin/contracts": "^4.9.3", + "@lukso/lsp0-contracts": "*", + "@lukso/lsp1-contracts": "*" + } +} diff --git a/packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts b/packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts new file mode 100644 index 000000000..33c563232 --- /dev/null +++ b/packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts @@ -0,0 +1,178 @@ +import { expect } from 'chai'; +import { ethers } from 'hardhat'; +import { ContractTransactionResponse, getAddress, hexlify, randomBytes } from 'ethers'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { writeFileSync } from 'fs'; + +// constants +import { OPERATION_TYPES } from '@lukso/lsp0-contracts'; + +// types +import { + LSP26FollowingSystem, + LSP26FollowingSystem__factory, + LSP0ERC725Account, + LSP0ERC725Account__factory, +} from '../types'; + +describe('testing `LSP26FollowingSystem`', () => { + let context: { + followerSystem: LSP26FollowingSystem; + followerSystemAddress: string; + universalProfile: LSP0ERC725Account; + owner: SignerWithAddress; + singleFollowSigner: SignerWithAddress; + executeBatchFollowSigners: SignerWithAddress[]; + batchFollowSigners: SignerWithAddress[]; + multiFollowSigners: SignerWithAddress[]; + }; + + before(async () => { + const signers = await ethers.getSigners(); + const [owner, singleFollowSigner] = signers; + const followerSystem = await new LSP26FollowingSystem__factory(owner).deploy(); + const followerSystemAddress = await followerSystem.getAddress(); + const universalProfile = await new LSP0ERC725Account__factory(owner).deploy(owner.address); + + const executeBatchFollowSigners = signers.slice(2, 12); + const batchFollowSigners = signers.slice(12, 22); + const multiFollowSigners = signers.slice(22, 10_022); + + context = { + followerSystem, + followerSystemAddress, + universalProfile, + owner, + singleFollowSigner, + executeBatchFollowSigners, + batchFollowSigners, + multiFollowSigners, + }; + }); + + describe('testing `follow(address)`', () => { + it('should revert when following your own address', async () => { + await expect( + context.followerSystem.connect(context.owner).follow(context.owner.address), + ).to.be.revertedWithCustomError(context.followerSystem, 'LSP26CannotSelfFollow'); + }); + + it('should revert when following an address that is already followed', async () => { + const randomAddress = getAddress(hexlify(randomBytes(20))); + + await context.followerSystem.connect(context.owner).follow(randomAddress); + + await expect(context.followerSystem.connect(context.owner).follow(randomAddress)) + .to.be.revertedWithCustomError(context.followerSystem, 'LSP26AlreadyFollowing') + .withArgs(randomAddress); + }); + }); + + describe('testing `unfollow(address)`', () => { + it('should revert when unfollowing your own address', async () => { + await expect( + context.followerSystem.connect(context.owner).unfollow(context.owner.address), + ).to.be.revertedWithCustomError(context.followerSystem, 'LSP26CannotSelfUnfollow'); + }); + + it('should revert when unfollowing an address that is not followed', async () => { + const randomAddress = getAddress(hexlify(randomBytes(20))); + + await expect(context.followerSystem.connect(context.owner).unfollow(randomAddress)) + .to.be.revertedWithCustomError(context.followerSystem, 'LSP26NotFollowing') + .withArgs(randomAddress); + }); + }); + + describe('gas tests', () => { + const gasCostResult: { + followingGasCost?: number[]; + followCost?: number; + unfollowCost?: number; + batchFollowCost?: number; + executeBatchFollowCost?: number; + } = {}; + + after(() => { + writeFileSync('gasCost.json', JSON.stringify(gasCostResult)); + }); + + it('gas: testing follow', async () => { + const txResponse = await context.followerSystem + .connect(context.owner) + .follow(context.singleFollowSigner.address); + const txReceipt = await txResponse.wait(); + + gasCostResult.followCost = Number(txReceipt.gasUsed); + }); + + it('gas: testing unfollow', async () => { + const txResponse = await context.followerSystem + .connect(context.owner) + .unfollow(context.singleFollowSigner.address); + const txReceipt = await txResponse.wait(); + + gasCostResult.unfollowCost = Number(txReceipt.gasUsed); + }); + + it('gas: testing `followBatch`', async () => { + const followBatch = context.followerSystem.interface.encodeFunctionData('followBatch', [ + context.batchFollowSigners.map(({ address }) => address), + ]); + + const txResponse = (await context.universalProfile + .connect(context.owner) + .execute( + OPERATION_TYPES.CALL, + context.followerSystemAddress, + 0, + followBatch, + )) as ContractTransactionResponse; + const txReceipt = await txResponse.wait(); + + gasCostResult.batchFollowCost = Number(txReceipt.gasUsed); + }); + + it('gas: testing `executeBatchFollow`', async () => { + const follows = context.executeBatchFollowSigners.map(({ address }) => + context.followerSystem.interface.encodeFunctionData('follow', [address]), + ); + + const txResponse = (await context.universalProfile.connect(context.owner).executeBatch( + follows.map(() => OPERATION_TYPES.CALL), + follows.map(() => context.followerSystemAddress), + follows.map(() => 0), + follows, + )) as ContractTransactionResponse; + const txReceipt = await txResponse.wait(); + + gasCostResult.executeBatchFollowCost = Number(txReceipt.gasUsed); + }); + + describe('gas: testing following a single account 10_000 times', () => { + const followingGasCost: number[] = []; + + after(() => { + gasCostResult.followingGasCost = followingGasCost; + }); + + it(`testing signers`, async () => { + let count = 1; + + for (const signer of context.multiFollowSigners) { + if (count % 1000 === 0) { + console.log(`Testing signer #${count}`); + } + + const txResponse = await context.followerSystem + .connect(signer) + .follow(context.owner.address); + const txReceipt = await txResponse.wait(); + + followingGasCost.push(Number(txReceipt.gasUsed)); + count++; + } + }); + }); + }); +}); diff --git a/packages/lsp26-contracts/tsconfig.json b/packages/lsp26-contracts/tsconfig.json new file mode 100644 index 000000000..b7a34e03f --- /dev/null +++ b/packages/lsp26-contracts/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "tsconfig/contracts.json", + "include": ["**/*.ts"] +} diff --git a/packages/lsp26-contracts/wagmi.config.ts b/packages/lsp26-contracts/wagmi.config.ts new file mode 100644 index 000000000..9f838fb8d --- /dev/null +++ b/packages/lsp26-contracts/wagmi.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from '@wagmi/cli'; +import { react } from '@wagmi/cli/plugins'; +import fs from 'fs'; + +const artifacts = fs.readdirSync('./artifacts', {}); + +const contractsWagmiInputs = artifacts.map((artifact) => { + const jsonArtifact = JSON.parse(fs.readFileSync(`./artifacts/${artifact}`, 'utf-8')); + return { + name: jsonArtifact.contractName, + abi: jsonArtifact.abi, + }; +}); + +export default defineConfig({ + out: 'types/index.ts', + contracts: contractsWagmiInputs, + plugins: [react()], +}); diff --git a/template/package.json b/template/package.json index 806ae2641..d9439ca23 100644 --- a/template/package.json +++ b/template/package.json @@ -1,6 +1,6 @@ { "name": "lspN", - "version": "0.12.1", + "version": "0.15.0", "description": "Package for the LSPN standard", "license": "Apache-2.0", "author": "", From b4fe75df24e3be407a7f9c01c6bba6103d45af7c Mon Sep 17 00:00:00 2001 From: Fabian Vogelsteller Date: Wed, 3 Jul 2024 16:59:14 +0200 Subject: [PATCH 20/94] Update ILSP26FollowingSystem.sol --- .../contracts/ILSP26FollowingSystem.sol | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol b/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol index 0485eb5b3..7449c1d1b 100644 --- a/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol +++ b/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol @@ -5,51 +5,51 @@ interface ILSP26FollowingSystem { event Follow(address follower, address addr); event Unfollow(address unfollower, address addr); - /// @notice Followed `addr`. + /// @notice Follow an specific address. /// @custom:events {Follow} event when following someone. - /// @param addr The address of the user to start following. + /// @param addr The address to start following. function follow(address addr) external; - /// @notice Unfollowed `addr`. + /// @notice Unfollow a specific address. /// @custom:events {Unfollow} event when unfollowing someone. - /// @param addr The address of the user to stop following. + /// @param addr The address to stop following. function unfollow(address addr) external; - /// @notice Checks if `follower` is following `addr`. + /// @notice Checks if an address is following a specific address. /// @param follower The address of the follower to check. - /// @param addr The address of the user being followed. + /// @param addr The address being followed. /// @return True if `follower` is following `addr`, false otherwise. function isFollowing( address follower, address addr ) external view returns (bool); - /// @notice Get the number of followers for `addr`. - /// @param addr The address of the user whose followers count is requested. + /// @notice Get the number of followers for an address. + /// @param addr The address whose followers count is requested. /// @return The number of followers of `addr`. function followerCount(address addr) external view returns (uint256); - /// @notice Get the number of users that `addr` is following. - /// @param addr The address of the follower whose following count is requested. + /// @notice Get the number an address is following. + /// @param addr The address whose following count is requested. /// @return The number of users that `addr` is following. function followingCount(address addr) external view returns (uint256); - /// @notice Get a list of users followed by `addr` within a specified range. - /// @param addr The address of the follower whose followed users are requested. + /// @notice Get a list of addresses, the given address is following within a specified range. + /// @param addr The address whose followed addresses are requested. /// @param startIndex The start index of the range (inclusive). /// @param endIndex The end index of the range (exclusive). - /// @return An array of addresses representing the users followed by `addr`. - function getFollowingByIndex( + /// @return An array of addresses followed by the given address. + function getFollowsByIndex( address addr, uint256 startIndex, uint256 endIndex ) external view returns (address[] memory); - /// @notice Get a list of users following `addr` within a specified range. - /// @param addr The address of the user whose followers are requested. + /// @notice Get a list of addresses that follow an address within a specified range. + /// @param addr The address whose followers are requested. /// @param startIndex The start index of the range (inclusive). /// @param endIndex The end index of the range (exclusive). - /// @return An array of addresses representing the users following `addr`. + /// @return An array of addresses that are following an addresses. function getFollowersByIndex( address addr, uint256 startIndex, From 0d68019d699750d640b756fca2b0a91e8178eb39 Mon Sep 17 00:00:00 2001 From: b00ste Date: Wed, 31 Jul 2024 14:50:08 +0300 Subject: [PATCH 21/94] chore: interface & natspec updates --- .../contracts/ILSP26FollowingSystem.sol | 33 ++++++++--- .../contracts/LSP26FollowingSystem.sol | 55 +++++++++++-------- 2 files changed, 58 insertions(+), 30 deletions(-) diff --git a/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol b/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol index 7449c1d1b..ceed49ff2 100644 --- a/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol +++ b/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol @@ -2,20 +2,37 @@ pragma solidity ^0.8.17; interface ILSP26FollowingSystem { + /// @notice Emitted when following an address. + /// @param follower The address that follows `addr` + /// @param addr The address that is followed by `follower` event Follow(address follower, address addr); + + /// @notice Emitted when unfollowing an address. + /// @param unfollower The address that unfollows `addr` + /// @param addr The address that is unfollowed by `follower` event Unfollow(address unfollower, address addr); /// @notice Follow an specific address. - /// @custom:events {Follow} event when following someone. + /// @custom:events {Follow} event when following an address. /// @param addr The address to start following. function follow(address addr) external; + /// @notice Follow a list of addresses. + /// @custom:events {Follow} event when following each address in the list. + /// @param addresses The list of addresses to follow. + function followBatch(address[] memory addresses) external; + /// @notice Unfollow a specific address. - /// @custom:events {Unfollow} event when unfollowing someone. + /// @custom:events {Unfollow} event when unfollowing an address. /// @param addr The address to stop following. function unfollow(address addr) external; - /// @notice Checks if an address is following a specific address. + /// @notice Unfollow a list of addresses. + /// @custom:events {Follow} event when unfollowing each address in the list. + /// @param addresses The list of addresses to unfollow. + function unfollowBatch(address[] memory addresses) external; + + /// @notice Check if an address is following a specific address. /// @param follower The address of the follower to check. /// @param addr The address being followed. /// @return True if `follower` is following `addr`, false otherwise. @@ -29,12 +46,12 @@ interface ILSP26FollowingSystem { /// @return The number of followers of `addr`. function followerCount(address addr) external view returns (uint256); - /// @notice Get the number an address is following. - /// @param addr The address whose following count is requested. - /// @return The number of users that `addr` is following. + /// @notice Get the number of addresses an address is following. + /// @param addr The address of the follower whose following count is requested. + /// @return The number of addresses that `addr` is following. function followingCount(address addr) external view returns (uint256); - /// @notice Get a list of addresses, the given address is following within a specified range. + /// @notice Get the list of addresses the given address is following within a specified range. /// @param addr The address whose followed addresses are requested. /// @param startIndex The start index of the range (inclusive). /// @param endIndex The end index of the range (exclusive). @@ -45,7 +62,7 @@ interface ILSP26FollowingSystem { uint256 endIndex ) external view returns (address[] memory); - /// @notice Get a list of addresses that follow an address within a specified range. + /// @notice Get the list of addresses that follow an address within a specified range. /// @param addr The address whose followers are requested. /// @param startIndex The start index of the range (inclusive). /// @param endIndex The end index of the range (exclusive). diff --git a/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol b/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol index 932bbd83d..3ede7fa01 100644 --- a/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol +++ b/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol @@ -53,29 +53,14 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { // @inheritdoc ILSP26FollowingSystem function unfollow(address addr) public { - if (msg.sender == addr) { - revert LSP26CannotSelfUnfollow(); - } - - if (!_followingsOf[msg.sender].contains(addr)) { - revert LSP26NotFollowing(addr); - } - - _followingsOf[msg.sender].add(addr); - _followersOf[addr].remove(msg.sender); + _unfollow(addr); + } - if (addr.supportsERC165InterfaceUnchecked(_INTERFACEID_LSP1)) { - // solhint-disable no-empty-blocks - try - ILSP1UniversalReceiver(addr).universalReceiver( - _TYPEID_LSP26_UNFOLLOW, - abi.encodePacked(msg.sender) - ) - {} catch {} - // returns (bytes memory data) {} catch {} + // @inheritdoc ILSP26FollowingSystem + function unfollowBatch(address[] memory addresses) public { + for (uint256 index = 0; index < addresses.length; index++) { + _unfollow(addresses[index]); } - - emit Unfollow(msg.sender, addr); } // @inheritdoc ILSP26FollowingSystem @@ -97,7 +82,7 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { } // @inheritdoc ILSP26FollowingSystem - function getFollowingByIndex( + function getFollowsByIndex( address addr, uint256 startIndex, uint256 endIndex @@ -151,4 +136,30 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { emit Follow(msg.sender, addr); } + + function _unfollow(address addr) internal { + if (msg.sender == addr) { + revert LSP26CannotSelfUnfollow(); + } + + if (!_followingsOf[msg.sender].contains(addr)) { + revert LSP26NotFollowing(addr); + } + + _followingsOf[msg.sender].remove(addr); + _followersOf[addr].remove(msg.sender); + + if (addr.supportsERC165InterfaceUnchecked(_INTERFACEID_LSP1)) { + // solhint-disable no-empty-blocks + try + ILSP1UniversalReceiver(addr).universalReceiver( + _TYPEID_LSP26_UNFOLLOW, + abi.encodePacked(msg.sender) + ) + {} catch {} + // returns (bytes memory data) {} catch {} + } + + emit Unfollow(msg.sender, addr); + } } From 9b8d38ad9bf9bb38fe651992e0cc063ae451df6a Mon Sep 17 00:00:00 2001 From: b00ste Date: Fri, 2 Aug 2024 16:05:42 +0300 Subject: [PATCH 22/94] chore: update contracts, readme and tests --- .release-please-manifest.json | 1 + package-lock.json | 190 +++++++----------- package.json | 4 +- packages/lsp-smart-contracts/constants.ts | 4 + .../ILSP26FollowingSystem.sol | 4 + .../LSP26FollowerSystem/LSP26Constants.sol | 4 + .../LSP26FollowerSystem/LSP26Errors.sol | 4 + .../LSP26FollowingSystem.sol | 4 + .../contracts/Mocks/ERC165Interfaces.sol | 16 ++ packages/lsp-smart-contracts/package.json | 1 + .../tests/Mocks/ERC165Interfaces.test.ts | 5 + packages/lsp26-contracts/README.md | 50 +---- packages/lsp26-contracts/build.config.ts | 2 +- packages/lsp26-contracts/constants.ts | 11 +- .../contracts/ILSP26FollowingSystem.sol | 8 +- .../contracts/LSP26Constants.sol | 2 + .../lsp26-contracts/contracts/LSP26Errors.sol | 2 - .../contracts/LSP26FollowingSystem.sol | 41 ++-- .../contracts/mock/RevertOnFollow.sol | 20 ++ packages/lsp26-contracts/package.json | 2 +- .../tests/LSP26FollowingSystem.test.ts | 39 +++- template/build.config.ts | 2 +- 22 files changed, 218 insertions(+), 198 deletions(-) create mode 100644 packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowingSystem.sol create mode 100644 packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26Constants.sol create mode 100644 packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26Errors.sol create mode 100644 packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowingSystem.sol create mode 100644 packages/lsp26-contracts/contracts/mock/RevertOnFollow.sol diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 856d222d3..05a315756 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -20,5 +20,6 @@ "packages/lsp20-contracts": "0.15.0", "packages/lsp23-contracts": "0.15.0", "packages/lsp25-contracts": "0.15.0", + "packages/lsp26-contracts": "0.15.0", "packages/universalprofile-contracts": "0.15.0" } diff --git a/package-lock.json b/package-lock.json index 81d802ad7..f0f79924f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,8 +32,8 @@ "ethers": "^6.11.0", "hardhat": "^2.20.1", "hardhat-contract-sizer": "^2.8.0", - "hardhat-deploy": "^0.11.25", - "hardhat-deploy-ethers": "^0.4.1", + "hardhat-deploy": "^0.12.0", + "hardhat-deploy-ethers": "^0.4.2", "hardhat-gas-reporter": "^1.0.9", "hardhat-packager": "^1.4.2", "markdown-table-ts": "^1.0.3", @@ -9839,9 +9839,9 @@ } }, "node_modules/hardhat-deploy": { - "version": "0.11.45", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz", - "integrity": "sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.12.4.tgz", + "integrity": "sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.7.0", @@ -9867,7 +9867,7 @@ "match-all": "^1.2.6", "murmur-128": "^0.2.1", "qs": "^6.9.4", - "zksync-web3": "^0.14.3" + "zksync-ethers": "^5.0.0" } }, "node_modules/hardhat-deploy-ethers": { @@ -9927,6 +9927,8 @@ }, "node_modules/hardhat-deploy/node_modules/ethers": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "dev": true, "funding": [ { @@ -9938,7 +9940,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -9991,16 +9992,6 @@ "node": ">=8" } }, - "node_modules/hardhat-deploy/node_modules/zksync-web3": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.4.tgz", - "integrity": "sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==", - "deprecated": "This package has been deprecated in favor of zksync-ethers@5.0.0", - "dev": true, - "peerDependencies": { - "ethers": "^5.7.0" - } - }, "node_modules/hardhat-gas-reporter": { "version": "1.0.10", "dev": true, @@ -10032,105 +10023,6 @@ "typechain": "8.x" } }, - "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", - "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", - "dev": true, - "peer": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" - } - }, - "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", - "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", - "dev": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "^10.2.1", - "ethers": "^5.4.7", - "hardhat": "^2.9.9", - "typechain": "^8.1.1" - } - }, - "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hardhat-packager/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", "dev": true, @@ -19807,6 +19699,69 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zksync-ethers": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/zksync-ethers/-/zksync-ethers-5.9.2.tgz", + "integrity": "sha512-Y2Mx6ovvxO6UdC2dePLguVzvNToOY8iLWeq5ne+jgGSJxAi/f4He/NF6FNsf6x1aWX0o8dy4Df8RcOQXAkj5qw==", + "dev": true, + "dependencies": { + "ethers": "~5.7.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "ethers": "~5.7.0" + } + }, + "node_modules/zksync-ethers/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/zod": { "version": "3.23.8", "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", @@ -19975,6 +19930,7 @@ "@lukso/lsp20-contracts": "~0.15.0", "@lukso/lsp23-contracts": "~0.15.0", "@lukso/lsp25-contracts": "~0.15.0", + "@lukso/lsp26-contracts": "~0.15.0", "@lukso/lsp3-contracts": "~0.15.0", "@lukso/lsp4-contracts": "~0.15.0", "@lukso/lsp5-contracts": "~0.15.0", @@ -20261,4 +20217,4 @@ } } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 69694b701..fbeabf197 100644 --- a/package.json +++ b/package.json @@ -80,8 +80,8 @@ "ethers": "^6.11.0", "hardhat": "^2.20.1", "hardhat-contract-sizer": "^2.8.0", - "hardhat-deploy": "^0.11.25", - "hardhat-deploy-ethers": "^0.4.1", + "hardhat-deploy": "^0.12.0", + "hardhat-deploy-ethers": "^0.4.2", "hardhat-gas-reporter": "^1.0.9", "hardhat-packager": "^1.4.2", "markdown-table-ts": "^1.0.3", diff --git a/packages/lsp-smart-contracts/constants.ts b/packages/lsp-smart-contracts/constants.ts index 6e5e705f7..58933b61c 100644 --- a/packages/lsp-smart-contracts/constants.ts +++ b/packages/lsp-smart-contracts/constants.ts @@ -53,6 +53,7 @@ import { INTERFACE_ID_LSP20CallVerifier, } from '@lukso/lsp20-contracts'; import { INTERFACE_ID_LSP25 } from '@lukso/lsp25-contracts'; +import { INTERFACE_ID_LSP26 } from '@lukso/lsp26-contracts'; // LSP1 Type IDs of each LSP import { LSP0_TYPE_IDS } from '@lukso/lsp0-contracts'; @@ -60,6 +61,7 @@ import { LSP7_TYPE_IDS } from '@lukso/lsp7-contracts'; import { LSP8_TYPE_IDS } from '@lukso/lsp8-contracts'; import { LSP9_TYPE_IDS } from '@lukso/lsp9-contracts'; import { LSP14_TYPE_IDS } from '@lukso/lsp14-contracts'; +import { LSP26_TYPE_IDS } from '@lukso/lsp26-contracts'; // ERC725Y Data Keys of each LSP import { LSP1DataKeys } from '@lukso/lsp1-contracts'; @@ -117,6 +119,7 @@ export const INTERFACE_IDS = { LSP20CallVerifier: INTERFACE_ID_LSP20CallVerifier, LSP11BasicSocialRecovery: '0x049a28f1', LSP25ExecuteRelayCall: INTERFACE_ID_LSP25, + LSP26FollowingSystem: INTERFACE_ID_LSP26, }; // ERC725Y @@ -147,4 +150,5 @@ export const LSP1_TYPE_IDS = { ...LSP8_TYPE_IDS, ...LSP9_TYPE_IDS, ...LSP14_TYPE_IDS, + ...LSP26_TYPE_IDS, }; diff --git a/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowingSystem.sol b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowingSystem.sol new file mode 100644 index 000000000..12336b054 --- /dev/null +++ b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowingSystem.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +import "@lukso/lsp26-contracts/contracts/ILSP26FollowingSystem.sol"; diff --git a/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26Constants.sol b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26Constants.sol new file mode 100644 index 000000000..2c5643f61 --- /dev/null +++ b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26Constants.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +import "@lukso/lsp26-contracts/contracts/LSP26Constants.sol"; diff --git a/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26Errors.sol b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26Errors.sol new file mode 100644 index 000000000..17ca329c6 --- /dev/null +++ b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26Errors.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +import "@lukso/lsp26-contracts/contracts/LSP26Errors.sol"; diff --git a/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowingSystem.sol b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowingSystem.sol new file mode 100644 index 000000000..5412051ae --- /dev/null +++ b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowingSystem.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +import "@lukso/lsp26-contracts/contracts/LSP26FollowingSystem.sol"; diff --git a/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol b/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol index 9ef3ba1af..a37e2d72e 100644 --- a/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol +++ b/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol @@ -64,6 +64,9 @@ import { import { ILSP25ExecuteRelayCall as ILSP25 } from "@lukso/lsp25-contracts/contracts/ILSP25ExecuteRelayCall.sol"; +import { + ILSP26FollowingSystem as ILSP26 +} from "@lukso/lsp26-contracts/contracts/ILSP26FollowingSystem.sol"; // constants import { @@ -102,6 +105,9 @@ import { import { _INTERFACEID_LSP25 } from "@lukso/lsp25-contracts/contracts/LSP25Constants.sol"; +import { + _INTERFACEID_LSP26 +} from "@lukso/lsp26-contracts/contracts/LSP26Constants.sol"; // libraries import { @@ -302,6 +308,16 @@ contract CalculateLSPInterfaces { return interfaceId; } + + function calculateInterfaceLSP26() public pure returns (bytes4) { + bytes4 interfaceId = type(ILSP26).interfaceId; + require( + interfaceId == _INTERFACEID_LSP26, + "hardcoded _INTERFACEID_LSP26 does not match type(ILSP26).interfaceId" + ); + + return interfaceId; + } } /** diff --git a/packages/lsp-smart-contracts/package.json b/packages/lsp-smart-contracts/package.json index 99ff1fc80..b28f91f54 100644 --- a/packages/lsp-smart-contracts/package.json +++ b/packages/lsp-smart-contracts/package.json @@ -81,6 +81,7 @@ "@lukso/lsp20-contracts": "~0.15.0", "@lukso/lsp23-contracts": "~0.15.0", "@lukso/lsp25-contracts": "~0.15.0", + "@lukso/lsp26-contracts": "~0.15.0", "@lukso/lsp3-contracts": "~0.15.0", "@lukso/lsp4-contracts": "~0.15.0", "@lukso/lsp5-contracts": "~0.15.0", diff --git a/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts b/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts index 72d10f1d7..af31f2909 100644 --- a/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts +++ b/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts @@ -98,6 +98,11 @@ describe('Calculate LSP interfaces', () => { const result = await contract.calculateInterfaceLSP25ExecuteRelayCall(); expect(result).to.equal(INTERFACE_IDS.LSP25ExecuteRelayCall); }); + + it('LSP26FollowingSystem', async () => { + const result = await contract.calculateInterfaceLSP26(); + expect(result).to.equal(INTERFACE_IDS.LSP26FollowingSystem); + }); }); describe('Calculate ERC interfaces', () => { diff --git a/packages/lsp26-contracts/README.md b/packages/lsp26-contracts/README.md index 44c90d86b..1a17db82a 100644 --- a/packages/lsp26-contracts/README.md +++ b/packages/lsp26-contracts/README.md @@ -1,51 +1,17 @@ -# LSP Package Template +# LSP26 Following System · [![npm version](https://img.shields.io/npm/v/@lukso/lsp26-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp26-contracts) -This project can be used as a skeleton to build a package for a LSP implementation in Solidity (LUKSO Standard Proposal) +Package for the LSP26 Following System standard. -It is based on Hardhat. - -## How to setup a LSP as a package? - -1. Copy the `template/` folder and paste it under the `packages/` folder. Then rename this `template/` folder that you copied with the LSP name. - -You can do so either: - -- manually, by copying the folder and pasting it inside `packages` and then renaming it. - or -- by running the following command from the root of the repository. +## Installation ```bash -cp -r template packages/lsp-name +npm i @lukso/lsp26-contracts ``` -2. Update the `"name"` and `"description"` field inside the `package.json` for this LSP package you just created. - -3. Setup the dependencies - -If this LSP uses external dependencies like `@openzeppelin/contracts`, put them under `dependencies` with the version number. - -```json -"@openzeppelin/contracts": "^4.9.3" -``` +## Available Constants & Types -If this LSP uses other LSP as dependencies, put each LSP dependency as shown below. This will use the current code in the package: +The `@lukso/lsp26-contracts` npm package contains useful constants such as InterfaceIds, and specific constants related to the LSP26 Standard. You can import and access them as follow: -```json -"@lsp2": "*" +```js +import { INTERFACE_ID_LSP26, LSP26_TYPE_IDS } from "@lukso/lsp26-contracts"; ``` - -4. Setup the npm commands for linting, building, testing, etc... under the `"scripts"` in the `package.json` - -5. Test that all commands you setup run successfully - -By running the commands below, your LSP package should come up in the list of packages that Turbo is running this command for. - -```bash -turbo build -turbo lint -turbo lint:solidity -turbo test -turbo test:foundry -``` - -6. Finally update the relevant information in the `README.md` file in the folder of the newly created package, such as the title at the top, some description, etc... diff --git a/packages/lsp26-contracts/build.config.ts b/packages/lsp26-contracts/build.config.ts index 71798d1ff..dc4f36906 100644 --- a/packages/lsp26-contracts/build.config.ts +++ b/packages/lsp26-contracts/build.config.ts @@ -1,7 +1,7 @@ import { defineBuildConfig } from 'unbuild'; export default defineBuildConfig({ - entries: ['./constants'], + entries: ['./index'], declaration: 'compatible', // generate .d.ts files rollup: { emitCJS: true, diff --git a/packages/lsp26-contracts/constants.ts b/packages/lsp26-contracts/constants.ts index 7ae3bf471..fe11d89bf 100644 --- a/packages/lsp26-contracts/constants.ts +++ b/packages/lsp26-contracts/constants.ts @@ -1,4 +1,9 @@ -// Define your constants to be exported here +export const INTERFACE_ID_LSP26 = '0x2b299cea'; -// example -export const LSPN_CONSTANT_VALUE = 123; +export const LSP26_TYPE_IDS = { + // keccak256('LSP26FollowerSystem_FollowNotification') + _TYPEID_LSP26_FOLLOW: '0x71e02f9f05bcd5816ec4f3134aa2e5a916669537ec6c77fe66ea595fabc2d51a', + + // keccak256('LSP26FollowerSystem_UnfollowNotification') + _TYPEID_LSP26_UNFOLLOW: '0x9d3c0b4012b69658977b099bdaa51eff0f0460f421fba96d15669506c00d1c4f', +}; diff --git a/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol b/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol index ceed49ff2..32d91f509 100644 --- a/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol +++ b/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol @@ -13,23 +13,23 @@ interface ILSP26FollowingSystem { event Unfollow(address unfollower, address addr); /// @notice Follow an specific address. - /// @custom:events {Follow} event when following an address. /// @param addr The address to start following. + /// @custom:events {Follow} event when following an address. function follow(address addr) external; /// @notice Follow a list of addresses. - /// @custom:events {Follow} event when following each address in the list. /// @param addresses The list of addresses to follow. + /// @custom:events {Follow} event when following each address in the list. function followBatch(address[] memory addresses) external; /// @notice Unfollow a specific address. - /// @custom:events {Unfollow} event when unfollowing an address. /// @param addr The address to stop following. + /// @custom:events {Unfollow} event when unfollowing an address. function unfollow(address addr) external; /// @notice Unfollow a list of addresses. - /// @custom:events {Follow} event when unfollowing each address in the list. /// @param addresses The list of addresses to unfollow. + /// @custom:events {Follow} event when unfollowing each address in the list. function unfollowBatch(address[] memory addresses) external; /// @notice Check if an address is following a specific address. diff --git a/packages/lsp26-contracts/contracts/LSP26Constants.sol b/packages/lsp26-contracts/contracts/LSP26Constants.sol index 41aa959a4..48e3c8eb4 100644 --- a/packages/lsp26-contracts/contracts/LSP26Constants.sol +++ b/packages/lsp26-contracts/contracts/LSP26Constants.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.17; +bytes4 constant _INTERFACEID_LSP26 = 0x2b299cea; + // keccak256('LSP26FollowerSystem_FollowNotification') bytes32 constant _TYPEID_LSP26_FOLLOW = 0x71e02f9f05bcd5816ec4f3134aa2e5a916669537ec6c77fe66ea595fabc2d51a; diff --git a/packages/lsp26-contracts/contracts/LSP26Errors.sol b/packages/lsp26-contracts/contracts/LSP26Errors.sol index 93c39e4aa..7c404adb7 100644 --- a/packages/lsp26-contracts/contracts/LSP26Errors.sol +++ b/packages/lsp26-contracts/contracts/LSP26Errors.sol @@ -3,8 +3,6 @@ pragma solidity ^0.8.17; error LSP26CannotSelfFollow(); -error LSP26CannotSelfUnfollow(); - error LSP26AlreadyFollowing(address addr); error LSP26NotFollowing(address addr); diff --git a/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol b/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol index 3ede7fa01..748ca0921 100644 --- a/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol +++ b/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.17; -// interafces +// interfaces import {ILSP26FollowingSystem} from "./ILSP26FollowingSystem.sol"; import { ILSP1UniversalReceiver @@ -27,7 +27,6 @@ import { // errors import { LSP26CannotSelfFollow, - LSP26CannotSelfUnfollow, LSP26AlreadyFollowing, LSP26NotFollowing } from "./LSP26Errors.sol"; @@ -46,7 +45,7 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { // @inheritdoc ILSP26FollowingSystem function followBatch(address[] memory addresses) public { - for (uint256 index = 0; index < addresses.length; index++) { + for (uint256 index = 0; index < addresses.length; ++index) { _follow(addresses[index]); } } @@ -58,7 +57,7 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { // @inheritdoc ILSP26FollowingSystem function unfollowBatch(address[] memory addresses) public { - for (uint256 index = 0; index < addresses.length; index++) { + for (uint256 index = 0; index < addresses.length; ++index) { _unfollow(addresses[index]); } } @@ -87,9 +86,11 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { uint256 startIndex, uint256 endIndex ) public view returns (address[] memory) { - address[] memory followings = new address[](endIndex - startIndex); + uint256 sliceLength = endIndex - startIndex; - for (uint256 index = 0; index < endIndex - startIndex; index++) { + address[] memory followings = new address[](sliceLength); + + for (uint256 index = 0; index < sliceLength; ++index) { followings[index] = _followingsOf[addr].at(startIndex + index); } @@ -102,9 +103,11 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { uint256 startIndex, uint256 endIndex ) public view returns (address[] memory) { - address[] memory followers = new address[](endIndex - startIndex); + uint256 sliceLength = endIndex - startIndex; + + address[] memory followers = new address[](sliceLength); - for (uint256 index = 0; index < endIndex - startIndex; index++) { + for (uint256 index = 0; index < sliceLength; ++index) { followers[index] = _followersOf[addr].at(startIndex + index); } @@ -116,13 +119,16 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { revert LSP26CannotSelfFollow(); } - if (_followingsOf[msg.sender].contains(addr)) { + bool isAdded = _followingsOf[msg.sender].add(addr); + + if (!isAdded) { revert LSP26AlreadyFollowing(addr); } - _followingsOf[msg.sender].add(addr); _followersOf[addr].add(msg.sender); + emit Follow(msg.sender, addr); + if (addr.supportsERC165InterfaceUnchecked(_INTERFACEID_LSP1)) { // solhint-disable no-empty-blocks try @@ -131,24 +137,20 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { abi.encodePacked(msg.sender) ) {} catch {} - // returns (bytes memory data) {} catch {} } - - emit Follow(msg.sender, addr); } function _unfollow(address addr) internal { - if (msg.sender == addr) { - revert LSP26CannotSelfUnfollow(); - } + bool isRemoved = _followingsOf[msg.sender].remove(addr); - if (!_followingsOf[msg.sender].contains(addr)) { + if (!isRemoved) { revert LSP26NotFollowing(addr); } - _followingsOf[msg.sender].remove(addr); _followersOf[addr].remove(msg.sender); + emit Unfollow(msg.sender, addr); + if (addr.supportsERC165InterfaceUnchecked(_INTERFACEID_LSP1)) { // solhint-disable no-empty-blocks try @@ -157,9 +159,6 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { abi.encodePacked(msg.sender) ) {} catch {} - // returns (bytes memory data) {} catch {} } - - emit Unfollow(msg.sender, addr); } } diff --git a/packages/lsp26-contracts/contracts/mock/RevertOnFollow.sol b/packages/lsp26-contracts/contracts/mock/RevertOnFollow.sol new file mode 100644 index 000000000..3670a4894 --- /dev/null +++ b/packages/lsp26-contracts/contracts/mock/RevertOnFollow.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +// interfaces +import { + ILSP1UniversalReceiver +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; + +contract RevertOnFollow is ILSP1UniversalReceiver { + function supportsInterface(bytes4) external pure returns (bool) { + return true; + } + + function universalReceiver( + bytes32, + bytes memory + ) external payable returns (bytes memory) { + revert("Block LSP1 notifications"); + } +} diff --git a/packages/lsp26-contracts/package.json b/packages/lsp26-contracts/package.json index bf7832ff1..abe40cb53 100644 --- a/packages/lsp26-contracts/package.json +++ b/packages/lsp26-contracts/package.json @@ -37,13 +37,13 @@ ], "scripts": { "build": "hardhat compile --show-stack-traces", + "build:js": "unbuild", "build:types": "npx wagmi generate", "clean": "hardhat clean && rm -Rf dist/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", "test": "hardhat test --no-compile tests/*.test.ts", - "test:foundry": "FOUNDRY_PROFILE=lspN forge test --no-match-test Skip -vvv", "test:coverage": "hardhat coverage", "package": "hardhat prepare-package" }, diff --git a/packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts b/packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts index 33c563232..c8e897a9a 100644 --- a/packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts +++ b/packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts @@ -13,12 +13,16 @@ import { LSP26FollowingSystem__factory, LSP0ERC725Account, LSP0ERC725Account__factory, + RevertOnFollow__factory, + RevertOnFollow, } from '../types'; describe('testing `LSP26FollowingSystem`', () => { let context: { followerSystem: LSP26FollowingSystem; followerSystemAddress: string; + revertOnFollow: RevertOnFollow; + revertOnFollowAddress: string; universalProfile: LSP0ERC725Account; owner: SignerWithAddress; singleFollowSigner: SignerWithAddress; @@ -34,6 +38,9 @@ describe('testing `LSP26FollowingSystem`', () => { const followerSystemAddress = await followerSystem.getAddress(); const universalProfile = await new LSP0ERC725Account__factory(owner).deploy(owner.address); + const revertOnFollow = await new RevertOnFollow__factory(owner).deploy(); + const revertOnFollowAddress = await revertOnFollow.getAddress(); + const executeBatchFollowSigners = signers.slice(2, 12); const batchFollowSigners = signers.slice(12, 22); const multiFollowSigners = signers.slice(22, 10_022); @@ -41,6 +48,8 @@ describe('testing `LSP26FollowingSystem`', () => { context = { followerSystem, followerSystemAddress, + revertOnFollow, + revertOnFollowAddress, universalProfile, owner, singleFollowSigner, @@ -66,13 +75,24 @@ describe('testing `LSP26FollowingSystem`', () => { .to.be.revertedWithCustomError(context.followerSystem, 'LSP26AlreadyFollowing') .withArgs(randomAddress); }); + + it('should not revert if follow recipient reverts inside the LSP1 hook', async () => { + await context.followerSystem.connect(context.owner).follow(context.revertOnFollowAddress); + + expect( + await context.followerSystem.isFollowing( + context.owner.address, + context.revertOnFollowAddress, + ), + ).to.be.true; + }); }); describe('testing `unfollow(address)`', () => { it('should revert when unfollowing your own address', async () => { - await expect( - context.followerSystem.connect(context.owner).unfollow(context.owner.address), - ).to.be.revertedWithCustomError(context.followerSystem, 'LSP26CannotSelfUnfollow'); + await expect(context.followerSystem.connect(context.owner).unfollow(context.owner.address)) + .to.be.revertedWithCustomError(context.followerSystem, 'LSP26NotFollowing') + .withArgs(context.owner.address); }); it('should revert when unfollowing an address that is not followed', async () => { @@ -82,9 +102,20 @@ describe('testing `LSP26FollowingSystem`', () => { .to.be.revertedWithCustomError(context.followerSystem, 'LSP26NotFollowing') .withArgs(randomAddress); }); + + it('should not revert if unfollow recipient reverts inside the LSP1 hook', async () => { + await context.followerSystem.connect(context.owner).unfollow(context.revertOnFollowAddress); + + expect( + await context.followerSystem.isFollowing( + context.owner.address, + context.revertOnFollowAddress, + ), + ).to.be.false; + }); }); - describe('gas tests', () => { + describe.skip('gas tests', () => { const gasCostResult: { followingGasCost?: number[]; followCost?: number; diff --git a/template/build.config.ts b/template/build.config.ts index 71798d1ff..dc4f36906 100644 --- a/template/build.config.ts +++ b/template/build.config.ts @@ -1,7 +1,7 @@ import { defineBuildConfig } from 'unbuild'; export default defineBuildConfig({ - entries: ['./constants'], + entries: ['./index'], declaration: 'compatible', // generate .d.ts files rollup: { emitCJS: true, From bb2f14a5ec99937ac6a0c8175df2e4693a342cc6 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Tue, 6 Aug 2024 12:20:09 +0300 Subject: [PATCH 23/94] build: specify version of packages in LSP26 --- packages/lsp26-contracts/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/lsp26-contracts/package.json b/packages/lsp26-contracts/package.json index abe40cb53..1f7021329 100644 --- a/packages/lsp26-contracts/package.json +++ b/packages/lsp26-contracts/package.json @@ -49,7 +49,7 @@ }, "dependencies": { "@openzeppelin/contracts": "^4.9.3", - "@lukso/lsp0-contracts": "*", - "@lukso/lsp1-contracts": "*" + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "~0.15.0" } } From ed4f6dd698b0df8257dd73f93829f96529ac2ec1 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Tue, 6 Aug 2024 12:20:25 +0300 Subject: [PATCH 24/94] build: select contract to keep artifacts --- packages/lsp26-contracts/hardhat.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lsp26-contracts/hardhat.config.ts b/packages/lsp26-contracts/hardhat.config.ts index 80627f056..606a22ef3 100644 --- a/packages/lsp26-contracts/hardhat.config.ts +++ b/packages/lsp26-contracts/hardhat.config.ts @@ -112,7 +112,7 @@ const config: HardhatUserConfig = { }, packager: { // What contracts to keep the artifacts and the bindings for. - contracts: [], + contracts: ['ILSP26FollowingSystem', 'LSP26FollowingSystem'], // Whether to include the TypeChain factories or not. // If this is enabled, you need to run the TypeChain files through the TypeScript compiler before shipping to the registry. includeFactories: true, From 43b50bad5df75f272082ced25fda47fc82e070ec Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Tue, 6 Aug 2024 12:20:37 +0300 Subject: [PATCH 25/94] build: add lsp26 to release please config --- release-please-config.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/release-please-config.json b/release-please-config.json index a28a28d23..466a15980 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -225,6 +225,16 @@ "draft": false, "prerelease-type": "rc" }, + "packages/lsp26-contracts": { + "component": "lsp26-contracts", + "package-name": "@lukso/lsp26-contracts", + "include-component-in-tag": true, + "release-type": "node", + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": false, + "draft": false, + "prerelease-type": "rc" + }, "packages/universalprofile-contracts": { "component": "universalprofile-contracts", "package-name": "@lukso/universalprofile-contracts", From 7b43cc7eaec547279e3d5f887882f6e53b9d2812 Mon Sep 17 00:00:00 2001 From: b00ste Date: Thu, 8 Aug 2024 15:33:03 +0300 Subject: [PATCH 26/94] test: Fix type id tests --- config/eslint-config-custom/package.json | 2 +- package-lock.json | 16144 +++++++--------- package.json | 3 +- packages/lsp-smart-contracts/constants.ts | 4 - .../contracts/Mocks/LSP1TypeIDsTester.sol | 13 + packages/lsp26-contracts/constants.ts | 6 +- turbo.json | 4 +- 7 files changed, 7396 insertions(+), 8780 deletions(-) diff --git a/config/eslint-config-custom/package.json b/config/eslint-config-custom/package.json index 8fa4803cd..dce7b88da 100755 --- a/config/eslint-config-custom/package.json +++ b/config/eslint-config-custom/package.json @@ -7,7 +7,7 @@ "@typescript-eslint/eslint-plugin": "^6.2.1", "@typescript-eslint/parser": "^6.2.1", "eslint-config-prettier": "^8.8.0", - "eslint-config-turbo": "^1.9.3", + "eslint-config-turbo": "^2.0.12", "eslint-plugin-prettier": "^4.2.1" } } diff --git a/package-lock.json b/package-lock.json index f0f79924f..6f5cf2e9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,40 +60,10 @@ "@typescript-eslint/eslint-plugin": "^6.2.1", "@typescript-eslint/parser": "^6.2.1", "eslint-config-prettier": "^8.8.0", - "eslint-config-turbo": "^1.9.3", + "eslint-config-turbo": "^2.0.12", "eslint-plugin-prettier": "^4.2.1" } }, - "config/eslint-config-custom/node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "engines": { - "node": ">=12" - } - }, - "config/eslint-config-custom/node_modules/eslint-config-turbo": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.13.4.tgz", - "integrity": "sha512-+we4eWdZlmlEn7LnhXHCIPX/wtujbHCS7XjQM/TN09BHNEl2fZ8id4rHfdfUKIYTSKyy8U/nNyJ0DNoZj5Q8bw==", - "dependencies": { - "eslint-plugin-turbo": "1.13.4" - }, - "peerDependencies": { - "eslint": ">6.6.0" - } - }, - "config/eslint-config-custom/node_modules/eslint-plugin-turbo": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.13.4.tgz", - "integrity": "sha512-82GfMzrewI/DJB92Bbch239GWbGx4j1zvjk1lqb06lxIlMPnVwUHVwPbAnLfyLG3JuhLv9whxGkO/q1CL18JTg==", - "dependencies": { - "dotenv": "16.0.3" - }, - "peerDependencies": { - "eslint": ">6.6.0" - } - }, "config/tsconfig": { "version": "0.0.0", "license": "Apache-2.0" @@ -521,914 +491,183 @@ "solidity-bytes-utils": "0.8.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", "cpu": [ - "ppc64" + "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "aix" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "license": "MIT", "engines": { - "node": ">=12" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=12" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause" + }, + "node_modules/@ethereumjs/common": { + "version": "2.6.5", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, "engines": { - "node": ">=12" + "node": ">=14" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], + "node_modules/@ethereumjs/util": { + "version": "8.1.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, "engines": { - "node": ">=12" + "node": ">=14" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { - "version": "1.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/@ethereumjs/common": { - "version": "2.6.5", - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/rlp": { - "version": "4.0.1", - "dev": true, - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/util": { - "version": "8.1.0", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", "dev": true, - "license": "MIT" - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, - "node_modules/@ethersproject/properties": { + "node_modules/@ethersproject/abi": { "version": "5.7.0", "funding": [ { @@ -1442,106 +681,19 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@ethersproject/random": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/sha2": { + "node_modules/@ethersproject/abstract-provider": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -1554,12 +706,16 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, - "node_modules/@ethersproject/signing-key": { + "node_modules/@ethersproject/abstract-signer": { "version": "5.7.0", "funding": [ { @@ -1573,17 +729,15 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@ethersproject/solidity": { + "node_modules/@ethersproject/address": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -1600,11 +754,10 @@ "@ethersproject/bytes": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/rlp": "^5.7.0" } }, - "node_modules/@ethersproject/strings": { + "node_modules/@ethersproject/base64": { "version": "5.7.0", "funding": [ { @@ -1618,13 +771,12 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.7.0" } }, - "node_modules/@ethersproject/transactions": { + "node_modules/@ethersproject/basex": { "version": "5.7.0", + "dev": true, "funding": [ { "type": "individual", @@ -1637,20 +789,12 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@ethersproject/units": { + "node_modules/@ethersproject/bignumber": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -1663,14 +807,13 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" } }, - "node_modules/@ethersproject/wallet": { + "node_modules/@ethersproject/bytes": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -1683,25 +826,11 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", + "node_modules/@ethersproject/constants": { + "version": "5.7.0", "funding": [ { "type": "individual", @@ -1714,14 +843,10 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/bignumber": "^5.7.0" } }, - "node_modules/@ethersproject/wordlists": { + "node_modules/@ethersproject/contracts": { "version": "5.7.0", "dev": true, "funding": [ @@ -1736,1484 +861,1582 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", + "@ethersproject/constants": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "license": "BSD-3-Clause" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@lukso/eip191-signer.js": { - "version": "0.2.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "eth-lib": "^0.1.29", - "ethereumjs-account": "^3.0.0", - "ethereumjs-util": "^7.1.5", - "web3-utils": "^1.7.5" - } - }, - "node_modules/@lukso/lsp-smart-contracts": { - "resolved": "packages/lsp-smart-contracts", - "link": true - }, - "node_modules/@lukso/lsp0-contracts": { - "resolved": "packages/lsp0-contracts", - "link": true - }, - "node_modules/@lukso/lsp1-contracts": { - "resolved": "packages/lsp1-contracts", - "link": true - }, - "node_modules/@lukso/lsp10-contracts": { - "resolved": "packages/lsp10-contracts", - "link": true - }, - "node_modules/@lukso/lsp11-contracts": { - "resolved": "packages/lsp11-contracts", - "link": true - }, - "node_modules/@lukso/lsp12-contracts": { - "resolved": "packages/lsp12-contracts", - "link": true - }, - "node_modules/@lukso/lsp14-contracts": { - "resolved": "packages/lsp14-contracts", - "link": true - }, - "node_modules/@lukso/lsp16-contracts": { - "resolved": "packages/lsp16-contracts", - "link": true - }, - "node_modules/@lukso/lsp17-contracts": { - "resolved": "packages/lsp17-contracts", - "link": true - }, - "node_modules/@lukso/lsp17contractextension-contracts": { - "resolved": "packages/lsp17contractextension-contracts", - "link": true - }, - "node_modules/@lukso/lsp1delegate-contracts": { - "resolved": "packages/lsp1delegate-contracts", - "link": true - }, - "node_modules/@lukso/lsp2-contracts": { - "resolved": "packages/lsp2-contracts", - "link": true - }, - "node_modules/@lukso/lsp20-contracts": { - "resolved": "packages/lsp20-contracts", - "link": true - }, - "node_modules/@lukso/lsp23-contracts": { - "resolved": "packages/lsp23-contracts", - "link": true - }, - "node_modules/@lukso/lsp25-contracts": { - "resolved": "packages/lsp25-contracts", - "link": true - }, - "node_modules/@lukso/lsp26-contracts": { - "resolved": "packages/lsp26-contracts", - "link": true - }, - "node_modules/@lukso/lsp3-contracts": { - "resolved": "packages/lsp3-contracts", - "link": true - }, - "node_modules/@lukso/lsp4-contracts": { - "resolved": "packages/lsp4-contracts", - "link": true - }, - "node_modules/@lukso/lsp5-contracts": { - "resolved": "packages/lsp5-contracts", - "link": true - }, - "node_modules/@lukso/lsp6-contracts": { - "resolved": "packages/lsp6-contracts", - "link": true - }, - "node_modules/@lukso/lsp7-contracts": { - "resolved": "packages/lsp7-contracts", - "link": true - }, - "node_modules/@lukso/lsp8-contracts": { - "resolved": "packages/lsp8-contracts", - "link": true - }, - "node_modules/@lukso/lsp9-contracts": { - "resolved": "packages/lsp9-contracts", - "link": true - }, - "node_modules/@lukso/universalprofile-contracts": { - "resolved": "packages/universalprofile-contracts", - "link": true - }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.1", - "license": "ISC", - "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "engines": { - "node": ">=12.0.0" + "@ethersproject/transactions": "^5.7.0" } - }, - "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { - "version": "4.11.6", + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@types/node": "*" + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { - "version": "6.2.1", - "license": "MPL-2.0", + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" } }, - "node_modules/@metamask/safe-event-emitter": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/@noble/curves": { - "version": "1.2.0", + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, - "node_modules/@noble/hashes": { - "version": "1.3.2", + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", "dev": true, + "license": "MIT" + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" } }, - "node_modules/@noble/secp256k1": { - "version": "1.6.3", + "node_modules/@ethersproject/logger": { + "version": "5.7.0", "funding": [ { "type": "individual", - "url": "https://paulmillr.com/funding/" + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], "license": "MIT" }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@nomicfoundation/edr": { - "version": "0.5.2", + "node_modules/@ethersproject/providers": { + "version": "5.7.2", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.5.2", - "@nomicfoundation/edr-darwin-x64": "0.5.2", - "@nomicfoundation/edr-linux-arm64-gnu": "0.5.2", - "@nomicfoundation/edr-linux-arm64-musl": "0.5.2", - "@nomicfoundation/edr-linux-x64-gnu": "0.5.2", - "@nomicfoundation/edr-linux-x64-musl": "0.5.2", - "@nomicfoundation/edr-win32-x64-msvc": "0.5.2" - }, - "engines": { - "node": ">= 18" + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" } }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.5.2", + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", "dev": true, "license": "MIT", "engines": { - "node": ">= 18" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.5.2", + "node_modules/@ethersproject/random": { + "version": "5.7.0", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">= 18" + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.5.2", - "dev": true, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">= 18" + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.5.2", + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">= 18" + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" } }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.5.2", - "dev": true, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">= 18" + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.5.2", + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">= 18" + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.5.2", - "dev": true, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">= 18" + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.4", - "dev": true, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.4" + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" } }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.4", + "node_modules/@ethersproject/units": { + "version": "5.7.0", "dev": true, - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=18" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.4", + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" } }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.4", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "2.0.7", + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "peer": true, "dependencies": { - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "chai": "^4.2.0", - "ethers": "^6.1.0", - "hardhat": "^2.9.4" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@nomicfoundation/hardhat-ethers": { - "version": "3.0.8", + "node_modules/@fastify/busboy": { + "version": "2.1.1", "dev": true, "license": "MIT", - "peer": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "license": "Apache-2.0", "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", "debug": "^4.1.1", - "lodash.isequal": "^4.5.0" + "minimatch": "^3.0.4" }, - "peerDependencies": { - "ethers": "^6.1.0", - "hardhat": "^2.0.0" + "engines": { + "node": ">=10.10.0" } }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.11", - "dev": true, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", "license": "MIT", - "peer": true, "dependencies": { - "ethereumjs-util": "^7.1.4" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "peerDependencies": { - "hardhat": "^2.9.5" + "engines": { + "node": "*" } }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "4.0.0", - "dev": true, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", "license": "MIT", - "peerDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "9.1.0", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=16.0.0", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.3.0", - "typescript": ">=4.5.0" + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@nomicfoundation/hardhat-verify": { - "version": "2.0.10", - "dev": true, + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", "license": "MIT", - "peer": true, "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "chalk": "^2.4.2", - "debug": "^4.1.1", - "lodash.clonedeep": "^4.5.0", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.4" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.2", - "dev": true, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", "license": "MIT", "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" + "node": ">=6.0.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.2", - "dev": true, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", "license": "MIT", - "optional": true, "engines": { - "node": ">= 12" + "node": ">=6.0.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.2", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", "dev": true, "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.2", + "node_modules/@lukso/eip191-signer.js": { + "version": "0.2.2", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" + "license": "Apache-2.0", + "dependencies": { + "eth-lib": "^0.1.29", + "ethereumjs-account": "^3.0.0", + "ethereumjs-util": "^7.1.5", + "web3-utils": "^1.7.5" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } + "node_modules/@lukso/lsp-smart-contracts": { + "resolved": "packages/lsp-smart-contracts", + "link": true + }, + "node_modules/@lukso/lsp0-contracts": { + "resolved": "packages/lsp0-contracts", + "link": true + }, + "node_modules/@lukso/lsp1-contracts": { + "resolved": "packages/lsp1-contracts", + "link": true + }, + "node_modules/@lukso/lsp10-contracts": { + "resolved": "packages/lsp10-contracts", + "link": true + }, + "node_modules/@lukso/lsp11-contracts": { + "resolved": "packages/lsp11-contracts", + "link": true + }, + "node_modules/@lukso/lsp12-contracts": { + "resolved": "packages/lsp12-contracts", + "link": true + }, + "node_modules/@lukso/lsp14-contracts": { + "resolved": "packages/lsp14-contracts", + "link": true + }, + "node_modules/@lukso/lsp16-contracts": { + "resolved": "packages/lsp16-contracts", + "link": true + }, + "node_modules/@lukso/lsp17-contracts": { + "resolved": "packages/lsp17-contracts", + "link": true + }, + "node_modules/@lukso/lsp17contractextension-contracts": { + "resolved": "packages/lsp17contractextension-contracts", + "link": true + }, + "node_modules/@lukso/lsp1delegate-contracts": { + "resolved": "packages/lsp1delegate-contracts", + "link": true + }, + "node_modules/@lukso/lsp2-contracts": { + "resolved": "packages/lsp2-contracts", + "link": true + }, + "node_modules/@lukso/lsp20-contracts": { + "resolved": "packages/lsp20-contracts", + "link": true + }, + "node_modules/@lukso/lsp23-contracts": { + "resolved": "packages/lsp23-contracts", + "link": true + }, + "node_modules/@lukso/lsp25-contracts": { + "resolved": "packages/lsp25-contracts", + "link": true + }, + "node_modules/@lukso/lsp26-contracts": { + "resolved": "packages/lsp26-contracts", + "link": true + }, + "node_modules/@lukso/lsp3-contracts": { + "resolved": "packages/lsp3-contracts", + "link": true + }, + "node_modules/@lukso/lsp4-contracts": { + "resolved": "packages/lsp4-contracts", + "link": true + }, + "node_modules/@lukso/lsp5-contracts": { + "resolved": "packages/lsp5-contracts", + "link": true + }, + "node_modules/@lukso/lsp6-contracts": { + "resolved": "packages/lsp6-contracts", + "link": true + }, + "node_modules/@lukso/lsp7-contracts": { + "resolved": "packages/lsp7-contracts", + "link": true }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } + "node_modules/@lukso/lsp8-contracts": { + "resolved": "packages/lsp8-contracts", + "link": true }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } + "node_modules/@lukso/lsp9-contracts": { + "resolved": "packages/lsp9-contracts", + "link": true }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, + "node_modules/@lukso/universalprofile-contracts": { + "resolved": "packages/universalprofile-contracts", + "link": true + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "license": "ISC", + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, "engines": { - "node": ">= 12" + "node": ">=12.0.0" } }, - "node_modules/@nomiclabs/hardhat-web3": { - "version": "2.0.0", - "dev": true, + "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { + "version": "4.11.6", "license": "MIT", "dependencies": { - "@types/bignumber.js": "^5.0.0" - }, - "peerDependencies": { - "hardhat": "^2.0.0", - "web3": "^1.0.0-beta.36" + "@types/node": "*" } }, - "node_modules/@openzeppelin/contracts": { - "version": "4.9.6", - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.9.6", + "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { + "version": "4.12.0", "license": "MIT" }, - "node_modules/@rollup/plugin-alias": { - "version": "5.1.0", - "dev": true, - "license": "MIT", + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "version": "6.2.1", + "license": "MPL-2.0", "dependencies": { - "slash": "^4.0.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "node_modules/@rollup/plugin-alias/node_modules/slash": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@metamask/safe-event-emitter": { + "version": "2.0.0", + "license": "ISC" }, - "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.8", + "node_modules/@noble/curves": { + "version": "1.2.0", "dev": true, "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.30.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0||^4.0.0" + "@noble/hashes": "1.3.2" }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/glob": { - "version": "8.1.0", + "node_modules/@noble/hashes": { + "version": "1.3.2", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 16" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { - "version": "5.1.6", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } + "node_modules/@noble/secp256k1": { + "version": "1.6.3", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "dev": true, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^5.1.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.3", - "dev": true, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { - "version": "1.22.8", - "dev": true, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 8" } }, - "node_modules/@rollup/plugin-replace": { - "version": "5.0.7", + "node_modules/@nomicfoundation/edr": { + "version": "0.5.2", "dev": true, "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "magic-string": "^0.30.3" + "@nomicfoundation/edr-darwin-arm64": "0.5.2", + "@nomicfoundation/edr-darwin-x64": "0.5.2", + "@nomicfoundation/edr-linux-arm64-gnu": "0.5.2", + "@nomicfoundation/edr-linux-arm64-musl": "0.5.2", + "@nomicfoundation/edr-linux-x64-gnu": "0.5.2", + "@nomicfoundation/edr-linux-x64-musl": "0.5.2", + "@nomicfoundation/edr-win32-x64-msvc": "0.5.2" }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.5.2", "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "node": ">= 18" } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.2", - "cpu": [ - "arm64" - ], + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.5.2", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true + "engines": { + "node": ">= 18" + } }, - "node_modules/@scure/base": { - "version": "1.1.8", + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.5.2", + "dev": true, "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">= 18" } }, - "node_modules/@scure/bip32": { - "version": "1.4.0", + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.5.2", "dev": true, "license": "MIT", - "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">= 18" } }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.4.2", + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.5.2", "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">= 18" } }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.4.0", + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.5.2", "dev": true, "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">= 18" } }, - "node_modules/@scure/bip39": { - "version": "1.3.0", + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", "dev": true, "license": "MIT", "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@nomicfoundation/ethereumjs-util": "9.0.4" } }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.4.0", + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18" } }, - "node_modules/@sentry/core": { - "version": "5.30.0", + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", "dev": true, - "license": "BSD-3-Clause", + "license": "MPL-2.0", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } } }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", "dev": true, - "license": "0BSD" + "license": "MPL-2.0", + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } }, - "node_modules/@sentry/hub": { - "version": "5.30.0", + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.0.7", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "peer": true, "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "chai": "^4.2.0", + "ethers": "^6.1.0", + "hardhat": "^2.9.4" } }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.8", "dev": true, - "license": "0BSD" + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" + } }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.0.11", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "peer": true, "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "ethereumjs-util": "^7.1.4" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "hardhat": "^2.9.5" } }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "4.0.0", "dev": true, - "license": "0BSD" + "license": "MIT", + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "9.1.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=16.0.0", + "chai": "^4.2.0", + "ethers": "^6.4.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + } }, - "node_modules/@sentry/node": { - "version": "5.30.0", + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.0.10", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "peer": true, "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" }, - "engines": { - "node": ">=6" + "peerDependencies": { + "hardhat": "^2.0.4" } }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", "dev": true, "license": "MIT", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, "engines": { - "node": ">=6" + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" } }, - "node_modules/@sentry/tracing/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/types": { - "version": "5.30.0", + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "optional": true, "engines": { - "node": ">=6" + "node": ">= 12" } }, - "node_modules/@sentry/utils": { - "version": "5.30.0", + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, + "license": "MIT", + "optional": true, "engines": { - "node": ">=6" + "node": ">= 12" } }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", "dev": true, - "license": "0BSD" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", "license": "MIT", + "optional": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "node": ">= 12" } }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", "dev": true, "license": "MIT", - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "optional": true, + "engines": { + "node": ">= 12" } }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "dev": true, "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, + "optional": true, "engines": { - "node": ">=14.16" + "node": ">= 12" } }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", "dev": true, - "license": "MIT" - }, - "node_modules/@truffle/hdwallet": { - "version": "0.1.4", "license": "MIT", - "dependencies": { - "ethereum-cryptography": "1.1.2", - "keccak": "3.0.2", - "secp256k1": "4.0.3" - }, + "optional": true, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">= 12" } }, - "node_modules/@truffle/hdwallet-provider": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.15.tgz", - "integrity": "sha512-I5cSS+5LygA3WFzru9aC5+yDXVowEEbLCx0ckl/RqJ2/SCiYXkzYlR5/DjjDJuCtYhivhrn2RP9AheeFlRF+qw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dependencies": { - "@ethereumjs/common": "^2.4.0", - "@ethereumjs/tx": "^3.3.0", - "@metamask/eth-sig-util": "4.0.1", - "@truffle/hdwallet": "^0.1.4", - "@types/ethereum-protocol": "^1.0.0", - "@types/web3": "1.0.20", - "@types/web3-provider-engine": "^14.0.0", - "ethereum-cryptography": "1.1.2", - "ethereum-protocol": "^1.0.1", - "ethereumjs-util": "^7.1.5", - "web3": "1.10.0", - "web3-provider-engine": "16.0.3" - }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "optional": true, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">= 12" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/common": { - "version": "2.5.0", + "node_modules/@nomiclabs/hardhat-web3": { + "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" + "@types/bignumber.js": "^5.0.0" + }, + "peerDependencies": { + "hardhat": "^2.0.0", + "web3": "^1.0.0-beta.36" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/tx": { - "version": "3.3.2", - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" - } + "node_modules/@openzeppelin/contracts": { + "version": "4.9.6", + "license": "MIT" }, - "node_modules/@truffle/hdwallet-provider/node_modules/@noble/hashes": { - "version": "1.1.2", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.9.6", "license": "MIT" }, - "node_modules/@truffle/hdwallet-provider/node_modules/@scure/bip32": { - "version": "1.1.0", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@rollup/plugin-alias": { + "version": "5.1.0", + "dev": true, "license": "MIT", "dependencies": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" + "slash": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@scure/bip39": { - "version": "1.1.0", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@rollup/plugin-alias/node_modules/slash": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@types/node": { - "version": "12.20.55", - "license": "MIT" - }, - "node_modules/@truffle/hdwallet-provider/node_modules/cross-fetch": { - "version": "3.1.8", + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.8", + "dev": true, "license": "MIT", "dependencies": { - "node-fetch": "^2.6.12" + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@truffle/hdwallet-provider/node_modules/eth-lib": { - "version": "0.2.8", - "license": "MIT", + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", + "dev": true, + "license": "ISC", "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/@truffle/hdwallet-provider/node_modules/ethereum-cryptography": { - "version": "1.1.2", - "license": "MIT", + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", "dependencies": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/uuid": { - "version": "9.0.1", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3": { - "version": "1.10.0", - "hasInstallScript": true, - "license": "LGPL-3.0", "dependencies": { - "web3-bzz": "1.10.0", - "web3-core": "1.10.0", - "web3-eth": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-shh": "1.10.0", - "web3-utils": "1.10.0" + "@rollup/pluginutils": "^5.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-bzz": { - "version": "1.10.0", - "hasInstallScript": true, - "license": "LGPL-3.0", + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.3", + "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { + "version": "1.22.8", + "dev": true, + "license": "MIT", "dependencies": { - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-requestmanager": "1.10.0", - "web3-utils": "1.10.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=8.0.0" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-helpers": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@rollup/plugin-replace": { + "version": "5.0.7", + "dev": true, + "license": "MIT", "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-method": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-utils": "1.10.0" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-promievent": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.21.2", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@scure/base": { + "version": "1.1.8", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "dev": true, + "license": "MIT", "dependencies": { - "eventemitter3": "4.0.4" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-requestmanager": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "dev": true, + "license": "MIT", "dependencies": { - "util": "^0.12.5", - "web3-core-helpers": "1.10.0", - "web3-providers-http": "1.10.0", - "web3-providers-ipc": "1.10.0", - "web3-providers-ws": "1.10.0" + "@noble/hashes": "1.4.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-subscriptions": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@scure/bip39": { + "version": "1.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@sentry/core": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-accounts": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-eth-ens": "1.10.0", - "web3-eth-iban": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-abi": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-accounts": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@ethereumjs/common": "2.5.0", - "@ethereumjs/tx": "3.3.2", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.1.5", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-contract": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-utils": "1.10.0" + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-ens": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "dev": true, + "license": "MIT", "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-utils": "1.10.0" + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-iban": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-personal": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@sentry/utils": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-net": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" - }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-http": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "dev": true, + "license": "MIT", "dependencies": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-ipc": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "license": "MIT", "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.10.0" + "defer-to-connect": "^2.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=14.16" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-ws": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@truffle/hdwallet": { + "version": "0.1.4", + "license": "MIT", "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0", - "websocket": "^1.0.32" + "ethereum-cryptography": "1.1.2", + "keccak": "3.0.2", + "secp256k1": "4.0.3" }, "engines": { - "node": ">=8.0.0" + "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-shh": { - "version": "1.10.0", - "hasInstallScript": true, - "license": "LGPL-3.0", + "node_modules/@truffle/hdwallet-provider": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.15.tgz", + "integrity": "sha512-I5cSS+5LygA3WFzru9aC5+yDXVowEEbLCx0ckl/RqJ2/SCiYXkzYlR5/DjjDJuCtYhivhrn2RP9AheeFlRF+qw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dependencies": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-net": "1.10.0" + "@ethereumjs/common": "^2.4.0", + "@ethereumjs/tx": "^3.3.0", + "@metamask/eth-sig-util": "4.0.1", + "@truffle/hdwallet": "^0.1.4", + "@types/ethereum-protocol": "^1.0.0", + "@types/web3": "1.0.20", + "@types/web3-provider-engine": "^14.0.0", + "ethereum-cryptography": "1.1.2", + "ethereum-protocol": "^1.0.1", + "ethereumjs-util": "^7.1.5", + "web3": "1.10.0", + "web3-provider-engine": "16.0.3" }, "engines": { - "node": ">=8.0.0" + "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-utils": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/common": { + "version": "2.5.0", + "license": "MIT", "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" } }, - "node_modules/@truffle/hdwallet/node_modules/@noble/hashes": { + "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/tx": { + "version": "3.3.2", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" + } + }, + "node_modules/@truffle/hdwallet-provider/node_modules/@noble/hashes": { "version": "1.1.2", "funding": [ { @@ -3223,7 +2446,7 @@ ], "license": "MIT" }, - "node_modules/@truffle/hdwallet/node_modules/@scure/bip32": { + "node_modules/@truffle/hdwallet-provider/node_modules/@scure/bip32": { "version": "1.1.0", "funding": [ { @@ -3238,7 +2461,7 @@ "@scure/base": "~1.1.0" } }, - "node_modules/@truffle/hdwallet/node_modules/@scure/bip39": { + "node_modules/@truffle/hdwallet-provider/node_modules/@scure/bip39": { "version": "1.1.0", "funding": [ { @@ -3252,7 +2475,31 @@ "@scure/base": "~1.1.0" } }, - "node_modules/@truffle/hdwallet/node_modules/ethereum-cryptography": { + "node_modules/@truffle/hdwallet-provider/node_modules/@types/node": { + "version": "12.20.55", + "license": "MIT" + }, + "node_modules/@truffle/hdwallet-provider/node_modules/cross-fetch": { + "version": "3.1.8", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/@truffle/hdwallet-provider/node_modules/eth-lib": { + "version": "0.2.8", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/@truffle/hdwallet-provider/node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/@truffle/hdwallet-provider/node_modules/ethereum-cryptography": { "version": "1.1.2", "license": "MIT", "dependencies": { @@ -3262,1894 +2509,1811 @@ "@scure/bip39": "1.1.0" } }, - "node_modules/@truffle/hdwallet/node_modules/keccak": { - "version": "3.0.2", - "hasInstallScript": true, + "node_modules/@truffle/hdwallet-provider/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@truffle/hdwallet-provider/node_modules/web3": { + "version": "1.10.0", + "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "web3-bzz": "1.10.0", + "web3-core": "1.10.0", + "web3-eth": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-shh": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=8.0.0" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "dev": true, - "license": "ISC", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-bzz": { + "version": "1.10.0", + "hasInstallScript": true, + "license": "LGPL-3.0", + "dependencies": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" + }, "engines": { - "node": ">=10.13.0" + "node": ">=8.0.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, - "license": "MIT" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-requestmanager": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } }, - "node_modules/@turbo/gen": { - "version": "1.13.4", - "dev": true, - "license": "MPL-2.0", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-helpers": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "@turbo/workspaces": "1.13.4", - "chalk": "2.4.2", - "commander": "^10.0.0", - "fs-extra": "^10.1.0", - "inquirer": "^8.2.4", - "minimatch": "^9.0.0", - "node-plop": "^0.26.3", - "proxy-agent": "^6.2.2", - "ts-node": "^10.9.1", - "update-check": "^1.5.4", - "validate-npm-package-name": "^5.0.0" + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" }, - "bin": { - "gen": "dist/cli.js" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@turbo/workspaces": { - "version": "1.13.4", - "dev": true, - "license": "MPL-2.0", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-method": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "chalk": "2.4.2", - "commander": "^10.0.0", - "execa": "5.1.1", - "fast-glob": "^3.2.12", - "fs-extra": "^10.1.0", - "gradient-string": "^2.0.0", - "inquirer": "^8.0.0", - "js-yaml": "^4.1.0", - "ora": "4.1.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "update-check": "^1.5.4" + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-utils": "1.10.0" }, - "bin": { - "workspaces": "dist/cli.js" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@turbo/workspaces/node_modules/semver": { - "version": "7.6.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-promievent": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "eventemitter3": "4.0.4" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/@typechain/ethers-v6": { - "version": "0.5.1", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-requestmanager": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" + "util": "^0.12.5", + "web3-core-helpers": "1.10.0", + "web3-providers-http": "1.10.0", + "web3-providers-ipc": "1.10.0", + "web3-providers-ws": "1.10.0" }, - "peerDependencies": { - "ethers": "6.x", - "typechain": "^8.3.2", - "typescript": ">=4.7.0" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@typechain/hardhat": { - "version": "9.1.0", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-subscriptions": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "fs-extra": "^9.1.0" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0" }, - "peerDependencies": { - "@typechain/ethers-v6": "^0.5.1", - "ethers": "^6.1.0", - "hardhat": "^2.9.9", - "typechain": "^8.3.2" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-accounts": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-eth-ens": "1.10.0", + "web3-eth-iban": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/@types/bignumber.js": { - "version": "5.0.0", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-abi": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "bignumber.js": "*" + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/bn.js": { - "version": "5.1.5", - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-accounts": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "@types/node": "*" + "@ethereumjs/common": "2.5.0", + "@ethereumjs/tx": "3.3.2", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.1.5", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-contract": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/chai": { - "version": "4.3.19", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-ens": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "@types/chai": "*" + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-iban": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "@types/node": "*" + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/estree": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ethereum-protocol": { - "version": "1.0.5", - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-personal": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "bignumber.js": "7.2.1" + "@types/node": "^12.12.6", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/ethereum-protocol/node_modules/bignumber.js": { - "version": "7.2.1", - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-net": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" + }, "engines": { - "node": "*" + "node": ">=8.0.0" } }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-http": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "@types/node": "*" + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/fs-extra": { - "version": "11.0.4", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-ipc": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" + "oboe": "2.1.5", + "web3-core-helpers": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-ws": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "license": "MIT" - }, - "node_modules/@types/inquirer": { - "version": "6.5.0", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-shh": { + "version": "1.10.0", + "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { - "@types/through": "*", - "rxjs": "^6.4.0" + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-net": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/inquirer/node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-utils": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "tslib": "^1.9.0" + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" }, "engines": { - "npm": ">=2.0.0" + "node": ">=8.0.0" } }, - "node_modules/@types/inquirer/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", + "node_modules/@truffle/hdwallet/node_modules/@noble/hashes": { + "version": "1.1.2", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT" }, - "node_modules/@types/jsonfile": { - "version": "6.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/keyv": { - "version": "3.1.4", + "node_modules/@truffle/hdwallet/node_modules/@scure/bip32": { + "version": "1.1.0", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", "dependencies": { - "@types/node": "*" + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" } }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mocha": { - "version": "10.0.7", - "dev": true, + "node_modules/@truffle/hdwallet/node_modules/@scure/bip39": { + "version": "1.1.0", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", - "peer": true + "dependencies": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } }, - "node_modules/@types/node": { - "version": "22.5.3", + "node_modules/@truffle/hdwallet/node_modules/ethereum-cryptography": { + "version": "1.1.2", "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" } }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", + "node_modules/@truffle/hdwallet/node_modules/keccak": { + "version": "3.0.2", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@types/prettier": { - "version": "2.7.3", + "node_modules/@trysound/sax": { + "version": "0.2.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", "dev": true, "license": "MIT" }, - "node_modules/@types/ps-tree": { - "version": "1.1.6", + "node_modules/@tsconfig/node12": { + "version": "1.0.11", "dev": true, "license": "MIT" }, - "node_modules/@types/qs": { - "version": "6.9.15", + "node_modules/@tsconfig/node14": { + "version": "1.0.3", "dev": true, "license": "MIT" }, - "node_modules/@types/resolve": { - "version": "1.20.2", + "node_modules/@tsconfig/node16": { + "version": "1.0.4", "dev": true, "license": "MIT" }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "license": "MIT", + "node_modules/@turbo/gen": { + "version": "1.13.4", + "dev": true, + "license": "MPL-2.0", "dependencies": { - "@types/node": "*" + "@turbo/workspaces": "1.13.4", + "chalk": "2.4.2", + "commander": "^10.0.0", + "fs-extra": "^10.1.0", + "inquirer": "^8.2.4", + "minimatch": "^9.0.0", + "node-plop": "^0.26.3", + "proxy-agent": "^6.2.2", + "ts-node": "^10.9.1", + "update-check": "^1.5.4", + "validate-npm-package-name": "^5.0.0" + }, + "bin": { + "gen": "dist/cli.js" } }, - "node_modules/@types/secp256k1": { - "version": "4.0.6", - "license": "MIT", + "node_modules/@turbo/workspaces": { + "version": "1.13.4", + "dev": true, + "license": "MPL-2.0", "dependencies": { - "@types/node": "*" + "chalk": "2.4.2", + "commander": "^10.0.0", + "execa": "5.1.1", + "fast-glob": "^3.2.12", + "fs-extra": "^10.1.0", + "gradient-string": "^2.0.0", + "inquirer": "^8.0.0", + "js-yaml": "^4.1.0", + "ora": "4.1.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "update-check": "^1.5.4" + }, + "bin": { + "workspaces": "dist/cli.js" } }, - "node_modules/@types/semver": { - "version": "7.5.8", - "license": "MIT" + "node_modules/@turbo/workspaces/node_modules/semver": { + "version": "7.6.3", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/@types/through": { - "version": "0.0.33", + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" } }, - "node_modules/@types/tinycolor2": { - "version": "1.4.6", + "node_modules/@typechain/hardhat": { + "version": "9.1.0", "dev": true, - "license": "MIT" - }, - "node_modules/@types/underscore": { - "version": "1.11.15", - "license": "MIT" - }, - "node_modules/@types/web3": { - "version": "1.0.20", "license": "MIT", "dependencies": { - "@types/bn.js": "*", - "@types/underscore": "*" + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@typechain/ethers-v6": "^0.5.1", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.2" } }, - "node_modules/@types/web3-provider-engine": { - "version": "14.0.4", + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, "license": "MIT", "dependencies": { - "@types/ethereum-protocol": "*" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/which": { - "version": "3.0.4", + "node_modules/@types/bignumber.js": { + "version": "5.0.0", "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "bignumber.js": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.3.2", + "node_modules/@types/bn.js": { + "version": "5.1.5", "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "@types/node": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "license": "BSD-2-Clause", + "node_modules/@types/chai": { + "version": "4.3.19", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@types/chai": "*" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@types/node": "*" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", + "node_modules/@types/estree": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ethereum-protocol": { + "version": "1.0.5", "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "bignumber.js": "7.2.1" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", + "node_modules/@types/ethereum-protocol/node_modules/bignumber.js": { + "version": "7.2.1", "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": "*" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "license": "BSD-2-Clause", + "node_modules/@types/form-data": { + "version": "0.0.33", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@types/node": "*" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", + "node_modules/@types/fs-extra": { + "version": "11.0.4", + "dev": true, "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/jsonfile": "*", + "@types/node": "*" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": { - "version": "5.3.2", + "node_modules/@types/glob": { + "version": "7.2.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "license": "MIT" }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", + "node_modules/@types/inquirer": { + "version": "6.5.0", + "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "@types/through": "*", + "rxjs": "^6.4.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/@types/inquirer/node_modules/rxjs": { + "version": "6.6.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" }, "engines": { - "node": ">=10" + "npm": ">=2.0.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", + "node_modules/@types/inquirer/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "license": "MIT" + }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@types/node": "*" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node_modules/@types/keyv": { + "version": "3.1.4", + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "node_modules/@wagmi/cli": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/@wagmi/cli/-/cli-2.1.16.tgz", - "integrity": "sha512-uERiNCAwThM6Vwgyrimlf+X8tOF0EjDnir6NHqCoumTquJ1/nlKBvpe0CHD3aDx2RQCOWCqhkUIImtN9yk3Oag==", + "node_modules/@types/lru-cache": { + "version": "5.1.1", "dev": true, - "dependencies": { - "abitype": "^1.0.4", - "bundle-require": "^4.0.2", - "cac": "^6.7.14", - "change-case": "^5.4.4", - "chokidar": "^3.5.3", - "dedent": "^0.7.0", - "dotenv": "^16.3.1", - "dotenv-expand": "^10.0.0", - "esbuild": "^0.19.0", - "execa": "^8.0.1", - "fdir": "^6.1.1", - "find-up": "^6.3.0", - "fs-extra": "^11.2.0", - "ora": "^6.3.1", - "pathe": "^1.1.2", - "picocolors": "^1.0.0", - "picomatch": "^3.0.0", - "prettier": "^3.0.3", - "viem": "2.x", - "zod": "^3.22.2" - }, - "bin": { - "wagmi": "dist/esm/cli.js" - }, - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "dev": true, + "license": "MIT" }, - "node_modules/@wagmi/cli/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], + "node_modules/@types/mocha": { + "version": "10.0.7", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "peer": true + }, + "node_modules/@types/node": { + "version": "22.5.3", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" } }, - "node_modules/@wagmi/cli/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "node_modules/@wagmi/cli/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "node_modules/@types/prettier": { + "version": "2.7.3", "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } + "license": "MIT" }, - "node_modules/@wagmi/cli/node_modules/change-case": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", - "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", - "dev": true + "node_modules/@types/ps-tree": { + "version": "1.1.6", + "dev": true, + "license": "MIT" }, - "node_modules/@wagmi/cli/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "node_modules/@types/qs": { + "version": "6.9.15", "dev": true, - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/@wagmi/cli/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "node_modules/@types/resolve": { + "version": "1.20.2", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "license": "MIT" + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "node_modules/@wagmi/cli/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "@types/node": "*" } }, - "node_modules/@wagmi/cli/node_modules/fdir": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", - "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "node_modules/@types/semver": { + "version": "7.5.8", + "license": "MIT" + }, + "node_modules/@types/through": { + "version": "0.0.33", "dev": true, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "license": "MIT", + "dependencies": { + "@types/node": "*" } }, - "node_modules/@wagmi/cli/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "node_modules/@types/tinycolor2": { + "version": "1.4.6", "dev": true, + "license": "MIT" + }, + "node_modules/@types/underscore": { + "version": "1.11.15", + "license": "MIT" + }, + "node_modules/@types/web3": { + "version": "1.0.20", + "license": "MIT", "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/bn.js": "*", + "@types/underscore": "*" } }, - "node_modules/@wagmi/cli/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, + "node_modules/@types/web3-provider-engine": { + "version": "14.0.4", + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" + "@types/ethereum-protocol": "*" } }, - "node_modules/@wagmi/cli/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/@types/which": { + "version": "3.0.4", "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, "engines": { - "node": ">=16" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@wagmi/cli/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.3.2", + "license": "MIT", "engines": { - "node": ">=16.17.0" + "node": ">= 4" } }, - "node_modules/@wagmi/cli/node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true, - "engines": { - "node": ">=12" + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.3", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/@wagmi/cli/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@wagmi/cli/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "license": "MIT", "dependencies": { - "p-locate": "^6.0.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@wagmi/cli/node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dev": true, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "license": "MIT", "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@wagmi/cli/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "license": "MIT", "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@wagmi/cli/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "license": "BSD-2-Clause", "dependencies": { - "path-key": "^4.0.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@wagmi/cli/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/ora": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", - "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", - "dev": true, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": { + "version": "5.3.2", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "license": "ISC", "dependencies": { - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@wagmi/cli/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/@wagmi/cli/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "license": "MIT", "dependencies": { - "p-limit": "^4.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.3", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" } }, - "node_modules/@wagmi/cli/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">=12" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@wagmi/cli/node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "dev": true, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "license": "Apache-2.0", "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@wagmi/cli/node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "node_modules/@wagmi/cli": { + "version": "2.1.16", "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" + "license": "MIT", + "dependencies": { + "abitype": "^1.0.4", + "bundle-require": "^4.0.2", + "cac": "^6.7.14", + "change-case": "^5.4.4", + "chokidar": "^3.5.3", + "dedent": "^0.7.0", + "dotenv": "^16.3.1", + "dotenv-expand": "^10.0.0", + "esbuild": "^0.19.0", + "execa": "^8.0.1", + "fdir": "^6.1.1", + "find-up": "^6.3.0", + "fs-extra": "^11.2.0", + "ora": "^6.3.1", + "pathe": "^1.1.2", + "picocolors": "^1.0.0", + "picomatch": "^3.0.0", + "prettier": "^3.0.3", + "viem": "2.x", + "zod": "^3.22.2" }, - "engines": { - "node": ">=14" + "bin": { + "wagmi": "dist/esm/cli.js" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/@wagmi/cli/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "url": "https://github.com/sponsors/wevm" }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "peerDependencies": { + "typescript": ">=5.0.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/@wagmi/cli/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/@wagmi/cli/node_modules/ansi-regex": { + "version": "6.1.0", "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/@wagmi/cli/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/@wagmi/cli/node_modules/chalk": { + "version": "5.3.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@wagmi/cli/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/@wagmi/cli/node_modules/change-case": { + "version": "5.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@wagmi/cli/node_modules/cli-cursor": { + "version": "4.0.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "restore-cursor": "^4.0.0" }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@wagmi/cli/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/@wagmi/cli/node_modules/esbuild": { + "version": "0.19.12", "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, - "node_modules/@wagmi/cli/node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "node_modules/@wagmi/cli/node_modules/execa": { + "version": "8.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, "engines": { - "node": ">=12.20" + "node": ">=16.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/abbrev": { - "version": "1.0.9", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/abitype": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.6.tgz", - "integrity": "sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==", + "node_modules/@wagmi/cli/node_modules/fdir": { + "version": "6.4.2", "dev": true, - "funding": { - "url": "https://github.com/sponsors/wevm" - }, + "license": "MIT", "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" + "picomatch": "^3 || ^4" }, "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { + "picomatch": { "optional": true } } }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.5", - "license": "MIT" - }, - "node_modules/abstract-leveldown": { - "version": "2.6.3", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", + "node_modules/@wagmi/cli/node_modules/find-up": { + "version": "6.3.0", + "dev": true, "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/acorn-walk": { - "version": "8.3.3", + "node_modules/@wagmi/cli/node_modules/fs-extra": { + "version": "11.2.0", "dev": true, "license": "MIT", "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk/node_modules/acorn": { - "version": "8.12.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=14.14" } }, - "node_modules/add": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/adm-zip": { - "version": "0.4.16", + "node_modules/@wagmi/cli/node_modules/get-stream": { + "version": "8.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=0.3.0" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "dev": true, - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "6.0.2", + "node_modules/@wagmi/cli/node_modules/human-signals": { + "version": "5.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, + "license": "Apache-2.0", "engines": { - "node": ">= 6.0.0" + "node": ">=16.17.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", + "node_modules/@wagmi/cli/node_modules/is-interactive": { + "version": "2.0.0", "dev": true, "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-contributors-cli": { - "version": "6.26.1", + "node_modules/@wagmi/cli/node_modules/is-stream": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.6", - "async": "^3.1.0", - "chalk": "^4.0.0", - "didyoumean": "^1.2.1", - "inquirer": "^7.3.3", - "json-fixer": "^1.6.8", - "lodash": "^4.11.2", - "node-fetch": "^2.6.0", - "pify": "^5.0.0", - "yargs": "^15.0.1" - }, - "bin": { - "all-contributors": "dist/cli.js" - }, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "optionalDependencies": { - "prettier": "^2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-contributors-cli/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@wagmi/cli/node_modules/is-unicode-supported": { + "version": "1.3.0", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-contributors-cli/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@wagmi/cli/node_modules/locate-path": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-contributors-cli/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/@wagmi/cli/node_modules/log-symbols": { + "version": "5.1.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-contributors-cli/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/all-contributors-cli/node_modules/has-flag": { + "node_modules/@wagmi/cli/node_modules/mimic-fn": { "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-contributors-cli/node_modules/inquirer": { - "version": "7.3.3", + "node_modules/@wagmi/cli/node_modules/npm-run-path": { + "version": "5.3.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-contributors-cli/node_modules/rxjs": { - "version": "6.6.7", + "node_modules/@wagmi/cli/node_modules/onetime": { + "version": "6.0.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "tslib": "^1.9.0" + "mimic-fn": "^4.0.0" }, "engines": { - "npm": ">=2.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-contributors-cli/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/@wagmi/cli/node_modules/ora": { + "version": "6.3.1", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-contributors-cli/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/amdefine": { - "version": "1.0.1", + "node_modules/@wagmi/cli/node_modules/p-limit": { + "version": "4.0.0", "dev": true, - "license": "BSD-3-Clause OR MIT", - "optional": true, - "peer": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, "engines": { - "node": ">=0.4.2" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-align": { - "version": "3.0.1", + "node_modules/@wagmi/cli/node_modules/p-locate": { + "version": "6.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.1.0" + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", + "node_modules/@wagmi/cli/node_modules/path-exists": { + "version": "5.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", + "node_modules/@wagmi/cli/node_modules/path-key": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", + "node_modules/@wagmi/cli/node_modules/picomatch": { + "version": "3.0.1", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/@wagmi/cli/node_modules/prettier": { + "version": "3.3.3", + "dev": true, "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/@wagmi/cli/node_modules/restore-cursor": { + "version": "4.0.0", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/antlr4": { - "version": "4.13.2", + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=6" } }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/anymatch": { - "version": "3.1.3", + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">= 8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", "dev": true, - "license": "Python-2.0" + "license": "ISC" }, - "node_modules/array-back": { - "version": "3.1.0", + "node_modules/@wagmi/cli/node_modules/signal-exit": { + "version": "4.1.0", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=6" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", + "node_modules/@wagmi/cli/node_modules/strip-ansi": { + "version": "7.1.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", + "node_modules/@wagmi/cli/node_modules/strip-final-newline": { + "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/array-uniq": { - "version": "1.0.3", + "node_modules/@wagmi/cli/node_modules/yocto-queue": { + "version": "1.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", + "node_modules/abbrev": { + "version": "1.0.9", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/abitype": { + "version": "1.0.6", "dev": true, "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "funding": { + "url": "https://github.com/sponsors/wevm" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } } }, - "node_modules/asap": { - "version": "2.0.6", - "dev": true, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", "license": "MIT" }, - "node_modules/asn1": { - "version": "0.2.6", + "node_modules/abstract-leveldown": { + "version": "2.6.3", "license": "MIT", "dependencies": { - "safer-buffer": "~2.1.0" + "xtend": "~4.0.0" } }, - "node_modules/assert-plus": { - "version": "1.0.0", + "node_modules/accepts": { + "version": "1.3.8", "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, "engines": { - "node": ">=0.8" + "node": ">= 0.6" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "dev": true, + "node_modules/acorn": { + "version": "7.4.1", "license": "MIT", - "peer": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": "*" + "node": ">=0.4.0" } }, - "node_modules/ast-parents": { - "version": "0.0.1", - "dev": true, - "license": "MIT" + "node_modules/acorn-jsx": { + "version": "5.3.2", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "node_modules/ast-types": { - "version": "0.13.4", + "node_modules/acorn-walk": { + "version": "8.3.3", "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.0.1" + "acorn": "^8.11.0" }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/astral-regex": { - "version": "2.0.0", + "node_modules/acorn-walk/node_modules/acorn": { + "version": "8.12.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.3.0" } }, - "node_modules/async": { - "version": "3.2.6", + "node_modules/aes-js": { + "version": "4.0.0-beta.5", "dev": true, "license": "MIT" }, - "node_modules/async-eventemitter": { - "version": "0.2.4", + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, "license": "MIT", "dependencies": { - "async": "^2.4.0" + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/async-eventemitter/node_modules/async": { - "version": "2.6.4", + "node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, "license": "MIT", "dependencies": { - "lodash": "^4.17.14" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/async-limiter": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/async-mutex": { - "version": "0.2.6", + "node_modules/ajv": { + "version": "6.12.6", "license": "MIT", "dependencies": { - "tslib": "^2.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", + "node_modules/all-contributors-cli": { + "version": "6.26.1", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.6", + "async": "^3.1.0", + "chalk": "^4.0.0", + "didyoumean": "^1.2.1", + "inquirer": "^7.3.3", + "json-fixer": "^1.6.8", + "lodash": "^4.11.2", + "node-fetch": "^2.6.0", + "pify": "^5.0.0", + "yargs": "^15.0.1" + }, + "bin": { + "all-contributors": "dist/cli.js" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=4" + }, + "optionalDependencies": { + "prettier": "^2" } }, - "node_modules/autoprefixer": { - "version": "10.4.20", + "node_modules/all-contributors-cli/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" + "color-convert": "^2.0.1" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", + "node_modules/all-contributors-cli/node_modules/chalk": { + "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { - "possible-typed-array-names": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "license": "Apache-2.0", + "node_modules/all-contributors-cli/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": "*" + "node": ">=7.0.0" } }, - "node_modules/aws4": { - "version": "1.13.2", + "node_modules/all-contributors-cli/node_modules/color-name": { + "version": "1.1.4", + "dev": true, "license": "MIT" }, - "node_modules/axios": { - "version": "0.21.4", + "node_modules/all-contributors-cli/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", + "node_modules/all-contributors-cli/node_modules/inquirer": { + "version": "7.3.3", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "license": "MIT", + "node_modules/all-contributors-cli/node_modules/rxjs": { + "version": "6.6.7", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "tslib": "^1.9.0" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "npm": ">=2.0.0" } }, - "node_modules/backoff": { - "version": "2.5.0", + "node_modules/all-contributors-cli/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { - "precond": "0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base-x": { - "version": "3.0.10", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" + "node": ">=8" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/all-contributors-cli/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" }, - "node_modules/basic-ftp": { - "version": "5.0.5", + "node_modules/amdefine": { + "version": "1.0.1", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause OR MIT", + "optional": true, + "peer": true, "engines": { - "node": ">=10.0.0" + "node": ">=0.4.2" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "license": "BSD-3-Clause", + "node_modules/ansi-align": { + "version": "3.0.1", + "dev": true, + "license": "ISC", "dependencies": { - "tweetnacl": "^0.14.3" + "string-width": "^4.1.0" } }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "license": "Unlicense" - }, - "node_modules/bech32": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/bignumber.js": { - "version": "9.1.2", + "node_modules/ansi-colors": { + "version": "4.1.3", "license": "MIT", "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", + "node_modules/ansi-escapes": { + "version": "4.3.2", "dev": true, "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { "node": ">=8" }, @@ -5157,212 +4321,236 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bl": { - "version": "4.1.0", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/blakejs": { - "version": "1.2.1", - "license": "MIT" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "license": "MIT" + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/body-parser": { - "version": "1.20.2", + "node_modules/ansi-styles": { + "version": "3.2.1", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=4" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", + "node_modules/antlr4": { + "version": "4.13.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", "dependencies": { - "ms": "2.0.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", + "node_modules/arg": { + "version": "4.1.3", + "dev": true, "license": "MIT" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "license": "BSD-3-Clause", + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-back": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "side-channel": "^1.0.4" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" }, "engines": { - "node": ">=0.6" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "dev": true, - "license": "ISC" + "node_modules/array-flatten": { + "version": "1.1.1", + "license": "MIT" }, - "node_modules/boxen": { - "version": "5.1.2", + "node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", "dev": true, "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "4.1.2", + "node_modules/asap": { + "version": "2.0.6", "dev": true, + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.8" } }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/assertion-error": { + "version": "1.1.0", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "peer": true, "engines": { - "node": ">=7.0.0" + "node": "*" } }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", + "node_modules/ast-parents": { + "version": "0.0.1", "dev": true, "license": "MIT" }, - "node_modules/boxen/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/ast-types": { + "version": "0.13.4", "dev": true, "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/astral-regex": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/async": { + "version": "3.2.6", + "dev": true, + "license": "MIT" + }, + "node_modules/async-eventemitter": { + "version": "0.2.4", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "async": "^2.4.0" } }, - "node_modules/braces": { - "version": "3.0.3", + "node_modules/async-eventemitter/node_modules/async": { + "version": "2.6.4", "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" + "lodash": "^4.17.14" } }, - "node_modules/brorand": { - "version": "1.1.0", + "node_modules/async-limiter": { + "version": "1.0.1", "license": "MIT" }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "dev": true, - "license": "ISC" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", + "node_modules/async-mutex": { + "version": "0.2.6", "license": "MIT", "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "tslib": "^2.0.0" } }, - "node_modules/browserslist": { - "version": "4.23.3", + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "dev": true, "funding": [ { "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "url": "https://opencollective.com/postcss/" }, { "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "url": "https://tidelift.com/funding/github/npm/autoprefixer" }, { "type": "github", @@ -5371,46 +4559,111 @@ ], "license": "MIT", "dependencies": { + "browserslist": "^4.23.3", "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" }, "bin": { - "browserslist": "cli.js" + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/bs58": { - "version": "4.0.1", + "node_modules/available-typed-arrays": { + "version": "1.0.7", "license": "MIT", "dependencies": { - "base-x": "^3.0.2" + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "license": "MIT" + }, + "node_modules/axios": { + "version": "0.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/bs58check": { - "version": "2.1.2", + "node_modules/backoff": { + "version": "2.5.0", "license": "MIT", "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "license": "(MIT OR Apache-2.0)", - "bin": { - "btoa": "bin/btoa.js" + "precond": "0.2" }, "engines": { - "node": ">= 0.4.0" + "node": ">= 0.6" } }, - "node_modules/buffer": { - "version": "5.7.1", + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base-x": { + "version": "3.0.10", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", "funding": [ { "type": "github", @@ -5425,394 +4678,350 @@ "url": "https://feross.org/support" } ], + "license": "MIT" + }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "dev": true, "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "license": "MIT" + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" }, - "node_modules/buffer-xor": { - "version": "1.0.3", + "node_modules/bech32": { + "version": "1.1.4", + "dev": true, "license": "MIT" }, - "node_modules/bufferutil": { - "version": "4.0.8", - "hasInstallScript": true, + "node_modules/bignumber.js": { + "version": "9.1.2", "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.3.0" - }, "engines": { - "node": ">=6.14.2" + "node": "*" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", + "node_modules/binary-extensions": { + "version": "2.3.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bundle-require": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.2.1.tgz", - "integrity": "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==", + "node_modules/bl": { + "version": "4.1.0", "dev": true, + "license": "MIT", "dependencies": { - "load-tsconfig": "^0.2.3" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "esbuild": ">=0.17" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/bytes": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "node_modules/blakejs": { + "version": "1.2.1", + "license": "MIT" }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/bluebird": { + "version": "3.7.2", + "license": "MIT" }, - "node_modules/cacheable-lookup": { - "version": "6.1.0", - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } + "node_modules/bn.js": { + "version": "5.2.1", + "license": "MIT" }, - "node_modules/cacheable-request": { - "version": "7.0.4", + "node_modules/body-parser": { + "version": "1.20.2", "license": "MIT", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", "license": "MIT", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "ms": "2.0.0" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { + "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/call-bind": { - "version": "1.0.7", - "license": "MIT", + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "license": "BSD-3-Clause", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "side-channel": "^1.0.4" }, "engines": { - "node": ">= 0.4" + "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001655", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/caseless": { - "version": "0.12.0", - "license": "Apache-2.0" - }, - "node_modules/cbor": { - "version": "8.1.0", + "node_modules/boolbase": { + "version": "1.0.0", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } + "license": "ISC" }, - "node_modules/chai": { - "version": "4.5.0", + "node_modules/boxen": { + "version": "5.1.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chai-as-promised": { - "version": "7.1.2", + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "license": "WTFPL", - "peer": true, + "license": "MIT", "dependencies": { - "check-error": "^1.0.2" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/chalk": { - "version": "2.4.2", + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/change-case": { - "version": "3.1.0", + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "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" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/chardet": { - "version": "0.7.0", + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/charenc": { - "version": "0.0.2", + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/check-error": { - "version": "1.0.3", + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "get-func-name": "^2.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/checkpoint-store": { - "version": "1.1.0", - "license": "ISC", + "node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "functional-red-black-tree": "^1.0.1" + "balanced-match": "^1.0.0" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "dev": true, + "node_modules/braces": { + "version": "3.0.3", "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "fill-range": "^7.1.1" }, "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=8" } }, - "node_modules/chownr": { - "version": "1.1.4", - "license": "ISC" + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" }, - "node_modules/ci-info": { - "version": "2.0.0", + "node_modules/browser-stdout": { + "version": "1.3.1", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/cids": { - "version": "0.7.5", + "node_modules/browserify-aes": { + "version": "1.2.0", "license": "MIT", "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", + "node_modules/bs58": { + "version": "4.0.1", "license": "MIT", "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" + "base-x": "^3.0.2" } }, - "node_modules/cipher-base": { - "version": "1.0.4", + "node_modules/bs58check": { + "version": "2.1.2", "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/citty": { - "version": "0.1.6", - "dev": true, + "node_modules/btoa": { + "version": "1.2.1", + "license": "(MIT OR Apache-2.0)", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "consola": "^3.2.3" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/class-is": { - "version": "1.1.0", + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, "license": "MIT" }, - "node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "hasInstallScript": true, "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, "engines": { - "node": ">=6" + "node": ">=6.14.2" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", + "node_modules/builtin-modules": { + "version": "3.3.0", "dev": true, "license": "MIT", "engines": { @@ -5822,1231 +5031,1204 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", + "node_modules/bundle-require": { + "version": "4.2.1", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "load-tsconfig": "^0.2.3" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.17" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "dev": true, + "node_modules/bytes": { + "version": "3.1.2", "license": "MIT", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/cli-table3": { - "version": "0.6.5", + "node_modules/cac": { + "version": "6.7.14", "dev": true, "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "node": ">=8" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "dev": true, - "license": "ISC", + "node_modules/cacheable-lookup": { + "version": "6.1.0", + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=10.6.0" } }, - "node_modules/cliui": { - "version": "6.0.0", - "dev": true, - "license": "ISC", + "node_modules/cacheable-request": { + "version": "7.0.4", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "pump": "^3.0.0" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, + "node_modules/call-bind": { + "version": "1.0.7", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/clone": { - "version": "1.0.4", - "dev": true, + "node_modules/callsites": { + "version": "3.1.0", "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">=6" } }, - "node_modules/clone-response": { - "version": "1.0.3", + "node_modules/camel-case": { + "version": "3.0.0", + "dev": true, "license": "MIT", "dependencies": { - "mimic-response": "^1.0.0" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color-convert": { - "version": "1.9.3", + "node_modules/caniuse-api": { + "version": "3.0.0", + "dev": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" + "node_modules/caniuse-lite": { + "version": "1.0.30001655", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/colord": { - "version": "2.9.3", - "dev": true, - "license": "MIT" + "node_modules/caseless": { + "version": "0.12.0", + "license": "Apache-2.0" }, - "node_modules/colors": { - "version": "1.4.0", + "node_modules/cbor": { + "version": "8.1.0", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, "engines": { - "node": ">=0.1.90" + "node": ">=12.19" } }, - "node_modules/combined-stream": { - "version": "1.0.8", + "node_modules/chai": { + "version": "4.5.0", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "delayed-stream": "~1.0.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/command-exists": { - "version": "1.2.9", + "node_modules/chai-as-promised": { + "version": "7.1.2", "dev": true, - "license": "MIT" + "license": "WTFPL", + "peer": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } }, - "node_modules/command-line-args": { - "version": "5.2.1", - "dev": true, + "node_modules/chalk": { + "version": "2.4.2", "license": "MIT", "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=4" } }, - "node_modules/command-line-usage": { - "version": "6.1.3", + "node_modules/change-case": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" + "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" } }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/charenc": { + "version": "0.0.2", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", + "node_modules/check-error": { + "version": "1.0.3", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/commander": { - "version": "10.0.1", + "node_modules/checkpoint-store": { + "version": "1.1.0", + "license": "ISC", + "dependencies": { + "functional-red-black-tree": "^1.0.1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", "dev": true, "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": ">=14" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" + "node_modules/chownr": { + "version": "1.1.4", + "license": "ISC" }, - "node_modules/concat-map": { - "version": "0.0.1", + "node_modules/ci-info": { + "version": "2.0.0", + "dev": true, "license": "MIT" }, - "node_modules/concat-stream": { - "version": "1.6.2", - "dev": true, - "engines": [ - "node >= 0.8" - ], + "node_modules/cids": { + "version": "0.7.5", "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, + "node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "buffer": "^5.6.0", + "varint": "^5.0.0" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" + "node_modules/cipher-base": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/citty": { + "version": "0.1.6", "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "consola": "^3.2.3" } }, - "node_modules/confbox": { - "version": "0.1.7", - "dev": true, + "node_modules/class-is": { + "version": "1.1.0", "license": "MIT" }, - "node_modules/consola": { - "version": "3.2.3", + "node_modules/clean-stack": { + "version": "2.2.0", "dev": true, "license": "MIT", "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": ">=6" } }, - "node_modules/constant-case": { - "version": "2.0.0", + "node_modules/cli-boxes": { + "version": "2.2.1", "dev": true, "license": "MIT", - "dependencies": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/content-disposition": { - "version": "0.5.4", + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-hash": { - "version": "2.5.2", - "license": "ISC", - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.4.2", + "node_modules/cli-spinners": { + "version": "2.9.2", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.38.1", + "node_modules/cli-table3": { + "version": "0.6.5", + "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3" + "string-width": "^4.2.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/core-js-pure": { - "version": "3.38.1", + "node_modules/cli-width": { + "version": "3.0.0", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "license": "ISC", + "engines": { + "node": ">= 10" } }, - "node_modules/core-util-is": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "license": "MIT", + "node_modules/cliui": { + "version": "6.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/cosmiconfig": { - "version": "8.3.6", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "5.2.0", + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/crc-32": { - "version": "1.2.2", - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, + "node_modules/clone": { + "version": "1.0.4", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, - "node_modules/create-hash": { - "version": "1.2.0", + "node_modules/clone-response": { + "version": "1.0.3", "license": "MIT", "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/create-hmac": { - "version": "1.1.7", + "node_modules/color-convert": { + "version": "1.9.3", "license": "MIT", "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "color-name": "1.1.3" } }, - "node_modules/create-require": { - "version": "1.1.1", + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", "dev": true, "license": "MIT" }, - "node_modules/cross-fetch": { - "version": "4.0.0", + "node_modules/colors": { + "version": "1.4.0", "dev": true, "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" + "engines": { + "node": ">=0.1.90" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/combined-stream": { + "version": "1.0.8", "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.8" } }, - "node_modules/crypt": { - "version": "0.0.2", + "node_modules/command-exists": { + "version": "1.2.9", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } + "license": "MIT" }, - "node_modules/crypto-random-string": { - "version": "2.0.0", + "node_modules/command-line-args": { + "version": "5.2.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" }, - "peerDependencies": { - "postcss": "^8.0.9" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/css-select": { - "version": "5.1.0", + "node_modules/command-line-usage": { + "version": "6.1.3", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/css-tree": { - "version": "2.3.1", + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", "dev": true, "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/css-what": { - "version": "6.1.0", + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node": ">=8" } }, - "node_modules/cssesc": { - "version": "3.0.0", + "node_modules/commander": { + "version": "10.0.1", "dev": true, "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, "engines": { - "node": ">=4" + "node": ">=14" } }, - "node_modules/cssnano": { - "version": "7.0.5", + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", "dev": true, + "engines": [ + "node >= 0.8" + ], "license": "MIT", "dependencies": { - "cssnano-preset-default": "^7.0.5", - "lilconfig": "^3.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/cssnano-preset-default": { - "version": "7.0.5", + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^5.0.0", - "postcss-calc": "^10.0.1", - "postcss-colormin": "^7.0.2", - "postcss-convert-values": "^7.0.3", - "postcss-discard-comments": "^7.0.2", - "postcss-discard-duplicates": "^7.0.1", - "postcss-discard-empty": "^7.0.0", - "postcss-discard-overridden": "^7.0.0", - "postcss-merge-longhand": "^7.0.3", - "postcss-merge-rules": "^7.0.3", - "postcss-minify-font-values": "^7.0.0", - "postcss-minify-gradients": "^7.0.0", - "postcss-minify-params": "^7.0.2", - "postcss-minify-selectors": "^7.0.3", - "postcss-normalize-charset": "^7.0.0", - "postcss-normalize-display-values": "^7.0.0", - "postcss-normalize-positions": "^7.0.0", - "postcss-normalize-repeat-style": "^7.0.0", - "postcss-normalize-string": "^7.0.0", - "postcss-normalize-timing-functions": "^7.0.0", - "postcss-normalize-unicode": "^7.0.2", - "postcss-normalize-url": "^7.0.0", - "postcss-normalize-whitespace": "^7.0.0", - "postcss-ordered-values": "^7.0.1", - "postcss-reduce-initial": "^7.0.2", - "postcss-reduce-transforms": "^7.0.0", - "postcss-svgo": "^7.0.1", - "postcss-unique-selectors": "^7.0.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/cssnano-utils": { - "version": "5.0.0", + "node_modules/confbox": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.2.3", "dev": true, "license": "MIT", "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/csso": { - "version": "5.0.5", + "node_modules/constant-case": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "dev": true, + "node_modules/content-disposition": { + "version": "0.5.4", "license": "MIT", "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" + "safe-buffer": "5.2.1" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "node": ">= 0.6" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/d": { - "version": "1.0.2", + "node_modules/content-hash": { + "version": "2.5.2", "license": "ISC", "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, - "engines": { - "node": ">=0.12" + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" } }, - "node_modules/dashdash": { - "version": "1.14.1", + "node_modules/content-type": { + "version": "1.0.5", "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, "engines": { - "node": ">=0.10" + "node": ">= 0.6" } }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", + "node_modules/convert-source-map": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", "dev": true, "license": "MIT", "engines": { - "node": ">= 14" + "node": ">= 0.6" } }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "dev": true, + "node_modules/cookie-signature": { + "version": "1.0.6", + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.38.1", "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "browserslist": "^4.23.3" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", + "node_modules/core-js-pure": { + "version": "3.38.1", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "dev": true, + "node_modules/core-util-is": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.10" } }, - "node_modules/death": { - "version": "1.1.0", + "node_modules/cosmiconfig": { + "version": "8.3.6", "dev": true, - "peer": true - }, - "node_modules/debug": { - "version": "4.3.6", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" }, "peerDependenciesMeta": { - "supports-color": { + "typescript": { "optional": true } } }, - "node_modules/decamelize": { - "version": "1.2.0", + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "license": "MIT", "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-eql": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "type-detect": "^4.0.0" + "node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" }, "engines": { - "node": ">=6" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" + "node": ">=0.8" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "dev": true, + "node_modules/create-hash": { + "version": "1.2.0", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/defaults": { - "version": "1.0.4", - "dev": true, + "node_modules/create-hmac": { + "version": "1.1.7", "license": "MIT", "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=10" - } + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" }, - "node_modules/deferred-leveldown": { - "version": "1.2.2", + "node_modules/cross-fetch": { + "version": "4.0.0", + "dev": true, "license": "MIT", "dependencies": { - "abstract-leveldown": "~2.6.0" + "node-fetch": "^2.6.12" } }, - "node_modules/define-data-property": { - "version": "1.1.4", + "node_modules/cross-spawn": { + "version": "7.0.3", "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, - "node_modules/define-properties": { - "version": "1.2.1", + "node_modules/crypt": { + "version": "0.0.2", "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "*" } }, - "node_modules/defu": { - "version": "6.1.4", + "node_modules/crypto-random-string": { + "version": "2.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/degenerator": { - "version": "5.0.1", + "node_modules/css-declaration-sorter": { + "version": "7.2.0", "dev": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, + "license": "ISC", "engines": { - "node": ">= 14" + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/del": { + "node_modules/css-select": { "version": "5.1.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "globby": "^10.0.1", - "graceful-fs": "^4.2.2", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.1", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/del/node_modules/p-map": { - "version": "3.0.0", + "node_modules/css-tree": { + "version": "2.3.1", "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", + "node_modules/css-what": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=0.4.0" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/depd": { - "version": "2.0.0", + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/destroy": { - "version": "1.2.0", + "node_modules/cssnano": { + "version": "7.0.5", + "dev": true, "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.5", + "lilconfig": "^3.1.2" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/didyoumean": { - "version": "1.2.2", + "node_modules/cssnano-preset-default": { + "version": "7.0.5", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.1", + "postcss-colormin": "^7.0.2", + "postcss-convert-values": "^7.0.3", + "postcss-discard-comments": "^7.0.2", + "postcss-discard-duplicates": "^7.0.1", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.3", + "postcss-merge-rules": "^7.0.3", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.2", + "postcss-minify-selectors": "^7.0.3", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.2", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.2", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/diff": { - "version": "5.2.0", + "node_modules/cssnano-utils": { + "version": "5.0.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.3.1" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/difflib": { - "version": "0.2.4", + "node_modules/csso": { + "version": "5.0.5", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "heap": ">= 0.2.0" + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "dev": true, "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/d": { + "version": "1.0.2", + "license": "ISC", "dependencies": { - "esutils": "^2.0.2" + "es5-ext": "^0.10.64", + "type": "^2.7.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.12" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "dev": true, + "node_modules/dashdash": { + "version": "1.14.1", "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "assert-plus": "^1.0.0" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": ">=0.10" } }, - "node_modules/dom-walk": { - "version": "0.1.2" - }, - "node_modules/domelementtype": { - "version": "2.3.0", + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" + "license": "MIT", + "engines": { + "node": ">= 14" + } }, - "node_modules/domhandler": { - "version": "5.0.3", + "node_modules/data-view-buffer": { + "version": "1.0.1", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">= 4" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/domutils": { - "version": "3.1.0", + "node_modules/data-view-byte-length": { + "version": "1.0.1", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dot-case": { - "version": "2.1.1", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "dev": true, - "license": "BSD-2-Clause", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "node_modules/death": { + "version": "1.1.0", "dev": true, + "peer": true + }, + "node_modules/debug": { + "version": "4.3.6", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">=12" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/duplexer": { - "version": "0.1.2", + "node_modules/decamelize": { + "version": "1.2.0", "dev": true, - "license": "MIT" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ecc-jsbn/node_modules/jsbn": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.13", - "license": "ISC" - }, - "node_modules/elliptic": { - "version": "6.5.4", + "node_modules/decode-uri-component": { + "version": "0.2.2", "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "engines": { + "node": ">=0.10" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/encode-utf8": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", + "node_modules/decompress-response": { + "version": "6.0.0", "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", "license": "MIT", - "dependencies": { - "once": "^1.4.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/enquirer": { - "version": "2.4.1", + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "type-detect": "^4.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=6" } }, - "node_modules/entities": { - "version": "4.5.0", + "node_modules/deep-extend": { + "version": "0.6.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=4.0.0" } }, - "node_modules/env-paths": { - "version": "2.2.1", + "node_modules/deep-is": { + "version": "0.1.4", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/errno": { - "version": "0.1.8", + "node_modules/defaults": { + "version": "1.0.4", + "dev": true, "license": "MIT", "dependencies": { - "prr": "~1.0.1" + "clone": "^1.0.2" }, - "bin": { - "errno": "cli.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, + "node_modules/defer-to-connect": { + "version": "2.0.1", "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "engines": { + "node": ">=10" } }, - "node_modules/es-abstract": { - "version": "1.23.3", - "dev": true, + "node_modules/deferred-leveldown": { + "version": "1.2.2", "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7055,476 +6237,519 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-define-property": { - "version": "1.0.0", + "node_modules/define-properties": { + "version": "1.2.1", + "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.4", + "node_modules/defu": { + "version": "6.1.4", "dev": true, "license": "MIT" }, - "node_modules/es-object-atoms": { - "version": "1.0.0", + "node_modules/degenerator": { + "version": "5.0.1", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 14" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", + "node_modules/del": { + "version": "5.1.0", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "globby": "^10.0.1", + "graceful-fs": "^4.2.2", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.1", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/del/node_modules/p-map": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/es5-ext": { - "version": "0.10.64", - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" - }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">=0.4.0" } }, - "node_modules/es6-iterator": { - "version": "2.0.3", + "node_modules/depd": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "engines": { + "node": ">= 0.8" } }, - "node_modules/es6-promise": { - "version": "4.2.8", - "license": "MIT" + "node_modules/destroy": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, - "node_modules/es6-symbol": { - "version": "3.1.4", - "license": "ISC", - "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, + "node_modules/didyoumean": { + "version": "1.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/diff": { + "version": "5.2.0", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=0.12" + "node": ">=0.3.1" } }, - "node_modules/esbuild": { - "version": "0.17.19", + "node_modules/difflib": { + "version": "0.2.4", "dev": true, - "hasInstallScript": true, + "peer": true, + "dependencies": { + "heap": ">= 0.2.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "path-type": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", - "cpu": [ - "arm" - ], + "node_modules/dom-serializer": { + "version": "2.0.0", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], + "node_modules/dom-walk": { + "version": "0.1.2" + }, + "node_modules/domelementtype": { + "version": "2.3.0", "dev": true, - "optional": true, - "os": [ - "android" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, "engines": { - "node": ">=12" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], + "node_modules/domutils": { + "version": "3.1.0", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], + "node_modules/dot-case": { + "version": "2.1.1", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "no-case": "^2.2.0" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], + "node_modules/dotenv": { + "version": "16.4.5", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "BSD-2-Clause", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], + "node_modules/dotenv-expand": { + "version": "10.0.0", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], + "node_modules/duplexer": { + "version": "0.1.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/ecc-jsbn/node_modules/jsbn": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.13", + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.8" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8.6" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], + "node_modules/entities": { + "version": "4.5.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], + "node_modules/env-paths": { + "version": "2.2.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], + "node_modules/errno": { + "version": "0.1.8", + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], + "node_modules/es-abstract": { + "version": "1.23.3", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/es-define-property": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], + "node_modules/es-module-lexer": { + "version": "1.5.4", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], + "node_modules/es-set-tostringtag": { + "version": "2.0.3", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" } }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], + "node_modules/es-to-primitive": { + "version": "1.2.1", "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], + "node_modules/es5-ext": { + "version": "0.10.64", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, "engines": { - "node": ">=12" + "node": ">=0.10" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], + "node_modules/es6-iterator": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "license": "MIT" + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, "engines": { - "node": ">=12" + "node": ">=0.12" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { + "node_modules/esbuild": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], "dev": true, - "optional": true, - "os": [ - "win32" - ], + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" } }, "node_modules/escalade": { @@ -7642,6 +6867,17 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-config-turbo": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-2.2.1.tgz", + "integrity": "sha512-cDvPCMSlcyNe5+a3tEZoF/gsZ8WrCddAdqcN/qvBGVD7IL1XdxWerFCfgU/R2fT9JFjyqRhsJnmcbbbwyXockw==", + "dependencies": { + "eslint-plugin-turbo": "2.2.1" + }, + "peerDependencies": { + "eslint": ">6.6.0" + } + }, "node_modules/eslint-plugin-prettier": { "version": "4.2.1", "license": "MIT", @@ -7661,6 +6897,25 @@ } } }, + "node_modules/eslint-plugin-turbo": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-2.2.1.tgz", + "integrity": "sha512-ajKdYtqLC238QGA4SpAFHp6dZICcEktB5oLOnMXz84M+pS9FlGBiUmonrBkmdTEm5jakxqmSdt/cq9J2hWm6mg==", + "dependencies": { + "dotenv": "16.0.3" + }, + "peerDependencies": { + "eslint": ">6.6.0" + } + }, + "node_modules/eslint-plugin-turbo/node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "license": "BSD-2-Clause", @@ -9840,9 +9095,8 @@ }, "node_modules/hardhat-deploy": { "version": "0.12.4", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.12.4.tgz", - "integrity": "sha512-bYO8DIyeGxZWlhnMoCBon9HNZb6ji0jQn7ngP1t5UmGhC8rQYhji7B73qETMOFhzt5ECZPr+U52duj3nubsqdQ==", "dev": true, + "license": "MIT", "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -9927,8 +9181,6 @@ }, "node_modules/hardhat-deploy/node_modules/ethers": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "dev": true, "funding": [ { @@ -9940,6 +9192,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -10023,6 +9276,105 @@ "typechain": "8.x" } }, + "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", + "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.1.1", + "typescript": ">=4.3.0" + } + }, + "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", + "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@typechain/ethers-v5": "^10.2.1", + "ethers": "^5.4.7", + "hardhat": "^2.9.9", + "typechain": "^8.1.1" + } + }, + "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hardhat-packager/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", "dev": true, @@ -11084,8 +10436,6 @@ }, "node_modules/isows": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.6.tgz", - "integrity": "sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==", "dev": true, "funding": [ { @@ -11093,6 +10443,7 @@ "url": "https://github.com/sponsors/wevm" } ], + "license": "MIT", "peerDependencies": { "ws": "*" } @@ -11529,9 +10880,8 @@ }, "node_modules/load-tsconfig": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", - "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -11712,721 +11062,369 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lru_map": { - "version": "0.3.3", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "7.18.3", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "license": "MIT" - }, - "node_modules/magic-string": { - "version": "0.30.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/map-stream": { - "version": "0.1.0", - "dev": true - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/markdown-table-ts": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/match-all": { - "version": "1.2.6", - "dev": true, - "license": "MIT" - }, - "node_modules/md5.js": { - "version": "1.3.5", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memdown": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/memdown/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/memorystream": { - "version": "0.3.1", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "license": "MPL-2.0", - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "license": "MIT" - }, - "node_modules/merkle-patricia-tree/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/merkle-patricia-tree/node_modules/readable-stream": { - "version": "2.3.8", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/merkle-patricia-tree/node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", + "node_modules/lru_map": { + "version": "0.3.3", + "dev": true, "license": "MIT" }, - "node_modules/minimatch": { - "version": "9.0.5", + "node_modules/lru-cache": { + "version": "7.18.3", "dev": true, "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=12" } }, - "node_modules/minimist": { - "version": "1.2.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/ltgt": { + "version": "2.2.1", + "license": "MIT" }, - "node_modules/minipass": { - "version": "2.9.0", - "license": "ISC", + "node_modules/magic-string": { + "version": "0.30.11", + "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/minizlib": { - "version": "1.3.3", + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/map-stream": { + "version": "0.1.0", + "dev": true + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/markdown-table-ts": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/match-all": { + "version": "1.2.6", + "dev": true, + "license": "MIT" + }, + "node_modules/md5.js": { + "version": "1.3.5", "license": "MIT", "dependencies": { - "minipass": "^2.9.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/mkdirp": { - "version": "0.5.6", + "node_modules/mdn-data": { + "version": "2.0.30", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">= 0.6" } }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "license": "ISC", + "node_modules/memdown": { + "version": "1.4.1", + "license": "MIT", "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" } }, - "node_modules/mkdist": { - "version": "1.5.5", - "dev": true, + "node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", "license": "MIT", "dependencies": { - "autoprefixer": "^10.4.20", - "citty": "^0.1.6", - "cssnano": "^7.0.5", - "defu": "^6.1.4", - "esbuild": "^0.23.1", - "fast-glob": "^3.3.2", - "jiti": "^1.21.6", - "mlly": "^1.7.1", - "pathe": "^1.1.2", - "pkg-types": "^1.1.3", - "postcss": "^8.4.41", - "postcss-nested": "^6.2.0", - "semver": "^7.6.3" - }, - "bin": { - "mkdist": "dist/cli.cjs" - }, - "peerDependencies": { - "sass": "^1.77.8", - "typescript": ">=5.5.4", - "vue-tsc": "^1.8.27 || ^2.0.21" - }, - "peerDependenciesMeta": { - "sass": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - } + "xtend": "~4.0.0" } }, - "node_modules/mkdist/node_modules/@esbuild/aix-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", - "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } + "node_modules/memdown/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" }, - "node_modules/mkdist/node_modules/@esbuild/android-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", - "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", - "cpu": [ - "arm" - ], + "node_modules/memorystream": { + "version": "0.3.1", "dev": true, - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=18" + "node": ">= 0.10.0" } }, - "node_modules/mkdist/node_modules/@esbuild/android-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", - "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", - "cpu": [ - "arm64" - ], + "node_modules/merge-descriptors": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 8" } }, - "node_modules/mkdist/node_modules/@esbuild/android-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" + "node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "license": "MPL-2.0", + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" } }, - "node_modules/mkdist/node_modules/@esbuild/darwin-arm64": { - "version": "0.23.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "license": "MIT" + }, + "node_modules/merkle-patricia-tree/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/mkdist/node_modules/@esbuild/darwin-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "node_modules/merkle-patricia-tree/node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/merkle-patricia-tree/node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/mkdist/node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } + "node_modules/merkle-patricia-tree/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" }, - "node_modules/mkdist/node_modules/@esbuild/freebsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "node_modules/merkle-patricia-tree/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/methods": { + "version": "1.1.2", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", - "cpu": [ - "arm64" - ], + "node_modules/micro-ftch": { + "version": "0.3.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">=18" + "node": ">=8.6" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/mime": { + "version": "1.6.0", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-loong64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-mips64el": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, "engines": { - "node": ">=18" + "node": ">= 0.6" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", - "cpu": [ - "ppc64" - ], + "node_modules/mimic-fn": { + "version": "2.1.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-riscv64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/mimic-response": { + "version": "1.0.1", + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=4" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-s390x": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "node_modules/min-document": { + "version": "2.19.0", + "dependencies": { + "dom-walk": "^0.1.0" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", - "cpu": [ - "x64" - ], + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "9.0.5", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=18" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mkdist/node_modules/@esbuild/netbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mkdist/node_modules/@esbuild/openbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "node_modules/minipass": { + "version": "2.9.0", + "license": "ISC", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "node_modules/mkdist/node_modules/@esbuild/sunos-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" + "node_modules/minizlib": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "minipass": "^2.9.0" } }, - "node_modules/mkdist/node_modules/@esbuild/win32-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "node_modules/mkdirp": { + "version": "0.5.6", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/mkdist/node_modules/@esbuild/win32-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "license": "ISC", + "dependencies": { + "mkdirp": "*" + }, "engines": { - "node": ">=18" + "node": ">=4" + } + }, + "node_modules/mkdist": { + "version": "1.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "autoprefixer": "^10.4.20", + "citty": "^0.1.6", + "cssnano": "^7.0.5", + "defu": "^6.1.4", + "esbuild": "^0.23.1", + "fast-glob": "^3.3.2", + "jiti": "^1.21.6", + "mlly": "^1.7.1", + "pathe": "^1.1.2", + "pkg-types": "^1.1.3", + "postcss": "^8.4.41", + "postcss-nested": "^6.2.0", + "semver": "^7.6.3" + }, + "bin": { + "mkdist": "dist/cli.cjs" + }, + "peerDependencies": { + "sass": "^1.77.8", + "typescript": ">=5.5.4", + "vue-tsc": "^1.8.27 || ^2.0.21" + }, + "peerDependenciesMeta": { + "sass": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vue-tsc": { + "optional": true + } } }, - "node_modules/mkdist/node_modules/@esbuild/win32-x64": { + "node_modules/mkdist/node_modules/@esbuild/darwin-arm64": { "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", - "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "cpu": [ - "x64" + "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { "node": ">=18" @@ -13815,231 +12813,21 @@ "version": "1.0.0", "license": "MIT", "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.44", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "10.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12 || ^20.9 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.38" - } - }, - "node_modules/postcss-colormin": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-comments": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^7.0.3" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^5.0.0", - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">= 0.4" } }, - "node_modules/postcss-nested": { - "version": "6.2.0", + "node_modules/postcss": { + "version": "8.4.44", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, { "type": "github", "url": "https://github.com/sponsors/ai" @@ -14047,59 +12835,37 @@ ], "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-normalize-positions": { - "version": "7.0.0", + "node_modules/postcss-calc": { + "version": "10.0.2", "dev": true, "license": "MIT", "dependencies": { + "postcss-selector-parser": "^6.1.2", "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" + "node": "^18.12 || ^20.9 || >=22.0" }, "peerDependencies": { - "postcss": "^8.4.31" + "postcss": "^8.4.38" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "7.0.0", + "node_modules/postcss-colormin": { + "version": "7.0.2", "dev": true, "license": "MIT", "dependencies": { + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -14109,11 +12875,12 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-string": { - "version": "7.0.0", + "node_modules/postcss-convert-values": { + "version": "7.0.3", "dev": true, "license": "MIT", "dependencies": { + "browserslist": "^4.23.3", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -14123,12 +12890,12 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "7.0.0", + "node_modules/postcss-discard-comments": { + "version": "7.0.2", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "postcss-selector-parser": "^6.1.1" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" @@ -14137,14 +12904,10 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-unicode": { - "version": "7.0.2", + "node_modules/postcss-discard-duplicates": { + "version": "7.0.1", "dev": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "postcss-value-parser": "^4.2.0" - }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, @@ -14152,13 +12915,10 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-url": { + "node_modules/postcss-discard-empty": { "version": "7.0.0", "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, @@ -14166,13 +12926,10 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-normalize-whitespace": { + "node_modules/postcss-discard-overridden": { "version": "7.0.0", "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" }, @@ -14180,13 +12937,13 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-ordered-values": { - "version": "7.0.1", + "node_modules/postcss-merge-longhand": { + "version": "7.0.3", "dev": true, "license": "MIT", "dependencies": { - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.3" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" @@ -14195,13 +12952,15 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-reduce-initial": { - "version": "7.0.2", + "node_modules/postcss-merge-rules": { + "version": "7.0.3", "dev": true, "license": "MIT", "dependencies": { "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0" + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.1" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" @@ -14210,7 +12969,7 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-reduce-transforms": { + "node_modules/postcss-minify-font-values": { "version": "7.0.0", "dev": true, "license": "MIT", @@ -14224,39 +12983,30 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "7.0.1", + "node_modules/postcss-minify-gradients": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.3.2" + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >= 18" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "peerDependencies": { "postcss": "^8.4.31" } }, - "node_modules/postcss-unique-selectors": { + "node_modules/postcss-minify-params": { "version": "7.0.2", "dev": true, "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.1" + "browserslist": "^4.23.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^18.12.0 || ^20.9.0 || >=22.0" @@ -14265,836 +13015,692 @@ "postcss": "^8.4.31" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/precond": { - "version": "0.2.3", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/prettier-plugin-solidity": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@solidity-parser/parser": "^0.18.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "prettier": ">=2.3.0" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "dev": true, - "license": "MIT" - }, - "node_modules/prettier-plugin-solidity/node_modules/semver": { - "version": "7.6.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pretty-bytes": { - "version": "6.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/process": { - "version": "0.11.10", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/progress": { - "version": "2.0.3", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "8.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/promise-to-callback": { - "version": "1.0.0", + "node_modules/postcss-minify-selectors": { + "version": "7.0.3", + "dev": true, "license": "MIT", "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": ">=0.10.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", + "node_modules/postcss-nested": { + "version": "6.2.0", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": ">= 0.10" + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" } }, - "node_modules/proxy-agent": { - "version": "6.4.0", + "node_modules/postcss-normalize-charset": { + "version": "7.0.0", "dev": true, "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - }, "engines": { - "node": ">= 14" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.1", + "node_modules/postcss-normalize-display-values": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.4" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 14" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", + "node_modules/postcss-normalize-positions": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 14" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/prr": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/ps-tree": { - "version": "1.2.0", + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.10" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/psl": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", + "node_modules/postcss-normalize-string": { + "version": "7.0.0", + "dev": true, "license": "MIT", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "license": "MIT", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=6" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/qs": { - "version": "6.13.0", + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "side-channel": "^1.0.6" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.6" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/query-string": { - "version": "5.1.1", + "node_modules/postcss-normalize-unicode": { + "version": "7.0.2", + "dev": true, "license": "MIT", "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", + "node_modules/postcss-normalize-url": { + "version": "7.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=10" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/randombytes": { - "version": "2.1.0", + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.0", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "^5.1.0" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/range-parser": { - "version": "1.2.1", + "node_modules/postcss-ordered-values": { + "version": "7.0.1", + "dev": true, "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">= 0.6" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/raw-body": { - "version": "2.5.2", + "node_modules/postcss-reduce-initial": { + "version": "7.0.2", + "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0" }, "engines": { - "node": ">= 0.8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/rc": { - "version": "1.2.8", + "node_modules/postcss-reduce-transforms": { + "version": "7.0.0", "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "license": "MIT", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "postcss-value-parser": "^4.2.0" }, - "bin": { - "rc": "cli.js" + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", + "node_modules/postcss-selector-parser": { + "version": "6.1.2", "dev": true, "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } - }, - "node_modules/read-pkg": { - "version": "3.0.0", + }, + "node_modules/postcss-svgo": { + "version": "7.0.1", "dev": true, "license": "MIT", "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "postcss-value-parser": "^4.2.0", + "svgo": "^3.3.2" }, "engines": { - "node": ">=4" + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", + "node_modules/postcss-unique-selectors": { + "version": "7.0.2", "dev": true, "license": "MIT", "dependencies": { - "pify": "^3.0.0" + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": ">=4" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", + "node_modules/postcss-value-parser": { + "version": "4.2.0", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/precond": { + "version": "0.2.3", "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/readable-stream": { - "version": "3.6.2", + "node_modules/prelude-ls": { + "version": "1.2.1", "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": ">= 0.8.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, + "node_modules/prettier": { + "version": "2.8.8", "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=8.10.0" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "dev": true, - "peer": true, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "license": "MIT", "dependencies": { - "resolve": "^1.1.6" + "fast-diff": "^1.1.2" }, "engines": { - "node": ">= 0.10" + "node": ">=6.0.0" } }, - "node_modules/recursive-readdir": { - "version": "2.2.3", + "node_modules/prettier-plugin-solidity": { + "version": "1.4.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "minimatch": "^3.0.5" + "@solidity-parser/parser": "^0.18.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=16" + }, + "peerDependencies": { + "prettier": ">=2.3.0" } }, - "node_modules/recursive-readdir/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { + "version": "0.18.0", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "license": "MIT" }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/prettier-plugin-solidity/node_modules/semver": { + "version": "7.6.3", "dev": true, "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/reduce-flatten": { - "version": "2.0.0", + "node_modules/pretty-bytes": { + "version": "6.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "dev": true, + "node_modules/process": { + "version": "0.11.10", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6.0" } }, - "node_modules/regexpp": { - "version": "3.2.0", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=0.4.0" } }, - "node_modules/registry-auth-token": { - "version": "3.3.2", + "node_modules/promise": { + "version": "8.3.0", "dev": true, "license": "MIT", "dependencies": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "asap": "~2.0.6" } }, - "node_modules/registry-url": { - "version": "3.1.0", - "dev": true, + "node_modules/promise-to-callback": { + "version": "1.0.0", "license": "MIT", "dependencies": { - "rc": "^1.0.1" + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/req-cwd": { - "version": "2.0.0", - "dev": true, + "node_modules/proxy-addr": { + "version": "2.0.7", "license": "MIT", "dependencies": { - "req-from": "^2.0.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/req-from": { - "version": "2.0.0", + "node_modules/proxy-agent": { + "version": "6.4.0", "dev": true, "license": "MIT", "dependencies": { - "resolve-from": "^3.0.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" }, "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/req-from/node_modules/resolve-from": { - "version": "3.0.0", + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "license": "Apache-2.0", "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.5", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "agent-base": "^7.0.2", + "debug": "4" }, "engines": { - "node": ">= 0.12" + "node": ">= 14" } }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "license": "BSD-3-Clause", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/prr": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/ps-tree": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, "engines": { - "node": ">=0.6" + "node": ">= 0.10" } }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } + "node_modules/psl": { + "version": "1.9.0", + "license": "MIT" }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, + "node_modules/pump": { + "version": "3.0.0", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/require-from-string": { - "version": "2.0.2", + "node_modules/punycode": { + "version": "2.3.1", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", + "node_modules/qs": { + "version": "6.13.0", "dev": true, - "license": "ISC" - }, - "node_modules/resolve": { - "version": "1.17.0", - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "path-parse": "^1.0.6" + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/query-string": { + "version": "5.1.1", "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/responselike": { - "version": "2.0.1", + "node_modules/queue-microtask": { + "version": "1.2.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", + "node_modules/randombytes": { + "version": "2.1.0", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, + "node_modules/range-parser": { + "version": "1.2.1", "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/reusify": { - "version": "1.0.4", + "node_modules/raw-body": { + "version": "2.5.2", "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", + "node_modules/rc": { + "version": "1.2.8", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { - "glob": "^7.1.3" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "rc": "cli.js" } }, - "node_modules/ripemd160": { - "version": "2.0.2", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "dev": true, "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/rlp": { - "version": "2.2.7", - "license": "MPL-2.0", + "node_modules/read-pkg": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^5.2.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" }, - "bin": { - "rlp": "bin/rlp" + "engines": { + "node": ">=4" } }, - "node_modules/rollup": { - "version": "3.29.4", + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", "dev": true, "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" + "dependencies": { + "pify": "^3.0.0" }, "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=4" } }, - "node_modules/rollup-plugin-dts": { - "version": "6.1.1", + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", "dev": true, - "license": "LGPL-3.0-only", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", "dependencies": { - "magic-string": "^0.30.10" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/Swatinem" - }, - "optionalDependencies": { - "@babel/code-frame": "^7.24.2" - }, - "peerDependencies": { - "rollup": "^3.29.4 || ^4", - "typescript": "^4.5 || ^5.0" + "node": ">= 6" } }, - "node_modules/rollup-plugin-dts/node_modules/@babel/code-frame": { - "version": "7.24.7", + "node_modules/readdirp": { + "version": "3.6.0", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=8.10.0" } }, - "node_modules/rollup-plugin-esbuild": { - "version": "5.0.0", + "node_modules/rechoir": { + "version": "0.6.2", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "debug": "^4.3.4", - "es-module-lexer": "^1.0.5", - "joycon": "^3.1.1", - "jsonc-parser": "^3.2.0" + "resolve": "^1.1.6" }, "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "peerDependencies": { - "esbuild": ">=0.10.1", - "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0" + "node": ">= 0.10" } }, - "node_modules/run-async": { - "version": "2.4.1", + "node_modules/recursive-readdir": { + "version": "2.2.3", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "minimatch": "^3.0.5" + }, "engines": { - "node": ">=0.12.0" + "node": ">=6.0.0" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "queue-microtask": "^1.2.2" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "license": "(MIT OR Apache-2.0)" - }, - "node_modules/rxjs": { - "version": "7.8.1", + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "Apache-2.0", + "license": "ISC", + "peer": true, "dependencies": { - "tslib": "^2.1.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/safe-array-concat": { - "version": "1.1.2", + "node_modules/reduce-flatten": { + "version": "2.0.0", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/regenerator-runtime": { + "version": "0.14.1", "license": "MIT" }, - "node_modules/safe-event-emitter": { - "version": "1.0.1", - "license": "ISC", - "dependencies": { - "events": "^3.0.0" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", + "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -15103,2104 +13709,2023 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sc-istanbul": { - "version": "0.4.6", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "node_modules/regexpp": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=8" }, - "bin": { - "istanbul": "lib/cli.js" + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/sc-istanbul/node_modules/argparse": { - "version": "1.0.10", + "node_modules/registry-auth-token": { + "version": "3.3.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "sprintf-js": "~1.0.2" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, - "node_modules/sc-istanbul/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/sc-istanbul/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/registry-url": { + "version": "3.1.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "rc": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/sc-istanbul/node_modules/escodegen": { - "version": "1.8.1", + "node_modules/req-cwd": { + "version": "2.0.0", "dev": true, - "license": "BSD-2-Clause", - "peer": true, + "license": "MIT", "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "req-from": "^2.0.0" }, "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" + "node": ">=4" } }, - "node_modules/sc-istanbul/node_modules/esprima": { - "version": "2.7.3", + "node_modules/req-from": { + "version": "2.0.0", "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "license": "MIT", + "dependencies": { + "resolve-from": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/sc-istanbul/node_modules/estraverse": { - "version": "1.9.3", + "node_modules/req-from/node_modules/resolve-from": { + "version": "3.0.0", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/sc-istanbul/node_modules/glob": { - "version": "5.0.15", - "dev": true, - "license": "ISC", - "peer": true, + "node_modules/request": { + "version": "2.88.2", + "license": "Apache-2.0", "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" }, "engines": { - "node": "*" + "node": ">= 6" } }, - "node_modules/sc-istanbul/node_modules/has-flag": { - "version": "1.0.0", - "dev": true, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", "license": "MIT", - "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.12" } }, - "node_modules/sc-istanbul/node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", "license": "MIT", - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, "bin": { - "js-yaml": "bin/js-yaml.js" + "uuid": "bin/uuid" } }, - "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", + "node_modules/require-directory": { + "version": "2.1.1", "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/sc-istanbul/node_modules/levn": { - "version": "0.3.0", + "node_modules/require-main-filename": { + "version": "2.0.0", "dev": true, + "license": "ISC" + }, + "node_modules/resolve": { + "version": "1.17.0", "license": "MIT", - "peer": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "path-parse": "^1.0.6" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sc-istanbul/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/sc-istanbul/node_modules/optionator": { - "version": "0.8.3", - "dev": true, + "node_modules/responselike": { + "version": "2.0.1", "license": "MIT", - "peer": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "lowercase-keys": "^2.0.0" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sc-istanbul/node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "peer": true, + "node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/sc-istanbul/node_modules/resolve": { - "version": "1.1.7", + "node_modules/restore-cursor": { + "version": "3.1.0", "dev": true, "license": "MIT", - "peer": true - }, - "node_modules/sc-istanbul/node_modules/source-map": { - "version": "0.2.0", - "dev": true, - "optional": true, - "peer": true, "dependencies": { - "amdefine": ">=0.0.4" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/sc-istanbul/node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/sc-istanbul/node_modules/supports-color": { - "version": "3.2.3", - "dev": true, + "node_modules/reusify": { + "version": "1.0.4", "license": "MIT", - "peer": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "license": "ISC", "dependencies": { - "has-flag": "^1.0.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=0.8.0" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/sc-istanbul/node_modules/type-check": { - "version": "0.3.2", - "dev": true, + "node_modules/ripemd160": { + "version": "2.0.2", "license": "MIT", - "peer": true, "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/sc-istanbul/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "peer": true, + "node_modules/rlp": { + "version": "2.2.7", + "license": "MPL-2.0", "dependencies": { - "isexe": "^2.0.0" + "bn.js": "^5.2.0" }, "bin": { - "which": "bin/which" + "rlp": "bin/rlp" } }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/scule": { - "version": "1.3.0", + "node_modules/rollup": { + "version": "3.29.4", "dev": true, - "license": "MIT" - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "hasInstallScript": true, "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10.0.0" + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/semaphore": { - "version": "1.1.0", + "node_modules/rollup-plugin-dts": { + "version": "6.1.1", + "dev": true, + "license": "LGPL-3.0-only", + "dependencies": { + "magic-string": "^0.30.10" + }, "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.24.2" + }, + "peerDependencies": { + "rollup": "^3.29.4 || ^4", + "typescript": "^4.5 || ^5.0" } }, - "node_modules/send": { - "version": "0.18.0", + "node_modules/rollup-plugin-dts/node_modules/@babel/code-frame": { + "version": "7.24.7", + "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=6.9.0" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", + "node_modules/rollup-plugin-esbuild": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@rollup/pluginutils": "^5.0.1", + "debug": "^4.3.4", + "es-module-lexer": "^1.0.5", + "joycon": "^3.1.1", + "jsonc-parser": "^3.2.0" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.10.1", + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/sentence-case": { - "version": "2.1.1", + "node_modules/run-async": { + "version": "2.4.1", "dev": true, "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "dependencies": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" + "queue-microtask": "^1.2.2" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", + "node_modules/rustbn.js": { + "version": "0.2.0", + "license": "(MIT OR Apache-2.0)" + }, + "node_modules/rxjs": { + "version": "7.8.1", "dev": true, - "license": "BSD-3-Clause", + "license": "Apache-2.0", "dependencies": { - "randombytes": "^2.1.0" + "tslib": "^2.1.0" } }, - "node_modules/serve-static": { - "version": "1.15.0", + "node_modules/safe-array-concat": { + "version": "1.1.2", + "dev": true, "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "license": "MIT", - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" + "node": ">=0.4" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC" + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/set-function-length": { - "version": "1.2.2", - "license": "MIT", + "node_modules/safe-event-emitter": { + "version": "1.0.1", + "license": "ISC", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "events": "^3.0.0" } }, - "node_modules/set-function-name": { - "version": "2.0.2", + "node_modules/safe-regex-test": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", + "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" + "is-regex": "^1.1.4" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", + "node_modules/safer-buffer": { + "version": "2.1.2", "license": "MIT" }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", + "node_modules/sc-istanbul": { + "version": "0.4.6", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, - "engines": { - "node": "*" + "bin": { + "istanbul": "lib/cli.js" } }, - "node_modules/shebang-command": { - "version": "2.0.0", + "node_modules/sc-istanbul/node_modules/argparse": { + "version": "1.0.10", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "sprintf-js": "~1.0.2" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/sc-istanbul/node_modules/async": { + "version": "1.5.2", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } + "peer": true }, - "node_modules/shell-quote": { - "version": "1.8.1", + "node_modules/sc-istanbul/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/shelljs": { - "version": "0.8.5", + "node_modules/sc-istanbul/node_modules/escodegen": { + "version": "1.8.1", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-2-Clause", "peer": true, "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" }, "bin": { - "shjs": "bin/shjs" + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4" + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" } }, - "node_modules/side-channel": { - "version": "1.0.6", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "node_modules/sc-istanbul/node_modules/esprima": { + "version": "2.7.3", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/signal-exit": { - "version": "3.0.7", + "node_modules/sc-istanbul/node_modules/estraverse": { + "version": "1.9.3", "dev": true, - "license": "ISC" + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } }, - "node_modules/simple-get": { - "version": "2.8.2", + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "3.3.0", + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "mimic-response": "^1.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/slash": { - "version": "3.0.0", - "license": "MIT", + "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", + "node_modules/sc-istanbul/node_modules/levn": { + "version": "0.3.0", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", + "node_modules/sc-istanbul/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "*" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/sc-istanbul/node_modules/optionator": { + "version": "0.8.3", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "color-name": "~1.1.4" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.8.0" } }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/smart-buffer": { - "version": "4.2.0", + "node_modules/sc-istanbul/node_modules/prelude-ls": { + "version": "1.1.2", "dev": true, - "license": "MIT", + "peer": true, "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">= 0.8.0" } }, - "node_modules/snake-case": { - "version": "2.1.0", + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", "dev": true, "license": "MIT", - "dependencies": { - "no-case": "^2.2.0" - } + "peer": true }, - "node_modules/socks": { - "version": "2.8.3", + "node_modules/sc-istanbul/node_modules/source-map": { + "version": "0.2.0", "dev": true, - "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" + "amdefine": ">=0.0.4" }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">=0.8.0" } }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", + "node_modules/sc-istanbul/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" + "has-flag": "^1.0.0" }, "engines": { - "node": ">= 14" + "node": ">=0.8.0" } }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", + "node_modules/sc-istanbul/node_modules/type-check": { + "version": "0.3.2", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "debug": "^4.3.4" + "prelude-ls": "~1.1.2" }, "engines": { - "node": ">= 14" + "node": ">= 0.8.0" } }, - "node_modules/solc": { - "version": "0.8.26", + "node_modules/sc-istanbul/node_modules/which": { + "version": "1.3.1", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" + "isexe": "^2.0.0" }, "bin": { - "solcjs": "solc.js" + "which": "bin/which" + } + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/scule": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/solc/node_modules/commander": { - "version": "8.3.0", - "dev": true, - "license": "MIT", + "node_modules/semaphore": { + "version": "1.1.0", "engines": { - "node": ">= 12" + "node": ">=0.8.0" } }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.2", - "dev": true, + "node_modules/semver": { + "version": "6.3.1", "license": "ISC", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" } }, - "node_modules/solhint": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/solhint/-/solhint-3.6.2.tgz", - "integrity": "sha512-85EeLbmkcPwD+3JR7aEMKsVC9YrRSxd4qkXuMzrlf7+z2Eqdfm1wHWq1ffTuo5aDhoZxp2I9yF3QkxZOxOL7aQ==", - "dev": true, + "node_modules/send": { + "version": "0.18.0", + "license": "MIT", "dependencies": { - "@solidity-parser/parser": "^0.16.0", - "ajv": "^6.12.6", - "antlr4": "^4.11.0", - "ast-parents": "^0.0.1", - "chalk": "^4.1.2", - "commander": "^10.0.0", - "cosmiconfig": "^8.0.0", - "fast-diff": "^1.2.0", - "glob": "^8.0.3", - "ignore": "^5.2.4", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "semver": "^7.5.2", - "strip-ansi": "^6.0.1", - "table": "^6.8.1", - "text-table": "^0.2.0" - }, - "bin": { - "solhint": "solhint.js" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, - "optionalDependencies": { - "prettier": "^2.8.3" + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/solhint/node_modules/@solidity-parser/parser": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.2.tgz", - "integrity": "sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/sentence-case": { + "version": "2.1.1", "dev": true, + "license": "MIT", "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" } }, - "node_modules/solhint/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/serialize-javascript": { + "version": "6.0.2", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "randombytes": "^2.1.0" } }, - "node_modules/solhint/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/serve-static": { + "version": "1.15.0", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/solhint/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "node_modules/servify": { + "version": "0.1.12", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" }, "engines": { - "node": ">=7.0.0" + "node": ">=6" } }, - "node_modules/solhint/node_modules/color-name": { - "version": "1.1.4", + "node_modules/set-blocking": { + "version": "2.0.0", "dev": true, - "license": "MIT" + "license": "ISC" }, - "node_modules/solhint/node_modules/glob": { - "version": "8.1.0", - "dev": true, - "license": "ISC", + "node_modules/set-function-length": { + "version": "1.2.2", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.4" } }, - "node_modules/solhint/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/set-function-name": { + "version": "2.0.2", "dev": true, "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/solhint/node_modules/ignore": { - "version": "5.3.2", - "dev": true, + "node_modules/set-immediate-shim": { + "version": "1.0.1", "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/solhint/node_modules/minimatch": { - "version": "5.1.6", - "dev": true, - "license": "ISC", + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "brace-expansion": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, - "engines": { - "node": ">=10" + "bin": { + "sha.js": "bin.js" } }, - "node_modules/solhint/node_modules/semver": { - "version": "7.6.3", + "node_modules/sha1": { + "version": "1.1.1", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "BSD-3-Clause", + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/solhint/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/shebang-command": { + "version": "2.0.0", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/solidity-bytes-utils": { - "version": "0.8.0", + "node_modules/shebang-regex": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "@truffle/hdwallet-provider": "latest" + "engines": { + "node": ">=8" } }, - "node_modules/solidity-coverage": { - "version": "0.8.13", + "node_modules/shell-quote": { + "version": "1.8.1", "dev": true, - "license": "ISC", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "dev": true, + "license": "BSD-3-Clause", "peer": true, "dependencies": { - "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.18.0", - "chalk": "^2.4.2", - "death": "^1.1.0", - "difflib": "^0.2.4", - "fs-extra": "^8.1.0", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.21", - "mocha": "^10.2.0", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.6" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" }, "bin": { - "solidity-coverage": "plugins/bin.js" + "shjs": "bin/shjs" }, - "peerDependencies": { - "hardhat": "^2.11.0" + "engines": { + "node": ">=4" } }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/solidity-coverage/node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, + "node_modules/side-channel": { + "version": "1.0.6", "license": "MIT", - "peer": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/solidity-coverage/node_modules/jsonfile": { - "version": "4.0.0", + "node_modules/signal-exit": { + "version": "3.0.7", "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "license": "ISC" }, - "node_modules/solidity-coverage/node_modules/pify": { - "version": "4.0.1", - "dev": true, + "node_modules/simple-concat": { + "version": "1.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "2.8.2", "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/solidity-coverage/node_modules/semver": { - "version": "7.6.3", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/simple-get/node_modules/decompress-response": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/solidity-coverage/node_modules/universalify": { - "version": "0.1.2", - "dev": true, + "node_modules/slash": { + "version": "3.0.0", "license": "MIT", - "peer": true, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/slice-ansi": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/source-map-js": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", + "node_modules/smart-buffer": { + "version": "4.2.0", "dev": true, - "license": "CC-BY-3.0" + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", + "node_modules/snake-case": { + "version": "2.1.0", "dev": true, "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "no-case": "^2.2.0" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.20", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/split": { - "version": "0.3.3", + "node_modules/socks": { + "version": "2.8.3", "dev": true, "license": "MIT", "dependencies": { - "through": "2" + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" }, "engines": { - "node": "*" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/squirrelly": { - "version": "8.0.8", + "node_modules/socks-proxy-agent": { + "version": "8.0.4", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/squirrellyjs/squirrelly?sponsor=1" - } - }, - "node_modules/sshpk": { - "version": "1.18.0", - "license": "MIT", "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/sshpk/node_modules/jsbn": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "license": "Unlicense" - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.7.1" + "debug": "^4.3.4" }, "engines": { - "node": ">=6" + "node": ">= 14" } }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", + "node_modules/solc": { + "version": "0.8.26", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "dev": true, "dependencies": { - "bl": "^5.0.0" + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "solcjs": "solc.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/stdin-discarder/node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "node_modules/solc/node_modules/commander": { + "version": "8.3.0", "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "license": "MIT", + "engines": { + "node": ">= 12" } }, - "node_modules/stdin-discarder/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/stream-combiner": { - "version": "0.0.4", + "node_modules/solhint": { + "version": "3.6.2", "dev": true, "license": "MIT", "dependencies": { - "duplexer": "~0.1.1" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "@solidity-parser/parser": "^0.16.0", + "ajv": "^6.12.6", + "antlr4": "^4.11.0", + "ast-parents": "^0.0.1", + "chalk": "^4.1.2", + "commander": "^10.0.0", + "cosmiconfig": "^8.0.0", + "fast-diff": "^1.2.0", + "glob": "^8.0.3", + "ignore": "^5.2.4", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "semver": "^7.5.2", + "strip-ansi": "^6.0.1", + "table": "^6.8.1", + "text-table": "^0.2.0" + }, + "bin": { + "solhint": "solhint.js" + }, + "optionalDependencies": { + "prettier": "^2.8.3" } }, - "node_modules/string_decoder": { - "version": "1.3.0", + "node_modules/solhint/node_modules/@solidity-parser/parser": { + "version": "0.16.2", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/string-format": { - "version": "2.0.0", + "node_modules/solhint/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "license": "WTFPL OR MIT" - }, - "node_modules/string-width": { - "version": "4.2.3", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/string.prototype.padend": { - "version": "3.1.6", + "node_modules/solhint/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", + "node_modules/solhint/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.0.0" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", + "node_modules/solhint/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", + "node_modules/solhint/node_modules/glob": { + "version": "8.1.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/solhint/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", + "node_modules/solhint/node_modules/ignore": { + "version": "5.3.2", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", + "node_modules/solhint/node_modules/minimatch": { + "version": "5.1.6", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-hex-prefixed": "1.0.0" + "node_modules/solhint/node_modules/semver": { + "version": "7.6.3", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=10" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/solhint/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylehacks": { - "version": "7.0.3", - "dev": true, + "node_modules/solidity-bytes-utils": { + "version": "0.8.0", "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "postcss-selector-parser": "^6.1.1" + "@truffle/hdwallet-provider": "latest" + } + }, + "node_modules/solidity-coverage": { + "version": "0.8.13", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.18.0", + "chalk": "^2.4.2", + "death": "^1.1.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" + "bin": { + "solidity-coverage": "plugins/bin.js" }, "peerDependencies": { - "postcss": "^8.4.31" + "hardhat": "^2.11.0" } }, - "node_modules/supports-color": { - "version": "5.5.0", + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^3.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=6 <7 || >=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", + "node_modules/solidity-coverage/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/svgo": { - "version": "3.3.2", + "node_modules/solidity-coverage/node_modules/pify": { + "version": "4.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.6.3", + "dev": true, + "license": "ISC", + "peer": true, "bin": { - "svgo": "bin/svgo" + "semver": "bin/semver.js" }, "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", + "node_modules/source-map-js": { + "version": "1.2.0", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">= 10" + "node": ">=0.10.0" } }, - "node_modules/swap-case": { - "version": "1.1.2", + "node_modules/source-map-support": { + "version": "0.5.21", "dev": true, "license": "MIT", "dependencies": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/swarm-js": { - "version": "0.1.42", - "license": "MIT", + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^11.8.5", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, "license": "MIT", "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/swarm-js/node_modules/cacheable-lookup": { - "version": "5.0.4", - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "dev": true, + "license": "CC0-1.0" }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", + "node_modules/split": { + "version": "0.3.3", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "through": "2" + }, + "engines": { + "node": "*" } }, - "node_modules/swarm-js/node_modules/got": { - "version": "11.8.6", + "node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/squirrelly": { + "version": "8.0.8", + "dev": true, "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, "engines": { - "node": ">=10.19.0" + "node": ">=6.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "url": "https://github.com/squirrellyjs/squirrelly?sponsor=1" } }, - "node_modules/swarm-js/node_modules/http2-wrapper": { - "version": "1.0.3", + "node_modules/sshpk": { + "version": "1.18.0", "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" }, "engines": { - "node": ">=10.19.0" + "node": ">=0.10.0" } }, - "node_modules/swarm-js/node_modules/jsonfile": { - "version": "4.0.0", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "node_modules/sshpk/node_modules/jsbn": { + "version": "0.1.1", + "license": "MIT" }, - "node_modules/swarm-js/node_modules/lowercase-keys": { - "version": "2.0.0", + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "dev": true, "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "2.1.1", - "license": "MIT", + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, - "node_modules/swarm-js/node_modules/universalify": { - "version": "0.1.2", + "node_modules/statuses": { + "version": "2.0.1", "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">= 0.8" } }, - "node_modules/sync-request": { - "version": "6.1.0", + "node_modules/stdin-discarder": { + "version": "0.1.0", "dev": true, "license": "MIT", "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" + "bl": "^5.0.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/table": { - "version": "6.8.2", - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": ">=10.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/table-layout": { - "version": "1.0.2", + "node_modules/stdin-discarder/node_modules/bl": { + "version": "5.1.0", "dev": true, "license": "MIT", "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", + "node_modules/stdin-discarder/node_modules/buffer": { + "version": "6.0.3", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", + "node_modules/stream-combiner": { + "version": "0.0.4", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "duplexer": "~0.1.1" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.17.1", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/tar": { - "version": "4.4.19", - "license": "ISC", + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", "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" - }, - "engines": { - "node": ">=4.5" + "safe-buffer": "~5.2.0" } }, - "node_modules/temp-dir": { + "node_modules/string-format": { "version": "2.0.0", "dev": true, + "license": "WTFPL OR MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/tempy": { - "version": "1.0.1", + "node_modules/string.prototype.padend": { + "version": "3.1.6", "dev": true, "license": "MIT", "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tempy/node_modules/del": { - "version": "6.1.1", + "node_modules/string.prototype.trim": { + "version": "1.2.9", "dev": true, "license": "MIT", "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tempy/node_modules/globby": { - "version": "11.1.0", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", "dev": true, "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tempy/node_modules/ignore": { - "version": "5.3.2", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">= 4" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/text-table": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/then-request": { - "version": "6.0.2", - "dev": true, + "node_modules/strip-ansi": { + "version": "6.0.1", "license": "MIT", "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", + "node_modules/strip-bom": { + "version": "3.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.1", + "node_modules/strip-final-newline": { + "version": "2.0.0", "dev": true, "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "is-hex-prefixed": "1.0.0" }, "engines": { - "node": ">= 0.12" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/timed-out": { - "version": "4.0.1", + "node_modules/strip-json-comments": { + "version": "3.1.1", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "dev": true, - "license": "MIT" - }, - "node_modules/tinycolor2": { - "version": "1.6.0", + "node_modules/stylehacks": { + "version": "7.0.3", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/tinygradient": { - "version": "1.1.5", - "dev": true, + "node_modules/supports-color": { + "version": "5.5.0", "license": "MIT", "dependencies": { - "@types/tinycolor2": "^1.4.0", - "tinycolor2": "^1.0.0" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/title-case": { - "version": "2.1.1", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tmp": { - "version": "0.0.33", + "node_modules/svgo": { + "version": "3.3.2", "dev": true, "license": "MIT", "dependencies": { - "os-tmpdir": "~1.0.2" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" }, "engines": { - "node": ">=0.6.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", + "node_modules/swap-case": { + "version": "1.1.2", + "dev": true, "license": "MIT", "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" } }, - "node_modules/toidentifier": { - "version": "1.0.1", + "node_modules/swarm-js": { + "version": "0.1.42", "license": "MIT", - "engines": { - "node": ">=0.6" + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "license": "BSD-3-Clause", + "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "license": "MIT", "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "defer-to-connect": "^2.0.0" }, "engines": { - "node": ">=0.8" + "node": ">=10" } }, - "node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", + "node_modules/swarm-js/node_modules/cacheable-lookup": { + "version": "5.0.4", "license": "MIT", "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" + "node": ">=10.6.0" } }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "dev": true, - "license": "ISC", + "node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "node_modules/ts-command-line-args/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/swarm-js/node_modules/got": { + "version": "11.8.6", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10.19.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/ts-command-line-args/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/swarm-js/node_modules/http2-wrapper": { + "version": "1.0.3", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=10.19.0" } }, - "node_modules/ts-command-line-args/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "node_modules/swarm-js/node_modules/jsonfile": { + "version": "4.0.0", "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ts-command-line-args/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/swarm-js/node_modules/lowercase-keys": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/ts-command-line-args/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "2.1.1", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ts-command-line-args/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/swarm-js/node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/sync-request": { + "version": "6.1.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/ts-essentials": { - "version": "7.0.3", + "node_modules/sync-rpc": { + "version": "1.3.6", "dev": true, "license": "MIT", - "peerDependencies": { - "typescript": ">=3.7.0" + "dependencies": { + "get-port": "^3.1.0" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", + "node_modules/table": { + "version": "6.8.2", + "license": "BSD-3-Clause", "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "engines": { + "node": ">=10.0.0" } }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.12.1", + "node_modules/table-layout": { + "version": "1.0.2", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=8.0.0" } }, - "node_modules/ts-node/node_modules/diff": { + "node_modules/table-layout/node_modules/array-back": { "version": "4.0.2", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.3.1" + "node": ">=8" } }, - "node_modules/tsconfck": { - "version": "3.1.3", + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", "dev": true, "license": "MIT", - "bin": { - "tsconfck": "bin/tsconfck.js" - }, "engines": { - "node": "^18 || >=20" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/tsconfig": { - "resolved": "config/tsconfig", - "link": true - }, - "node_modules/tslib": { - "version": "2.4.0", - "license": "0BSD" - }, - "node_modules/tsort": { - "version": "0.0.1", - "dev": true, + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", "license": "MIT" }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "license": "Apache-2.0", + "node_modules/tar": { + "version": "4.4.19", + "license": "ISC", "dependencies": { - "safe-buffer": "^5.0.1" + "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" }, "engines": { - "node": "*" + "node": ">=4.5" } }, - "node_modules/turbo": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.2.1.tgz", - "integrity": "sha512-clZFkh6U6NpsLKBVZYRjlZjRTfju1Z5STqvFVaOGu5443uM75alJe1nCYH9pQ9YJoiOvXAqA2rDHWN5kLS9JMg==", + "node_modules/temp-dir": { + "version": "2.0.0", "dev": true, - "bin": { - "turbo": "bin/turbo" - }, - "optionalDependencies": { - "turbo-darwin-64": "2.2.1", - "turbo-darwin-arm64": "2.2.1", - "turbo-linux-64": "2.2.1", - "turbo-linux-arm64": "2.2.1", - "turbo-windows-64": "2.2.1", - "turbo-windows-arm64": "2.2.1" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/turbo-darwin-64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.2.1.tgz", - "integrity": "sha512-jltMdSQ+7rQDVaorjW729PCw6fwAn1MgZSdoa0Gil7GZCOF3SnR/ok0uJw6G5mdm6F5XM8ZTlz+mdGzBLuBRaA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/turbo-darwin-arm64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.2.1.tgz", - "integrity": "sha512-RHW0c1NonsJXXlutlZeunmhLanf0/WbeizFfYgWuTEaJE4MbbhyD/RG4Fm/7iob5kxQ4Es2TzfDPqyMqpIO0GA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/turbo-linux-64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.2.1.tgz", - "integrity": "sha512-RasrjV+i2B90hoR8r6B2Btf2/ebNT5MJbhkpY0G1EN06E1IkjCKfAXj/1Dwmjy9+Zo0NC2r69L3HxRrtpar8jQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/turbo-linux-arm64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.2.1.tgz", - "integrity": "sha512-LNkUUJuu1gNkhlo7Ky/zilXEiajLoGlWLiKT1XV5neEf+x1s+aU9Hzd/+HhSVMiyI8l7z6zLbrM1a6+v4co/SQ==", - "cpu": [ - "arm64" - ], + "node_modules/tempy": { + "version": "1.0.1", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT", + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/turbo-windows-64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.2.1.tgz", - "integrity": "sha512-Mn5tlFrLzlQ6tW6wTWNlyT1osXuDUg0VT1VAjRpmRXlK2Zi3oKVVG0rs0nkkq4rmuheryD1xyuGPN9nFKbAn/A==", - "cpu": [ - "x64" - ], + "node_modules/tempy/node_modules/del": { + "version": "6.1.1", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "license": "MIT", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/turbo-windows-arm64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.2.1.tgz", - "integrity": "sha512-bvYOJ3SMN00yiem+uAqwRMbUMau/KiMzJYxnD0YkFo6INc08z8gZi5g0GLZAR7g/L3JegktX3UQW2cJvryjvLg==", - "cpu": [ - "arm64" - ], + "node_modules/tempy/node_modules/globby": { + "version": "11.1.0", "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "license": "Unlicense" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "license": "Unlicense" - }, - "node_modules/type": { - "version": "2.7.3", - "license": "ISC" - }, - "node_modules/type-check": { - "version": "0.4.0", "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-detect": { - "version": "4.1.0", + "node_modules/tempy/node_modules/ignore": { + "version": "5.3.2", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/type-fest": { - "version": "0.20.2", + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -17209,212 +15734,209 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", + "node_modules/text-table": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/then-request": { + "version": "6.0.2", + "dev": true, "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" }, "engines": { - "node": ">= 0.6" + "node": ">=6.0.0" } }, - "node_modules/typechain": { - "version": "8.3.2", + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "dev": true, + "license": "MIT" + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.1", "dev": true, "license": "MIT", "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, - "peerDependencies": { - "typescript": ">=4.3.0" + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/timed-out": { + "version": "4.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/tiny-invariant": { + "version": "1.3.3", + "dev": true, + "license": "MIT" + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/tinygradient": { + "version": "1.1.5", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@types/tinycolor2": "^1.4.0", + "tinycolor2": "^1.0.0" } }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", + "node_modules/title-case": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "no-case": "^2.2.0", + "upper-case": "^1.0.3" } }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", + "node_modules/tmp": { + "version": "0.0.33", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.6.0" } }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, + "node_modules/to-fast-properties": { + "version": "2.0.0", "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=4" } }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "is-number": "^7.0.0" }, "engines": { - "node": "*" + "node": ">=8.0" } }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, + "node_modules/toidentifier": { + "version": "1.0.1", "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">=10" + "node": ">=0.8" } }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "dev": true, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", + "node_modules/ts-command-line-args": { + "version": "2.5.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "write-markdown": "dist/write-markdown.js" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", + "node_modules/ts-command-line-args/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", + "node_modules/ts-command-line-args/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/typed-array-length": { - "version": "1.0.6", + "node_modules/ts-command-line-args/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.0.0" } }, - "node_modules/typedarray": { - "version": "0.0.6", + "node_modules/ts-command-line-args/node_modules/color-name": { + "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typical": { + "node_modules/ts-command-line-args/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -17422,1129 +15944,1218 @@ "node": ">=8" } }, - "node_modules/ufo": { - "version": "1.5.4", - "dev": true, - "license": "MIT" - }, - "node_modules/uglify-js": { - "version": "3.19.3", + "node_modules/ts-command-line-args/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/ultron": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", + "node_modules/ts-essentials": { + "version": "7.0.3", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=3.7.0" } }, - "node_modules/unbuild": { - "version": "2.0.0", + "node_modules/ts-node": { + "version": "10.9.2", "dev": true, "license": "MIT", "dependencies": { - "@rollup/plugin-alias": "^5.0.0", - "@rollup/plugin-commonjs": "^25.0.4", - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.2.1", - "@rollup/plugin-replace": "^5.0.2", - "@rollup/pluginutils": "^5.0.3", - "chalk": "^5.3.0", - "citty": "^0.1.2", - "consola": "^3.2.3", - "defu": "^6.1.2", - "esbuild": "^0.19.2", - "globby": "^13.2.2", - "hookable": "^5.5.3", - "jiti": "^1.19.3", - "magic-string": "^0.30.3", - "mkdist": "^1.3.0", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "pretty-bytes": "^6.1.1", - "rollup": "^3.28.1", - "rollup-plugin-dts": "^6.0.0", - "scule": "^1.0.0", - "untyped": "^1.4.0" + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, "bin": { - "unbuild": "dist/cli.mjs" + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, "peerDependencies": { - "typescript": "^5.1.6" + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" }, "peerDependenciesMeta": { - "typescript": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { "optional": true } } }, - "node_modules/unbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "cpu": [ - "arm64" - ], + "node_modules/ts-node/node_modules/acorn": { + "version": "8.12.1", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=12" + "node": ">=0.4.0" } }, - "node_modules/unbuild/node_modules/chalk": { - "version": "5.3.0", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.3.1" } }, - "node_modules/unbuild/node_modules/esbuild": { - "version": "0.19.12", + "node_modules/tsconfck": { + "version": "3.1.3", "dev": true, - "hasInstallScript": true, "license": "MIT", "bin": { - "esbuild": "bin/esbuild" + "tsconfck": "bin/tsconfck.js" }, "engines": { - "node": ">=12" + "node": "^18 || >=20" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/unbuild/node_modules/globby": { - "version": "13.2.2", + "node_modules/tsconfig": { + "resolved": "config/tsconfig", + "link": true + }, + "node_modules/tslib": { + "version": "2.4.0", + "license": "0BSD" + }, + "node_modules/tsort": { + "version": "0.0.1", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "license": "Apache-2.0", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "safe-buffer": "^5.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/unbuild/node_modules/ignore": { - "version": "5.3.2", + "node_modules/turbo": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.2.1.tgz", + "integrity": "sha512-clZFkh6U6NpsLKBVZYRjlZjRTfju1Z5STqvFVaOGu5443uM75alJe1nCYH9pQ9YJoiOvXAqA2rDHWN5kLS9JMg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" + "bin": { + "turbo": "bin/turbo" + }, + "optionalDependencies": { + "turbo-darwin-64": "2.2.1", + "turbo-darwin-arm64": "2.2.1", + "turbo-linux-64": "2.2.1", + "turbo-linux-arm64": "2.2.1", + "turbo-windows-64": "2.2.1", + "turbo-windows-arm64": "2.2.1" } }, - "node_modules/unbuild/node_modules/slash": { - "version": "4.0.0", + "node_modules/turbo-darwin-64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.2.1.tgz", + "integrity": "sha512-jltMdSQ+7rQDVaorjW729PCw6fwAn1MgZSdoa0Gil7GZCOF3SnR/ok0uJw6G5mdm6F5XM8ZTlz+mdGzBLuBRaA==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/undici": { - "version": "5.28.4", + "node_modules/turbo-darwin-arm64": { + "version": "2.2.1", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/undici-types": { - "version": "6.19.8", - "license": "MIT" + "node_modules/turbo-linux-64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.2.1.tgz", + "integrity": "sha512-RasrjV+i2B90hoR8r6B2Btf2/ebNT5MJbhkpY0G1EN06E1IkjCKfAXj/1Dwmjy9+Zo0NC2r69L3HxRrtpar8jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/unique-string": { - "version": "2.0.0", + "node_modules/turbo-linux-arm64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.2.1.tgz", + "integrity": "sha512-LNkUUJuu1gNkhlo7Ky/zilXEiajLoGlWLiKT1XV5neEf+x1s+aU9Hzd/+HhSVMiyI8l7z6zLbrM1a6+v4co/SQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-windows-64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.2.1.tgz", + "integrity": "sha512-Mn5tlFrLzlQ6tW6wTWNlyT1osXuDUg0VT1VAjRpmRXlK2Zi3oKVVG0rs0nkkq4rmuheryD1xyuGPN9nFKbAn/A==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/turbo-windows-arm64": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.2.1.tgz", + "integrity": "sha512-bvYOJ3SMN00yiem+uAqwRMbUMau/KiMzJYxnD0YkFo6INc08z8gZi5g0GLZAR7g/L3JegktX3UQW2cJvryjvLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "license": "Unlicense" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "license": "Unlicense" + }, + "node_modules/type": { + "version": "2.7.3", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", "license": "MIT", "dependencies": { - "crypto-random-string": "^2.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/universalify": { - "version": "2.0.1", + "node_modules/type-detect": { + "version": "4.1.0", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">= 10.0.0" + "node": ">=4" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", + "node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/untyped": { - "version": "1.4.2", - "dev": true, + "node_modules/type-is": { + "version": "1.6.18", "license": "MIT", "dependencies": { - "@babel/core": "^7.23.7", - "@babel/standalone": "^7.23.8", - "@babel/types": "^7.23.6", - "defu": "^6.1.4", - "jiti": "^1.21.0", - "mri": "^1.2.0", - "scule": "^1.2.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, - "bin": { - "untyped": "dist/cli.mjs" + "engines": { + "node": ">= 0.6" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/typechain": { + "version": "8.3.2", + "dev": true, "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" }, "bin": { - "update-browserslist-db": "cli.js" + "typechain": "dist/cli/cli.js" }, "peerDependencies": { - "browserslist": ">= 4.21.0" + "typescript": ">=4.3.0" } }, - "node_modules/update-check": { - "version": "1.5.4", + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "license": "MIT", "dependencies": { - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/upper-case": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/upper-case-first": { - "version": "1.1.2", + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", "dev": true, "license": "MIT", "dependencies": { - "upper-case": "^1.1.1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.3.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=6.14.2" + "node": ">=6 <7 || >=8" } }, - "node_modules/utf8": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/util": { - "version": "0.12.5", - "license": "MIT", + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "dev": true, + "license": "ISC", "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">= 0.4.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/uuid": { - "version": "8.3.2", + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", "dev": true, - "license": "ISC", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/varint": { - "version": "5.0.2", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 4.0.0" } }, - "node_modules/verror": { - "version": "1.10.0", - "engines": [ - "node >=0.6.0" - ], + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "dev": true, "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/viem": { - "version": "2.21.32", - "resolved": "https://registry.npmjs.org/viem/-/viem-2.21.32.tgz", - "integrity": "sha512-2oXt5JNIb683oy7C8wuIJ/SeL3XtHVMEQpy1U2TA6WMnJQ4ScssRvyPwYLcaP6mKlrGXE/cR/V7ncWpvLUVPYQ==", + "node_modules/typed-array-byte-length": { + "version": "1.0.1", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], + "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.11.0", - "@noble/curves": "1.6.0", - "@noble/hashes": "1.5.0", - "@scure/bip32": "1.5.0", - "@scure/bip39": "1.4.0", - "abitype": "1.0.6", - "isows": "1.0.6", - "webauthn-p256": "0.0.10", - "ws": "8.18.0" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, - "peerDependencies": { - "typescript": ">=5.0.4" + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/viem/node_modules/@adraffy/ens-normalize": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz", - "integrity": "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==", - "dev": true - }, - "node_modules/viem/node_modules/@noble/curves": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", - "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "@noble/hashes": "1.5.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 0.4" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/viem/node_modules/@noble/hashes": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", - "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", + "node_modules/typed-array-length": { + "version": "1.0.6", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 0.4" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/viem/node_modules/@scure/bip32": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.5.0.tgz", - "integrity": "sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==", + "node_modules/typedarray": { + "version": "0.0.6", "dev": true, + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "license": "MIT", "dependencies": { - "@noble/curves": "~1.6.0", - "@noble/hashes": "~1.5.0", - "@scure/base": "~1.1.7" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "is-typedarray": "^1.0.0" } }, - "node_modules/viem/node_modules/@scure/bip39": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.4.0.tgz", - "integrity": "sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==", - "dev": true, - "dependencies": { - "@noble/hashes": "~1.5.0", - "@scure/base": "~1.1.8" + "node_modules/typescript": { + "version": "5.5.4", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=14.17" } }, - "node_modules/viem/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "node_modules/typical": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "node": ">=8" } }, - "node_modules/vite": { - "version": "5.4.3", + "node_modules/ufo": { + "version": "1.5.4", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, "bin": { - "vite": "bin/vite.js" + "uglifyjs": "bin/uglifyjs" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": ">=0.8.0" + } + }, + "node_modules/ultron": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vite-plugin-checker": { - "version": "0.5.6", + "node_modules/unbuild": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "ansi-escapes": "^4.3.0", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "commander": "^8.0.0", - "fast-glob": "^3.2.7", - "fs-extra": "^11.1.0", - "lodash.debounce": "^4.0.8", - "lodash.pick": "^4.4.0", - "npm-run-path": "^4.0.1", - "strip-ansi": "^6.0.0", - "tiny-invariant": "^1.1.0", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2" + "@rollup/plugin-alias": "^5.0.0", + "@rollup/plugin-commonjs": "^25.0.4", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.2.1", + "@rollup/plugin-replace": "^5.0.2", + "@rollup/pluginutils": "^5.0.3", + "chalk": "^5.3.0", + "citty": "^0.1.2", + "consola": "^3.2.3", + "defu": "^6.1.2", + "esbuild": "^0.19.2", + "globby": "^13.2.2", + "hookable": "^5.5.3", + "jiti": "^1.19.3", + "magic-string": "^0.30.3", + "mkdist": "^1.3.0", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "pretty-bytes": "^6.1.1", + "rollup": "^3.28.1", + "rollup-plugin-dts": "^6.0.0", + "scule": "^1.0.0", + "untyped": "^1.4.0" }, - "engines": { - "node": ">=14.16" + "bin": { + "unbuild": "dist/cli.mjs" }, "peerDependencies": { - "eslint": ">=7", - "meow": "^9.0.0", - "optionator": "^0.9.1", - "stylelint": ">=13", - "typescript": "*", - "vite": ">=2.0.0", - "vls": "*", - "vti": "*", - "vue-tsc": "*" + "typescript": "^5.1.6" }, "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "meow": { - "optional": true - }, - "optionator": { - "optional": true - }, - "stylelint": { - "optional": true - }, "typescript": { "optional": true - }, - "vls": { - "optional": true - }, - "vti": { - "optional": true - }, - "vue-tsc": { - "optional": true } } }, - "node_modules/vite-plugin-checker/node_modules/@babel/code-frame": { - "version": "7.24.7", + "node_modules/unbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/unbuild/node_modules/chalk": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/unbuild/node_modules/esbuild": { + "version": "0.19.12", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, - "node_modules/vite-plugin-checker/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/unbuild/node_modules/globby": { + "version": "13.2.2", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vite-plugin-checker/node_modules/chalk": { - "version": "4.1.2", + "node_modules/unbuild/node_modules/ignore": { + "version": "5.3.2", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" + "node": ">= 4" + } + }, + "node_modules/unbuild/node_modules/slash": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vite-plugin-checker/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/undici": { + "version": "5.28.4", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@fastify/busboy": "^2.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=14.0" } }, - "node_modules/vite-plugin-checker/node_modules/color-name": { - "version": "1.1.4", - "dev": true, + "node_modules/undici-types": { + "version": "6.19.8", "license": "MIT" }, - "node_modules/vite-plugin-checker/node_modules/commander": { - "version": "8.3.0", + "node_modules/unique-string": { + "version": "2.0.0", "dev": true, "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, "engines": { - "node": ">= 12" + "node": ">=8" } }, - "node_modules/vite-plugin-checker/node_modules/fs-extra": { - "version": "11.2.0", + "node_modules/universalify": { + "version": "2.0.1", "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=14.14" + "node": ">= 10.0.0" } }, - "node_modules/vite-plugin-checker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, + "node_modules/unpipe": { + "version": "1.0.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/vite-plugin-checker/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/untyped": { + "version": "1.4.2", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@babel/core": "^7.23.7", + "@babel/standalone": "^7.23.8", + "@babel/types": "^7.23.6", + "defu": "^6.1.4", + "jiti": "^1.21.0", + "mri": "^1.2.0", + "scule": "^1.2.0" }, - "engines": { - "node": ">=8" + "bin": { + "untyped": "dist/cli.mjs" } }, - "node_modules/vite-tsconfig-paths": { - "version": "4.3.2", - "dev": true, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "tsconfck": "^3.0.3" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, - "peerDependencies": { - "vite": "*" + "bin": { + "update-browserslist-db": "cli.js" }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], + "node_modules/update-check": { + "version": "1.5.4", "dev": true, - "optional": true, - "os": [ - "aix" - ], - "peer": true, - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" } }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], + "node_modules/upper-case": { + "version": "1.1.3", "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, + "license": "MIT" + }, + "node_modules/upper-case-first": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "upper-case": "^1.1.1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, "engines": { - "node": ">=12" + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], + "node_modules/validate-npm-package-name": { + "version": "5.0.1", "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, + "license": "ISC", "engines": { - "node": ">=12" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/varint": { + "version": "5.0.2", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, "engines": { - "node": ">=12" + "node": ">= 0.8" } }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" + "node_modules/verror": { + "version": "1.10.0", + "engines": [ + "node >=0.6.0" ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/viem": { + "version": "2.21.32", "dev": true, - "optional": true, - "os": [ - "darwin" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } ], - "peer": true, - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.11.0", + "@noble/curves": "1.6.0", + "@noble/hashes": "1.5.0", + "@scure/bip32": "1.5.0", + "@scure/bip39": "1.4.0", + "abitype": "1.0.6", + "isows": "1.0.6", + "webauthn-p256": "0.0.10", + "ws": "8.18.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], + "node_modules/viem/node_modules/@adraffy/ens-normalize": { + "version": "1.11.0", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, + "license": "MIT" + }, + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.5.0" + }, "engines": { - "node": ">=12" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.5.0", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], + "node_modules/viem/node_modules/@scure/bip32": { + "version": "1.5.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.6.0", + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.7" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], + "node_modules/viem/node_modules/@scure/bip39": { + "version": "1.4.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.8" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], + "node_modules/viem/node_modules/ws": { + "version": "8.18.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], + "node_modules/vite": { + "version": "5.4.3", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "peer": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">=12" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], + "node_modules/vite-plugin-checker": { + "version": "0.5.6", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "ansi-escapes": "^4.3.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "commander": "^8.0.0", + "fast-glob": "^3.2.7", + "fs-extra": "^11.1.0", + "lodash.debounce": "^4.0.8", + "lodash.pick": "^4.4.0", + "npm-run-path": "^4.0.1", + "strip-ansi": "^6.0.0", + "tiny-invariant": "^1.1.0", + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2" + }, "engines": { - "node": ">=12" + "node": ">=14.16" + }, + "peerDependencies": { + "eslint": ">=7", + "meow": "^9.0.0", + "optionator": "^0.9.1", + "stylelint": ">=13", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*", + "vue-tsc": "*" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } } }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], + "node_modules/vite-plugin-checker/node_modules/@babel/code-frame": { + "version": "7.24.7", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], + "node_modules/vite-plugin-checker/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], + "node_modules/vite-plugin-checker/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], + "node_modules/vite-plugin-checker/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=12" + "node": ">=7.0.0" } }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], + "node_modules/vite-plugin-checker/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, + "license": "MIT" + }, + "node_modules/vite-plugin-checker/node_modules/commander": { + "version": "8.3.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 12" } }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], + "node_modules/vite-plugin-checker/node_modules/fs-extra": { + "version": "11.2.0", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=14.14" } }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], + "node_modules/vite-plugin-checker/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "peer": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], + "node_modules/vite-plugin-checker/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], + "node_modules/vite-tsconfig-paths": { + "version": "4.3.2", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.3" + }, + "peerDependencies": { + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } } }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ - "x64" + "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "peer": true, "engines": { @@ -19226,8 +17837,6 @@ }, "node_modules/webauthn-p256": { "version": "0.0.10", - "resolved": "https://registry.npmjs.org/webauthn-p256/-/webauthn-p256-0.0.10.tgz", - "integrity": "sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA==", "dev": true, "funding": [ { @@ -19235,6 +17844,7 @@ "url": "https://github.com/sponsors/wevm" } ], + "license": "MIT", "dependencies": { "@noble/curves": "^1.4.0", "@noble/hashes": "^1.4.0" @@ -19242,9 +17852,8 @@ }, "node_modules/webauthn-p256/node_modules/@noble/curves": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", - "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "1.5.0" }, @@ -19257,9 +17866,8 @@ }, "node_modules/webauthn-p256/node_modules/@noble/hashes": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", - "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", "dev": true, + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -19701,9 +18309,8 @@ }, "node_modules/zksync-ethers": { "version": "5.9.2", - "resolved": "https://registry.npmjs.org/zksync-ethers/-/zksync-ethers-5.9.2.tgz", - "integrity": "sha512-Y2Mx6ovvxO6UdC2dePLguVzvNToOY8iLWeq5ne+jgGSJxAi/f4He/NF6FNsf6x1aWX0o8dy4Df8RcOQXAkj5qw==", "dev": true, + "license": "MIT", "dependencies": { "ethers": "~5.7.0" }, @@ -19716,8 +18323,6 @@ }, "node_modules/zksync-ethers/node_modules/ethers": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "dev": true, "funding": [ { @@ -19729,6 +18334,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abi": "5.7.0", "@ethersproject/abstract-provider": "5.7.0", @@ -19764,9 +18370,8 @@ }, "node_modules/zod": { "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -19975,8 +18580,7 @@ }, "packages/lsp10-contracts/node_modules/@erc725/smart-contracts": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-6.0.0.tgz", - "integrity": "sha512-6okutGGL9xbg/MSgAof2FU1UcSNE/z3p9TORlROVGaM3gi1A6FQQ7fDqtBYkPtvHureX8yS9gP7xPt3PRbP43Q==", + "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/contracts-upgradeable": "^4.9.3", @@ -20095,8 +18699,8 @@ "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@lukso/lsp0-contracts": "*", - "@lukso/lsp1-contracts": "*", + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, @@ -20217,4 +18821,4 @@ } } } -} +} \ No newline at end of file diff --git a/package.json b/package.json index fbeabf197..43eb5f49a 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.14.0", "description": "The reference smart contract implementation for the LUKSO LSP standards", "private": true, + "packageManager": "^npm@10.1.0", "npmClient": "npm", "author": "", "license": "Apache-2.0", @@ -37,7 +38,7 @@ "lint:solidity": "turbo lint:solidity", "package": "turbo package", "test": "turbo test", - "test:foundry": "turbo test:foundry --scope='!@lukso/lsp16-contracts'", + "test:foundry": "turbo test:foundry --filter='!@lukso/lsp16-contracts'", "test:coverage": "turbo test:coverage", "test:mocks": "hardhat test --no-compile packages/lsp-smart-contracts/tests/Mocks/*.test.ts", "test:up": "hardhat test --no-compile packages/lsp-smart-contracts/tests/UniversalProfile.test.ts", diff --git a/packages/lsp-smart-contracts/constants.ts b/packages/lsp-smart-contracts/constants.ts index 58933b61c..6e5e705f7 100644 --- a/packages/lsp-smart-contracts/constants.ts +++ b/packages/lsp-smart-contracts/constants.ts @@ -53,7 +53,6 @@ import { INTERFACE_ID_LSP20CallVerifier, } from '@lukso/lsp20-contracts'; import { INTERFACE_ID_LSP25 } from '@lukso/lsp25-contracts'; -import { INTERFACE_ID_LSP26 } from '@lukso/lsp26-contracts'; // LSP1 Type IDs of each LSP import { LSP0_TYPE_IDS } from '@lukso/lsp0-contracts'; @@ -61,7 +60,6 @@ import { LSP7_TYPE_IDS } from '@lukso/lsp7-contracts'; import { LSP8_TYPE_IDS } from '@lukso/lsp8-contracts'; import { LSP9_TYPE_IDS } from '@lukso/lsp9-contracts'; import { LSP14_TYPE_IDS } from '@lukso/lsp14-contracts'; -import { LSP26_TYPE_IDS } from '@lukso/lsp26-contracts'; // ERC725Y Data Keys of each LSP import { LSP1DataKeys } from '@lukso/lsp1-contracts'; @@ -119,7 +117,6 @@ export const INTERFACE_IDS = { LSP20CallVerifier: INTERFACE_ID_LSP20CallVerifier, LSP11BasicSocialRecovery: '0x049a28f1', LSP25ExecuteRelayCall: INTERFACE_ID_LSP25, - LSP26FollowingSystem: INTERFACE_ID_LSP26, }; // ERC725Y @@ -150,5 +147,4 @@ export const LSP1_TYPE_IDS = { ...LSP8_TYPE_IDS, ...LSP9_TYPE_IDS, ...LSP14_TYPE_IDS, - ...LSP26_TYPE_IDS, }; diff --git a/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol b/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol index ac2dc7156..d9c7c1ced 100644 --- a/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol +++ b/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol @@ -28,6 +28,10 @@ import { _TYPEID_LSP14_OwnershipTransferred_SenderNotification, _TYPEID_LSP14_OwnershipTransferred_RecipientNotification } from "@lukso/lsp14-contracts/contracts/LSP14Constants.sol"; +import { + _TYPEID_LSP26_FOLLOW, + _TYPEID_LSP26_UNFOLLOW +} from "@lukso/lsp26-contracts/contracts/LSP26Constants.sol"; error LSP1TypeIdHashIsWrong(bytes32 typeIdHash, string typeIdname); @@ -92,6 +96,15 @@ contract LSP1TypeIDsTester { "LSP14OwnershipTransferred_RecipientNotification" ] = _TYPEID_LSP14_OwnershipTransferred_RecipientNotification; // ------------------- + + // ------ LSP26 ------ + _typeIds[ + "LSP26FollowerSystem_FollowNotification" + ] = _TYPEID_LSP26_FOLLOW; + _typeIds[ + "LSP26FollowerSystem_UnfollowNotification" + ] = _TYPEID_LSP26_UNFOLLOW; + // ------------------- } function verifyLSP1TypeID( diff --git a/packages/lsp26-contracts/constants.ts b/packages/lsp26-contracts/constants.ts index fe11d89bf..fe81df8a2 100644 --- a/packages/lsp26-contracts/constants.ts +++ b/packages/lsp26-contracts/constants.ts @@ -2,8 +2,10 @@ export const INTERFACE_ID_LSP26 = '0x2b299cea'; export const LSP26_TYPE_IDS = { // keccak256('LSP26FollowerSystem_FollowNotification') - _TYPEID_LSP26_FOLLOW: '0x71e02f9f05bcd5816ec4f3134aa2e5a916669537ec6c77fe66ea595fabc2d51a', + LSP26FollowerSystem_FollowNotification: + '0x71e02f9f05bcd5816ec4f3134aa2e5a916669537ec6c77fe66ea595fabc2d51a', // keccak256('LSP26FollowerSystem_UnfollowNotification') - _TYPEID_LSP26_UNFOLLOW: '0x9d3c0b4012b69658977b099bdaa51eff0f0460f421fba96d15669506c00d1c4f', + LSP26FollowerSystem_UnfollowNotification: + '0x9d3c0b4012b69658977b099bdaa51eff0f0460f421fba96d15669506c00d1c4f', }; diff --git a/turbo.json b/turbo.json index aaa3be861..72f1cb2fb 100644 --- a/turbo.json +++ b/turbo.json @@ -1,7 +1,7 @@ { "$schema": "https://turbo.build/schema.json", - "globalDotEnv": ["**/.env.local"], - "pipeline": { + "globalDependencies": ["**/.env.local"], + "tasks": { "build": { "dependsOn": ["^build"], "outputs": ["**/artifacts/**", "types/**", "**/types/**"], From 9340aed9483b757ed4b76298dcad20ed09b128a5 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Fri, 9 Aug 2024 12:35:57 +0100 Subject: [PATCH 27/94] chore: add missing interface ID for LSP26 in lsp-smart-contracts package --- package-lock.json | 101 +--------------------- packages/lsp-smart-contracts/constants.ts | 2 + 2 files changed, 3 insertions(+), 100 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6f5cf2e9b..7fac3acff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9276,105 +9276,6 @@ "typechain": "8.x" } }, - "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", - "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", - "dev": true, - "peer": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" - } - }, - "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", - "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", - "dev": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "^10.2.1", - "ethers": "^5.4.7", - "hardhat": "^2.9.9", - "typechain": "^8.1.1" - } - }, - "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hardhat-packager/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", "dev": true, @@ -18821,4 +18722,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/lsp-smart-contracts/constants.ts b/packages/lsp-smart-contracts/constants.ts index 6e5e705f7..0de92c938 100644 --- a/packages/lsp-smart-contracts/constants.ts +++ b/packages/lsp-smart-contracts/constants.ts @@ -53,6 +53,7 @@ import { INTERFACE_ID_LSP20CallVerifier, } from '@lukso/lsp20-contracts'; import { INTERFACE_ID_LSP25 } from '@lukso/lsp25-contracts'; +import { INTERFACE_ID_LSP26 } from '@lukso/lsp26-contracts'; // LSP1 Type IDs of each LSP import { LSP0_TYPE_IDS } from '@lukso/lsp0-contracts'; @@ -117,6 +118,7 @@ export const INTERFACE_IDS = { LSP20CallVerifier: INTERFACE_ID_LSP20CallVerifier, LSP11BasicSocialRecovery: '0x049a28f1', LSP25ExecuteRelayCall: INTERFACE_ID_LSP25, + LSP26FollowingSystem: INTERFACE_ID_LSP26, }; // ERC725Y From 63c11f1a574a773312298d68be10b94252d89f26 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Tue, 20 Aug 2024 11:27:28 +0300 Subject: [PATCH 28/94] refactor: Rename LSP26 to LSP26FollowerSystem --- packages/lsp-smart-contracts/constants.ts | 2 +- .../ILSP26FollowingSystem.sol | 2 +- .../LSP26FollowingSystem.sol | 2 +- .../contracts/Mocks/ERC165Interfaces.sol | 4 ++-- .../tests/Mocks/ERC165Interfaces.test.ts | 4 ++-- packages/lsp26-contracts/README.md | 4 ++-- ...ingSystem.sol => ILSP26FollowerSystem.sol} | 2 +- ...wingSystem.sol => LSP26FollowerSystem.sol} | 22 +++++++++---------- packages/lsp26-contracts/hardhat.config.ts | 2 +- packages/lsp26-contracts/package.json | 2 +- ...em.test.ts => LSP26FollowerSystem.test.ts} | 10 ++++----- 11 files changed, 28 insertions(+), 28 deletions(-) rename packages/lsp26-contracts/contracts/{ILSP26FollowingSystem.sol => ILSP26FollowerSystem.sol} (99%) rename packages/lsp26-contracts/contracts/{LSP26FollowingSystem.sol => LSP26FollowerSystem.sol} (89%) rename packages/lsp26-contracts/tests/{LSP26FollowingSystem.test.ts => LSP26FollowerSystem.test.ts} (96%) diff --git a/packages/lsp-smart-contracts/constants.ts b/packages/lsp-smart-contracts/constants.ts index 0de92c938..7c01753be 100644 --- a/packages/lsp-smart-contracts/constants.ts +++ b/packages/lsp-smart-contracts/constants.ts @@ -118,7 +118,7 @@ export const INTERFACE_IDS = { LSP20CallVerifier: INTERFACE_ID_LSP20CallVerifier, LSP11BasicSocialRecovery: '0x049a28f1', LSP25ExecuteRelayCall: INTERFACE_ID_LSP25, - LSP26FollowingSystem: INTERFACE_ID_LSP26, + LSP26FollowerSystem: INTERFACE_ID_LSP26, }; // ERC725Y diff --git a/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowingSystem.sol b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowingSystem.sol index 12336b054..126727544 100644 --- a/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowingSystem.sol +++ b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowingSystem.sol @@ -1,4 +1,4 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.17; -import "@lukso/lsp26-contracts/contracts/ILSP26FollowingSystem.sol"; +import "@lukso/lsp26-contracts/contracts/ILSP26FollowerSystem.sol"; diff --git a/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowingSystem.sol b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowingSystem.sol index 5412051ae..470b0c8e3 100644 --- a/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowingSystem.sol +++ b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowingSystem.sol @@ -1,4 +1,4 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.17; -import "@lukso/lsp26-contracts/contracts/LSP26FollowingSystem.sol"; +import "@lukso/lsp26-contracts/contracts/LSP26FollowerSystem.sol"; diff --git a/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol b/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol index a37e2d72e..89e9f3aa1 100644 --- a/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol +++ b/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol @@ -65,8 +65,8 @@ import { ILSP25ExecuteRelayCall as ILSP25 } from "@lukso/lsp25-contracts/contracts/ILSP25ExecuteRelayCall.sol"; import { - ILSP26FollowingSystem as ILSP26 -} from "@lukso/lsp26-contracts/contracts/ILSP26FollowingSystem.sol"; + ILSP26FollowerSystem as ILSP26 +} from "@lukso/lsp26-contracts/contracts/ILSP26FollowerSystem.sol"; // constants import { diff --git a/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts b/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts index af31f2909..4f0d05c02 100644 --- a/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts +++ b/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts @@ -99,9 +99,9 @@ describe('Calculate LSP interfaces', () => { expect(result).to.equal(INTERFACE_IDS.LSP25ExecuteRelayCall); }); - it('LSP26FollowingSystem', async () => { + it('LSP26FollowerSystem', async () => { const result = await contract.calculateInterfaceLSP26(); - expect(result).to.equal(INTERFACE_IDS.LSP26FollowingSystem); + expect(result).to.equal(INTERFACE_IDS.LSP26FollowerSystem); }); }); diff --git a/packages/lsp26-contracts/README.md b/packages/lsp26-contracts/README.md index 1a17db82a..e756f219c 100644 --- a/packages/lsp26-contracts/README.md +++ b/packages/lsp26-contracts/README.md @@ -1,6 +1,6 @@ -# LSP26 Following System · [![npm version](https://img.shields.io/npm/v/@lukso/lsp26-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp26-contracts) +# LSP26 Follower System · [![npm version](https://img.shields.io/npm/v/@lukso/lsp26-contracts.svg?style=flat)](https://www.npmjs.com/package/@lukso/lsp26-contracts) -Package for the LSP26 Following System standard. +Package for the LSP26 Follower System standard. ## Installation diff --git a/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol b/packages/lsp26-contracts/contracts/ILSP26FollowerSystem.sol similarity index 99% rename from packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol rename to packages/lsp26-contracts/contracts/ILSP26FollowerSystem.sol index 32d91f509..b9154430d 100644 --- a/packages/lsp26-contracts/contracts/ILSP26FollowingSystem.sol +++ b/packages/lsp26-contracts/contracts/ILSP26FollowerSystem.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.17; -interface ILSP26FollowingSystem { +interface ILSP26FollowerSystem { /// @notice Emitted when following an address. /// @param follower The address that follows `addr` /// @param addr The address that is followed by `follower` diff --git a/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol b/packages/lsp26-contracts/contracts/LSP26FollowerSystem.sol similarity index 89% rename from packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol rename to packages/lsp26-contracts/contracts/LSP26FollowerSystem.sol index 748ca0921..c6126d304 100644 --- a/packages/lsp26-contracts/contracts/LSP26FollowingSystem.sol +++ b/packages/lsp26-contracts/contracts/LSP26FollowerSystem.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.17; // interfaces -import {ILSP26FollowingSystem} from "./ILSP26FollowingSystem.sol"; +import {ILSP26FollowerSystem} from "./ILSP26FollowerSystem.sol"; import { ILSP1UniversalReceiver } from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; @@ -31,38 +31,38 @@ import { LSP26NotFollowing } from "./LSP26Errors.sol"; -contract LSP26FollowingSystem is ILSP26FollowingSystem { +contract LSP26FollowerSystem is ILSP26FollowerSystem { using EnumerableSet for EnumerableSet.AddressSet; using ERC165Checker for address; mapping(address => EnumerableSet.AddressSet) private _followersOf; mapping(address => EnumerableSet.AddressSet) private _followingsOf; - // @inheritdoc ILSP26FollowingSystem + // @inheritdoc ILSP26FollowerSystem function follow(address addr) public { _follow(addr); } - // @inheritdoc ILSP26FollowingSystem + // @inheritdoc ILSP26FollowerSystem function followBatch(address[] memory addresses) public { for (uint256 index = 0; index < addresses.length; ++index) { _follow(addresses[index]); } } - // @inheritdoc ILSP26FollowingSystem + // @inheritdoc ILSP26FollowerSystem function unfollow(address addr) public { _unfollow(addr); } - // @inheritdoc ILSP26FollowingSystem + // @inheritdoc ILSP26FollowerSystem function unfollowBatch(address[] memory addresses) public { for (uint256 index = 0; index < addresses.length; ++index) { _unfollow(addresses[index]); } } - // @inheritdoc ILSP26FollowingSystem + // @inheritdoc ILSP26FollowerSystem function isFollowing( address follower, address addr @@ -70,17 +70,17 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { return _followingsOf[follower].contains(addr); } - // @inheritdoc ILSP26FollowingSystem + // @inheritdoc ILSP26FollowerSystem function followerCount(address addr) public view returns (uint256) { return _followersOf[addr].length(); } - // @inheritdoc ILSP26FollowingSystem + // @inheritdoc ILSP26FollowerSystem function followingCount(address addr) public view returns (uint256) { return _followingsOf[addr].length(); } - // @inheritdoc ILSP26FollowingSystem + // @inheritdoc ILSP26FollowerSystem function getFollowsByIndex( address addr, uint256 startIndex, @@ -97,7 +97,7 @@ contract LSP26FollowingSystem is ILSP26FollowingSystem { return followings; } - // @inheritdoc ILSP26FollowingSystem + // @inheritdoc ILSP26FollowerSystem function getFollowersByIndex( address addr, uint256 startIndex, diff --git a/packages/lsp26-contracts/hardhat.config.ts b/packages/lsp26-contracts/hardhat.config.ts index 606a22ef3..69a544a89 100644 --- a/packages/lsp26-contracts/hardhat.config.ts +++ b/packages/lsp26-contracts/hardhat.config.ts @@ -112,7 +112,7 @@ const config: HardhatUserConfig = { }, packager: { // What contracts to keep the artifacts and the bindings for. - contracts: ['ILSP26FollowingSystem', 'LSP26FollowingSystem'], + contracts: ['ILSP26FollowerSystem', 'LSP26FollowerSystem'], // Whether to include the TypeChain factories or not. // If this is enabled, you need to run the TypeChain files through the TypeScript compiler before shipping to the registry. includeFactories: true, diff --git a/packages/lsp26-contracts/package.json b/packages/lsp26-contracts/package.json index 1f7021329..fc40553df 100644 --- a/packages/lsp26-contracts/package.json +++ b/packages/lsp26-contracts/package.json @@ -1,7 +1,7 @@ { "name": "@lukso/lsp26-contracts", "version": "0.15.0", - "description": "Package for the LSP26 Following System standard", + "description": "Package for the LSP26 Follower System standard", "license": "Apache-2.0", "author": "", "main": "./dist/index.cjs", diff --git a/packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts b/packages/lsp26-contracts/tests/LSP26FollowerSystem.test.ts similarity index 96% rename from packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts rename to packages/lsp26-contracts/tests/LSP26FollowerSystem.test.ts index c8e897a9a..fe21b6d22 100644 --- a/packages/lsp26-contracts/tests/LSP26FollowingSystem.test.ts +++ b/packages/lsp26-contracts/tests/LSP26FollowerSystem.test.ts @@ -9,17 +9,17 @@ import { OPERATION_TYPES } from '@lukso/lsp0-contracts'; // types import { - LSP26FollowingSystem, - LSP26FollowingSystem__factory, + LSP26FollowerSystem, + LSP26FollowerSystem__factory, LSP0ERC725Account, LSP0ERC725Account__factory, RevertOnFollow__factory, RevertOnFollow, } from '../types'; -describe('testing `LSP26FollowingSystem`', () => { +describe('testing `LSP26FollowerSystem`', () => { let context: { - followerSystem: LSP26FollowingSystem; + followerSystem: LSP26FollowerSystem; followerSystemAddress: string; revertOnFollow: RevertOnFollow; revertOnFollowAddress: string; @@ -34,7 +34,7 @@ describe('testing `LSP26FollowingSystem`', () => { before(async () => { const signers = await ethers.getSigners(); const [owner, singleFollowSigner] = signers; - const followerSystem = await new LSP26FollowingSystem__factory(owner).deploy(); + const followerSystem = await new LSP26FollowerSystem__factory(owner).deploy(); const followerSystemAddress = await followerSystem.getAddress(); const universalProfile = await new LSP0ERC725Account__factory(owner).deploy(owner.address); From c2daa7d1130ae48c9f4d078436fce7bf550af631 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Tue, 20 Aug 2024 11:37:06 +0300 Subject: [PATCH 29/94] Update benchmark CI --- .github/workflows/benchmark.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 0005deac8..da10a1024 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -33,10 +33,10 @@ jobs: ref: ${{ github.event.pull_request.base.sha }} fetch-depth: 0 - - name: Use Node.js '16.15.0' - uses: actions/setup-node@v2 + - name: Use Node.js v20 + uses: actions/setup-node@v3 with: - node-version: "16.15.0" + node-version: "20.x" cache: "npm" - name: 📦 Install dependencies From 9dcc0aa7d27d19ba6fb39e4fa7c9982f227b58ae Mon Sep 17 00:00:00 2001 From: Yamen Merhi Date: Wed, 21 Aug 2024 17:16:13 +0300 Subject: [PATCH 30/94] refactor: Rename LSP26 in main lsp-smart-contract package (#969) --- .../{ILSP26FollowingSystem.sol => ILSP26FollowerSystem.sol} | 0 .../{LSP26FollowingSystem.sol => LSP26FollowerSystem.sol} | 0 packages/lsp-smart-contracts/hardhat.config.ts | 1 + 3 files changed, 1 insertion(+) rename packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/{ILSP26FollowingSystem.sol => ILSP26FollowerSystem.sol} (100%) rename packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/{LSP26FollowingSystem.sol => LSP26FollowerSystem.sol} (100%) diff --git a/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowingSystem.sol b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowerSystem.sol similarity index 100% rename from packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowingSystem.sol rename to packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/ILSP26FollowerSystem.sol diff --git a/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowingSystem.sol b/packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowerSystem.sol similarity index 100% rename from packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowingSystem.sol rename to packages/lsp-smart-contracts/contracts/LSP26FollowerSystem/LSP26FollowerSystem.sol diff --git a/packages/lsp-smart-contracts/hardhat.config.ts b/packages/lsp-smart-contracts/hardhat.config.ts index 2bf2433e8..300d41497 100644 --- a/packages/lsp-smart-contracts/hardhat.config.ts +++ b/packages/lsp-smart-contracts/hardhat.config.ts @@ -215,6 +215,7 @@ const config: HardhatUserConfig = { // Tools // ------------------ 'LSP23LinkedContractsFactory', + 'LSP26FollowerSystem', ], // Whether to include the TypeChain factories or not. // If this is enabled, you need to run the TypeChain files through the TypeScript compiler before shipping to the registry. From c30cb2d5c4bb9530d7538851b6caf5a327b6d529 Mon Sep 17 00:00:00 2001 From: b00ste Date: Thu, 22 Aug 2024 14:46:30 +0300 Subject: [PATCH 31/94] test: add extreme case tests --- .../contracts/mock/InfiniteLoopURD.sol | 24 +++++ .../contracts/mock/ReturnBomb.sol | 26 +++++ .../mock/SelfDestructOnInterfaceCheck.sol | 23 +++++ .../tests/LSP26FollowerSystem.test.ts | 96 +++++++++++++++++++ 4 files changed, 169 insertions(+) create mode 100644 packages/lsp26-contracts/contracts/mock/InfiniteLoopURD.sol create mode 100644 packages/lsp26-contracts/contracts/mock/ReturnBomb.sol create mode 100644 packages/lsp26-contracts/contracts/mock/SelfDestructOnInterfaceCheck.sol diff --git a/packages/lsp26-contracts/contracts/mock/InfiniteLoopURD.sol b/packages/lsp26-contracts/contracts/mock/InfiniteLoopURD.sol new file mode 100644 index 000000000..8517a6241 --- /dev/null +++ b/packages/lsp26-contracts/contracts/mock/InfiniteLoopURD.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +// interfaces +import { + ILSP1UniversalReceiver +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; + +contract InfiniteLoopURD is ILSP1UniversalReceiver { + uint256 public counter; + + function supportsInterface(bytes4) external pure returns (bool) { + return true; + } + + function universalReceiver( + bytes32, + bytes memory + ) external payable returns (bytes memory) { + while (true) { + ++counter; + } + } +} diff --git a/packages/lsp26-contracts/contracts/mock/ReturnBomb.sol b/packages/lsp26-contracts/contracts/mock/ReturnBomb.sol new file mode 100644 index 000000000..7212088da --- /dev/null +++ b/packages/lsp26-contracts/contracts/mock/ReturnBomb.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +// interfaces +import { + ILSP1UniversalReceiver +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; + +contract ReturnBomb is ILSP1UniversalReceiver { + uint256 public counter; + + function supportsInterface(bytes4) external pure returns (bool) { + return true; + } + + function universalReceiver( + bytes32, + bytes memory + ) external payable returns (bytes memory) { + ++counter; + // solhint-disable-next-line no-inline-assembly + assembly { + revert(0, 10000) + } + } +} diff --git a/packages/lsp26-contracts/contracts/mock/SelfDestructOnInterfaceCheck.sol b/packages/lsp26-contracts/contracts/mock/SelfDestructOnInterfaceCheck.sol new file mode 100644 index 000000000..517ad6f82 --- /dev/null +++ b/packages/lsp26-contracts/contracts/mock/SelfDestructOnInterfaceCheck.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.17; + +// interfaces +import { + ILSP1UniversalReceiver +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; + +contract SelfDestructOnInterfaceCheck is ILSP1UniversalReceiver { + uint256 public counter; + + function supportsInterface(bytes4) external returns (bool) { + selfdestruct(payable(msg.sender)); + return true; + } + + function universalReceiver( + bytes32, + bytes memory + ) external payable returns (bytes memory) { + return ""; + } +} diff --git a/packages/lsp26-contracts/tests/LSP26FollowerSystem.test.ts b/packages/lsp26-contracts/tests/LSP26FollowerSystem.test.ts index fe21b6d22..ef00ff770 100644 --- a/packages/lsp26-contracts/tests/LSP26FollowerSystem.test.ts +++ b/packages/lsp26-contracts/tests/LSP26FollowerSystem.test.ts @@ -15,6 +15,12 @@ import { LSP0ERC725Account__factory, RevertOnFollow__factory, RevertOnFollow, + ReturnBomb__factory, + ReturnBomb, + SelfDestructOnInterfaceCheck__factory, + SelfDestructOnInterfaceCheck, + InfiniteLoopURD, + InfiniteLoopURD__factory, } from '../types'; describe('testing `LSP26FollowerSystem`', () => { @@ -115,6 +121,96 @@ describe('testing `LSP26FollowerSystem`', () => { }); }); + describe('testing follow/unfollow a contract that self destructs on interface check', async () => { + let selfDestruct: SelfDestructOnInterfaceCheck; + + before(async () => { + selfDestruct = await new SelfDestructOnInterfaceCheck__factory(context.owner).deploy(); + }); + + it('should pass following', async () => { + await context.followerSystem.connect(context.owner).follow(await selfDestruct.getAddress()); + + expect( + await context.followerSystem.isFollowing( + context.owner.address, + await selfDestruct.getAddress(), + ), + ).to.be.true; + }); + + it('should pass unfollowing', async () => { + await context.followerSystem.connect(context.owner).unfollow(await selfDestruct.getAddress()); + + expect( + await context.followerSystem.isFollowing( + context.owner.address, + await selfDestruct.getAddress(), + ), + ).to.be.false; + }); + }); + + describe('testing follow/unfollow a contract with return bomb', () => { + let returnBomb: ReturnBomb; + + before(async () => { + returnBomb = await new ReturnBomb__factory(context.owner).deploy(); + }); + + it('should pass following', async () => { + await context.followerSystem.connect(context.owner).follow(await returnBomb.getAddress()); + + expect( + await context.followerSystem.isFollowing( + context.owner.address, + await returnBomb.getAddress(), + ), + ).to.be.true; + }); + + it('should pass unfollowing', async () => { + await context.followerSystem.connect(context.owner).unfollow(await returnBomb.getAddress()); + + expect( + await context.followerSystem.isFollowing( + context.owner.address, + await returnBomb.getAddress(), + ), + ).to.be.false; + }); + }); + + describe('testing follow/unfollow a contract that has an infinite loop in urd', () => { + let infiniteLoop: InfiniteLoopURD; + + before(async () => { + infiniteLoop = await new InfiniteLoopURD__factory(context.owner).deploy(); + }); + + it('should pass following', async () => { + await context.followerSystem.connect(context.owner).follow(await infiniteLoop.getAddress()); + + expect( + await context.followerSystem.isFollowing( + context.owner.address, + await infiniteLoop.getAddress(), + ), + ).to.be.true; + }); + + it('should pass unfollowing', async () => { + await context.followerSystem.connect(context.owner).unfollow(await infiniteLoop.getAddress()); + + expect( + await context.followerSystem.isFollowing( + context.owner.address, + await infiniteLoop.getAddress(), + ), + ).to.be.false; + }); + }); + describe.skip('gas tests', () => { const gasCostResult: { followingGasCost?: number[]; From e483c92ac1ea0ac2690b2407aa26b6a74ed0e27d Mon Sep 17 00:00:00 2001 From: b00ste Date: Wed, 21 Aug 2024 12:19:11 +0300 Subject: [PATCH 32/94] feat: create script to deploy LSP26 Follower System --- .../016_deploy_lsp26_follower_system.ts | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 packages/lsp-smart-contracts/deploy/016_deploy_lsp26_follower_system.ts diff --git a/packages/lsp-smart-contracts/deploy/016_deploy_lsp26_follower_system.ts b/packages/lsp-smart-contracts/deploy/016_deploy_lsp26_follower_system.ts new file mode 100644 index 000000000..ba60f0db8 --- /dev/null +++ b/packages/lsp-smart-contracts/deploy/016_deploy_lsp26_follower_system.ts @@ -0,0 +1,57 @@ +import { getCreate2Address, concat, keccak256 } from 'ethers'; +import { config, ethers } from 'hardhat'; +import { DeployFunction } from 'hardhat-deploy/types'; + +const deployFollowerSystem: DeployFunction = async ({ getNamedAccounts }) => { + const { owner: account } = await getNamedAccounts(); + const deployer = await ethers.getSigner(account); + console.log('Deploying with deployer address: ', deployer.address); + + const { deterministicDeployment } = config; + const nickFactoryAddress = deterministicDeployment['luksoTestnet'].factory; + + console.log('Deploying contract 🆙🔄 using Nick Factory 🧙🏻‍♂️ at address: ', nickFactoryAddress); + + // Salt found: 0x7c0acd1428c1a42815d06ceeb50b11fcb9beddb1dcc582ddf5f9ca37979c7e4d with address: 0xf01103E5a9909Fc0DBe8166dA7085e0285daDDcA + // Salt found: 0xc1432fd06941442324a9c2ae23cbb4ac622901a14ee172c419eb9f9e0a324c20 with address: 0xf01103E59c502Eb836A3dfB5f80D101c3FD0f53b + + const EXPECTED_ADDRESS = '0xf01103E5a9909Fc0DBe8166dA7085e0285daDDcA'; + const STANDARD_SALT = '0x7c0acd1428c1a42815d06ceeb50b11fcb9beddb1dcc582ddf5f9ca37979c7e4d'; + const CONTRACT_BYTEODE = + '0x608060405234801561001057600080fd5b50610d6c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063645487071161007657806399ec3a421161005b57806399ec3a421461013c578063b2a8d0691461015f578063cf8711c81461017257600080fd5b806364548707146101165780638dd1e47e1461012957600080fd5b8063015a4ead146100a857806330b3a890146100bd5780634dbf27cc146100e35780635a39c581146100f6575b600080fd5b6100bb6100b6366004610a01565b610185565b005b6100d06100cb366004610a01565b610191565b6040519081526020015b60405180910390f35b6100bb6100f1366004610a01565b6101b8565b610109610104366004610a1c565b6101c1565b6040516100da9190610a4f565b6100d0610124366004610a01565b610292565b6100bb610137366004610ae3565b6102b3565b61014f61014a366004610b90565b6102f5565b60405190151581526020016100da565b61010961016d366004610a1c565b61031e565b6100bb610180366004610ae3565b6103e5565b61018e81610423565b50565b6001600160a01b03811660009081526020819052604081206101b2906105d0565b92915050565b61018e816105da565b606060006101cf8484610bd9565b905060008167ffffffffffffffff8111156101ec576101ec610a9c565b604051908082528060200260200182016040528015610215578160200160208202803683370190505b50905060005b828110156102885761024e6102308288610bec565b6001600160a01b038916600090815260016020526040902090610752565b82828151811061026057610260610bff565b6001600160a01b039092166020928302919091019091015261028181610c15565b905061021b565b5095945050505050565b6001600160a01b03811660009081526001602052604081206101b2906105d0565b60005b81518110156102f1576102e18282815181106102d4576102d4610bff565b6020026020010151610423565b6102ea81610c15565b90506102b6565b5050565b6001600160a01b0382166000908152600160205260408120610317908361075e565b9392505050565b6060600061032c8484610bd9565b905060008167ffffffffffffffff81111561034957610349610a9c565b604051908082528060200260200182016040528015610372578160200160208202803683370190505b50905060005b82811015610288576103ab61038d8288610bec565b6001600160a01b038916600090815260208190526040902090610752565b8282815181106103bd576103bd610bff565b6001600160a01b03909216602092830291909101909101526103de81610c15565b9050610378565b60005b81518110156102f15761041382828151811061040657610406610bff565b60200260200101516105da565b61041c81610c15565b90506103e8565b33600090815260016020526040812061043c9083610780565b905080610485576040517fc70bad4e0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b6001600160a01b03821660009081526020819052604090206104a79033610780565b50604080513381526001600160a01b03841660208201527f083700fd0d85112c9d8c5823585c7542e8fadb693c9902e5bc590ab367f7a15e910160405180910390a16105036001600160a01b038316631aed5a8560e21b610795565b156102f1576040516bffffffffffffffffffffffff193360601b1660208201526001600160a01b03831690636bb56a14907f9d3c0b4012b69658977b099bdaa51eff0f0460f421fba96d15669506c00d1c4f906034015b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610586929190610c52565b6000604051808303816000875af19250505080156105c657506040513d6000823e601f3d908101601f191682016040526105c39190810190610c8c565b60015b156102f157505050565b60006101b2825490565b6001600160a01b038116330361061c576040517fea61954200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526001602052604081206106359083610864565b905080610679576040517f6feacbf60000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161047c565b6001600160a01b038216600090815260208190526040902061069b9033610864565b50604080513381526001600160a01b03841660208201527fbccc71dc7842b86291138666aa18e133ee6d41aa71e6d7c650debad1a0576635910160405180910390a16106f76001600160a01b038316631aed5a8560e21b610795565b156102f1576040516bffffffffffffffffffffffff193360601b1660208201526001600160a01b03831690636bb56a14907f71e02f9f05bcd5816ec4f3134aa2e5a916669537ec6c77fe66ea595fabc2d51a9060340161055a565b60006103178383610879565b6001600160a01b03811660009081526001830160205260408120541515610317565b6000610317836001600160a01b0384166108a3565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561084d575060208210155b80156108595750600081115b979650505050505050565b6000610317836001600160a01b038416610996565b600082600001828154811061089057610890610bff565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561098c5760006108c7600183610bd9565b85549091506000906108db90600190610bd9565b90508181146109405760008660000182815481106108fb576108fb610bff565b906000526020600020015490508087600001848154811061091e5761091e610bff565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061095157610951610d20565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506101b2565b60009150506101b2565b60008181526001830160205260408120546109dd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556101b2565b5060006101b2565b80356001600160a01b03811681146109fc57600080fd5b919050565b600060208284031215610a1357600080fd5b610317826109e5565b600080600060608486031215610a3157600080fd5b610a3a846109e5565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b81811015610a905783516001600160a01b031683529284019291840191600101610a6b565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610adb57610adb610a9c565b604052919050565b60006020808385031215610af657600080fd5b823567ffffffffffffffff80821115610b0e57600080fd5b818501915085601f830112610b2257600080fd5b813581811115610b3457610b34610a9c565b8060051b9150610b45848301610ab2565b8181529183018401918481019088841115610b5f57600080fd5b938501935b83851015610b8457610b75856109e5565b82529385019390850190610b64565b98975050505050505050565b60008060408385031215610ba357600080fd5b610bac836109e5565b9150610bba602084016109e5565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b818103818111156101b2576101b2610bc3565b808201808211156101b2576101b2610bc3565b634e487b7160e01b600052603260045260246000fd5b600060018201610c2757610c27610bc3565b5060010190565b60005b83811015610c49578181015183820152602001610c31565b50506000910152565b8281526040602082015260008251806040840152610c77816060850160208701610c2e565b601f01601f1916919091016060019392505050565b600060208284031215610c9e57600080fd5b815167ffffffffffffffff80821115610cb657600080fd5b818401915084601f830112610cca57600080fd5b815181811115610cdc57610cdc610a9c565b610cef601f8201601f1916602001610ab2565b9150808252856020828501011115610d0657600080fd5b610d17816020840160208601610c2e565b50949350505050565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220d49dd5b2a7c580c2c5c73e52c9cd6bd492943d285801069245b07017db7893bd64736f6c63430008110033'; + + const preCalculatedAddress = getCreate2Address( + nickFactoryAddress, + STANDARD_SALT, + keccak256(CONTRACT_BYTEODE), + ); + + if (preCalculatedAddress !== EXPECTED_ADDRESS) { + throw new Error( + `❌ Aborting CREATE2 deployment: Incorrect pre-calculated address with CREATE2. Expected ${EXPECTED_ADDRESS}, got ${preCalculatedAddress}`, + ); + } else { + function Create2Address(name, address) { + this.name = name; + this.address = address; + } + + console.log(`Pre-calculated address match! 🪄`); + console.table([ + new Create2Address('EXPECTED_ADDRESS', EXPECTED_ADDRESS), + new Create2Address('getCreate2Address', preCalculatedAddress), + ]); + console.log('✅ Processing with deployment: '); + } + + const deploymentTx = { + to: nickFactoryAddress, + data: concat([STANDARD_SALT, CONTRACT_BYTEODE]), + }; + + const tx = await deployer.sendTransaction(deploymentTx); + console.log('Deployment tx: ', tx); +}; + +export default deployFollowerSystem; +deployFollowerSystem.tags = ['LSP26FollowerSystem']; From ab36759b2642824c3f17cc96755c2e576d05c696 Mon Sep 17 00:00:00 2001 From: Andreas Richter <708186+richtera@users.noreply.github.com> Date: Fri, 30 Aug 2024 05:01:30 -0400 Subject: [PATCH 33/94] ci: Repair node-versions to match everywhere. --- .github/workflows/benchmark.yml | 8 ++++---- .github/workflows/build-lint-test.yml | 2 +- .github/workflows/coverage.yml | 6 +++--- .github/workflows/deploy-verify.yml | 2 +- .github/workflows/mythx-analysis.yml | 6 +++--- .github/workflows/solc_version.yml | 6 +++--- .tool-versions | 2 +- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index da10a1024..7ab47765e 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -34,7 +34,7 @@ jobs: fetch-depth: 0 - name: Use Node.js v20 - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "20.x" cache: "npm" @@ -59,10 +59,10 @@ jobs: with: clean: false - - name: Use Node.js '16.15.0' - uses: actions/setup-node@v2 + - name: Use Node.js '20.x' + uses: actions/setup-node@v4 with: - node-version: "16.15.0" + node-version: "20.x" cache: "npm" - name: 📦 Install dependencies diff --git a/.github/workflows/build-lint-test.yml b/.github/workflows/build-lint-test.yml index 1e4aae209..6773539b6 100644 --- a/.github/workflows/build-lint-test.yml +++ b/.github/workflows/build-lint-test.yml @@ -13,7 +13,7 @@ jobs: # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - name: Use Node.js v20 - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "20.x" cache: "npm" diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index cef18cecc..31c70e4eb 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -22,10 +22,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Use Node.js v16 - uses: actions/setup-node@v2 + - name: Use Node.js v20.x + uses: actions/setup-node@v4 with: - node-version: "16.x" + node-version: "20.x" cache: "npm" - name: Install dependencies diff --git a/.github/workflows/deploy-verify.yml b/.github/workflows/deploy-verify.yml index 410b78a52..51e51d8cb 100644 --- a/.github/workflows/deploy-verify.yml +++ b/.github/workflows/deploy-verify.yml @@ -24,7 +24,7 @@ jobs: - uses: actions/checkout@v3 - name: Use Node.js v20 - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: "20.x" cache: "npm" diff --git a/.github/workflows/mythx-analysis.yml b/.github/workflows/mythx-analysis.yml index 438c4c212..8503487e4 100644 --- a/.github/workflows/mythx-analysis.yml +++ b/.github/workflows/mythx-analysis.yml @@ -15,10 +15,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Setup Node.js '16.15.0' - uses: actions/setup-node@v2 + - name: Setup Node.js '20.x' + uses: actions/setup-node@v4 with: - node-version: "16.15.0" + node-version: "20.x" cache: "npm" - name: Set up Python 3.8 diff --git a/.github/workflows/solc_version.yml b/.github/workflows/solc_version.yml index 469cf228a..e1563ae70 100644 --- a/.github/workflows/solc_version.yml +++ b/.github/workflows/solc_version.yml @@ -49,10 +49,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Use Node.js '16.15.0' - uses: actions/setup-node@v2 + - name: Use Node.js '20.x' + uses: actions/setup-node@v4 with: - node-version: "16.15.0" + node-version: "20.x" cache: "npm" - name: 📦 Install dependencies diff --git a/.tool-versions b/.tool-versions index 5f732e608..3e511092e 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -nodejs 16.19.0 \ No newline at end of file +nodejs 20 From e21f431fbdaeaab90391923c9d1ea4baf55aa918 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Thu, 26 Sep 2024 11:30:09 +0200 Subject: [PATCH 34/94] fix: disallow arbitrary sending of 0 amount in LSP7 --- packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol index 3ec5676bb..ec4e16065 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol @@ -558,7 +558,7 @@ abstract contract LSP7DigitalAssetCore is ILSP7DigitalAsset { operator ]; - if (amountToSpend > authorizedAmount) { + if (authorizedAmount == 0 || amountToSpend > authorizedAmount) { revert LSP7AmountExceedsAuthorizedAmount( tokenOwner, authorizedAmount, From d45da9cff05da8a08e93df0a6b76be1550e7a662 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Thu, 26 Sep 2024 11:30:20 +0200 Subject: [PATCH 35/94] test: add necessary tests --- .../LSP7DigitalAsset.behaviour.ts | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts b/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts index 50c557c07..919c0d29c 100644 --- a/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts +++ b/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts @@ -2206,6 +2206,80 @@ export const shouldBehaveLikeLSP7 = (buildContext: () => Promise { + describe('when the caller is the tokenOwner', () => { + it('should succeed', async () => { + const tokenOwner = context.accounts.owner.address; + const recipient = context.accounts.anyone.address; + const amount = 0; + + await expect( + context.lsp7 + .connect(context.accounts.owner) + .transfer(tokenOwner, recipient, amount, true, '0x'), + ) + .to.emit(context.lsp7, 'Transfer') + .withArgs(tokenOwner, tokenOwner, recipient, amount, true, '0x'); + }); + }); + + describe('when the caller is the operator', () => { + describe("when the caller doesn't have an authorized amount", () => { + it('should revert', async () => { + const operator = context.accounts.operator.address; + const tokenOwner = context.accounts.owner.address; + const recipient = context.accounts.anyone.address; + const amount = 0; + + await expect( + context.lsp7 + .connect(context.accounts.operator) + .transfer(tokenOwner, recipient, amount, true, '0x'), + ) + .to.be.revertedWithCustomError(context.lsp7, 'LSP7AmountExceedsAuthorizedAmount') + .withArgs(tokenOwner, 0, operator, amount); + }); + }); + describe('when the caller have an authorized amount', () => { + it('should succeed', async () => { + const operator = context.accounts.operator.address; + const tokenOwner = context.accounts.owner.address; + const recipient = context.accounts.anyone.address; + const amountAuthorized = 100; + const amount = 0; + + // pre-conditions + await context.lsp7 + .connect(context.accounts.owner) + .authorizeOperator(operator, amountAuthorized, '0x'); + expect(await context.lsp7.authorizedAmountFor(operator, tokenOwner)).to.equal( + amountAuthorized, + ); + + await expect( + context.lsp7 + .connect(context.accounts.operator) + .transfer(tokenOwner, recipient, amount, true, '0x'), + ) + .to.emit(context.lsp7, 'Transfer') + .withArgs(operator, tokenOwner, recipient, amount, true, '0x'); + }); + }); + }); + + describe('when making a call with sending value', () => { + it('should revert', async () => { + const amountSent = 200; + await expect( + context.accounts.anyone.sendTransaction({ + to: await context.lsp7.getAddress(), + value: amountSent, + }), + ).to.be.revertedWithCustomError(context.lsp7, 'LSP7TokenContractCannotHoldValue'); + }); + }); + }); + describe('batchCalls', () => { describe('when using one function', () => { describe('using `mint(...)`', () => { From d7a63135ceb1f888f8d46c56806ed3bd3640658a Mon Sep 17 00:00:00 2001 From: Yamen Merhi Date: Thu, 3 Oct 2024 11:31:38 +0300 Subject: [PATCH 36/94] Add contribute section in README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 8bcb0351d..46f1e2a00 100644 --- a/README.md +++ b/README.md @@ -178,6 +178,10 @@ The following audits and formal verification were conducted. All high-level issu - MiloTruck, 2023-11-31, Final Result: [MiloTruck_audit_2023_11_31.pdf](./audits/MiloTruck_audit_2023_11_31.pdf) - MiloTruck, 2024-01-24, Final Result: [MiloTruck_audit_2024_01_24.pdf](./audits/MiloTruck_audit_2024_01_24.pdf) +## Contribute + +The implementation contracts of the [LSPs](https://github.com/lukso-network/LIPs) exist thanks to their contributors. There are many ways you can participate and help build high quality software. Check out the [contribution guide](./CONTRIBUTING.md)! + ## Contributors ✨ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): From 3fb396a6652d839036da1e41b98b252c67c81063 Mon Sep 17 00:00:00 2001 From: Yamen Merhi Date: Thu, 3 Oct 2024 11:33:09 +0300 Subject: [PATCH 37/94] Update CONTRIBUTING.md --- CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8a0b6f0d7..cba51ce4b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,6 +6,8 @@ Since the `@lukso/lsp-smart-contracts` is an Open Source project, we welcome con - report bug and issues. - introduce new features or bug fixes. +Any non-trivial code contribution must be first discussed with the maintainers in an issue. Only very minor changes are accepted without prior discussion. + ## **Clone project** Our project uses submodules, we recommend you to clone our repository using the following command: From b8da3020ccc96559b640c07cf29c9b2972885bd6 Mon Sep 17 00:00:00 2001 From: Yamen Merhi Date: Thu, 10 Oct 2024 10:50:36 +0300 Subject: [PATCH 38/94] Apply suggestions from code review Co-authored-by: Jean Cvllr <31145285+CJ42@users.noreply.github.com> --- CONTRIBUTING.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cba51ce4b..2806c9f43 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Since the `@lukso/lsp-smart-contracts` is an Open Source project, we welcome con - report bug and issues. - introduce new features or bug fixes. -Any non-trivial code contribution must be first discussed with the maintainers in an issue. Only very minor changes are accepted without prior discussion. +Any non-trivial code contribution **must be first discussed with the maintainers and the developer community in an [issue](https://github.com/lukso-network/lsp-smart-contracts/issues/new/choose)**. Only very minor changes are accepted without prior discussion. ## **Clone project** diff --git a/README.md b/README.md index 46f1e2a00..4cfb42233 100644 --- a/README.md +++ b/README.md @@ -180,7 +180,7 @@ The following audits and formal verification were conducted. All high-level issu ## Contribute -The implementation contracts of the [LSPs](https://github.com/lukso-network/LIPs) exist thanks to their contributors. There are many ways you can participate and help build high quality software. Check out the [contribution guide](./CONTRIBUTING.md)! +The implementation contracts of the [LSPs](https://github.com/lukso-network/LIPs) exist thanks to their contributors. There are many ways you can participate and help build high quality software. Check out the [contribution guidelines](./CONTRIBUTING.md)! ## Contributors ✨ From bef48cfb0a52ba0c2ffc27ea74557bbdc9b1361a Mon Sep 17 00:00:00 2001 From: CJ42 Date: Thu, 22 Aug 2024 15:18:47 +0100 Subject: [PATCH 39/94] refactor!: remove `Core` contract from LSP4 package --- .../contracts/LSP4DigitalAssetMetadata.sol | 36 +++++++++----- .../LSP4DigitalAssetMetadataCore.sol | 47 ------------------ .../LSP4DigitalAssetMetadataInitAbstract.sol | 41 +++++++++------ .../erc725-smart-contracts-8.0.0.tgz | Bin 0 -> 14290 bytes packages/lsp4-contracts/package.json | 4 +- 5 files changed, 53 insertions(+), 75 deletions(-) delete mode 100644 packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataCore.sol create mode 100644 packages/lsp4-contracts/erc725-smart-contracts-8.0.0.tgz diff --git a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol index cb993cbda..cf6119640 100644 --- a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol +++ b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol @@ -3,8 +3,6 @@ pragma solidity ^0.8.4; // modules import {ERC725Y} from "@erc725/smart-contracts/contracts/ERC725Y.sol"; -import {ERC725YCore} from "@erc725/smart-contracts/contracts/ERC725YCore.sol"; -import {LSP4DigitalAssetMetadataCore} from "./LSP4DigitalAssetMetadataCore.sol"; // constants import { @@ -15,15 +13,19 @@ import { _LSP4_TOKEN_TYPE_KEY } from "./LSP4Constants.sol"; +// errors +import { + LSP4TokenNameNotEditable, + LSP4TokenSymbolNotEditable, + LSP4TokenTypeNotEditable +} from "./LSP4Errors.sol"; + /** * @title Implementation of a LSP4DigitalAssetMetadata contract that stores the **Token-Metadata** (`LSP4TokenName` and `LSP4TokenSymbol`) in its ERC725Y data store. * @author Matthew Stevens * @dev Standard Implementation of the LSP4 standard. */ -abstract contract LSP4DigitalAssetMetadata is - ERC725Y, - LSP4DigitalAssetMetadataCore -{ +abstract contract LSP4DigitalAssetMetadata is ERC725Y { /** * @notice Deploying a digital asset `name_` with the `symbol_` symbol. * @@ -39,14 +41,14 @@ abstract contract LSP4DigitalAssetMetadata is uint256 lsp4TokenType_ ) ERC725Y(initialOwner_) { // set data key SupportedStandards:LSP4DigitalAsset - ERC725YCore._setData( + ERC725Y._setData( _LSP4_SUPPORTED_STANDARDS_KEY, _LSP4_SUPPORTED_STANDARDS_VALUE ); - ERC725YCore._setData(_LSP4_TOKEN_NAME_KEY, bytes(name_)); - ERC725YCore._setData(_LSP4_TOKEN_SYMBOL_KEY, bytes(symbol_)); - ERC725YCore._setData(_LSP4_TOKEN_TYPE_KEY, abi.encode(lsp4TokenType_)); + ERC725Y._setData(_LSP4_TOKEN_NAME_KEY, bytes(name_)); + ERC725Y._setData(_LSP4_TOKEN_SYMBOL_KEY, bytes(symbol_)); + ERC725Y._setData(_LSP4_TOKEN_TYPE_KEY, abi.encode(lsp4TokenType_)); } /** @@ -56,7 +58,17 @@ abstract contract LSP4DigitalAssetMetadata is function _setData( bytes32 dataKey, bytes memory dataValue - ) internal virtual override(ERC725YCore, LSP4DigitalAssetMetadataCore) { - LSP4DigitalAssetMetadataCore._setData(dataKey, dataValue); + ) internal virtual override { + if (dataKey == _LSP4_TOKEN_NAME_KEY) { + revert LSP4TokenNameNotEditable(); + } else if (dataKey == _LSP4_TOKEN_SYMBOL_KEY) { + revert LSP4TokenSymbolNotEditable(); + } else if (dataKey == _LSP4_TOKEN_TYPE_KEY) { + revert LSP4TokenTypeNotEditable(); + } else { + _store[dataKey] = dataValue; + + emit DataChanged(dataKey, dataValue); + } } } diff --git a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataCore.sol b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataCore.sol deleted file mode 100644 index 17310ad8d..000000000 --- a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataCore.sol +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.4; - -// modules -import {ERC725YCore} from "@erc725/smart-contracts/contracts/ERC725YCore.sol"; - -// constants -import { - _LSP4_TOKEN_NAME_KEY, - _LSP4_TOKEN_SYMBOL_KEY, - _LSP4_TOKEN_TYPE_KEY -} from "./LSP4Constants.sol"; - -// errors -import { - LSP4TokenNameNotEditable, - LSP4TokenSymbolNotEditable, - LSP4TokenTypeNotEditable -} from "./LSP4Errors.sol"; - -/** - * @title Implementation of a LSP4DigitalAssetMetadata contract that stores the **Token-Metadata** (`LSP4TokenName` and `LSP4TokenSymbol`) in its ERC725Y data store. - * @author Matthew Stevens - * @dev Standard Implementation of the LSP4 standard. - */ -abstract contract LSP4DigitalAssetMetadataCore is ERC725YCore { - /** - * @dev The ERC725Y data keys `LSP4TokenName` and `LSP4TokenSymbol` cannot be changed - * via this function once the digital asset contract has been deployed. - */ - function _setData( - bytes32 dataKey, - bytes memory dataValue - ) internal virtual override { - if (dataKey == _LSP4_TOKEN_NAME_KEY) { - revert LSP4TokenNameNotEditable(); - } else if (dataKey == _LSP4_TOKEN_SYMBOL_KEY) { - revert LSP4TokenSymbolNotEditable(); - } else if (dataKey == _LSP4_TOKEN_TYPE_KEY) { - revert LSP4TokenTypeNotEditable(); - } else { - _store[dataKey] = dataValue; - - emit DataChanged(dataKey, dataValue); - } - } -} diff --git a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol index 5c35af88e..f6bff82ea 100644 --- a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol +++ b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol @@ -6,10 +6,6 @@ import { ERC725YInitAbstract } from "@erc725/smart-contracts/contracts/ERC725YInitAbstract.sol"; -import {ERC725YCore} from "@erc725/smart-contracts/contracts/ERC725YCore.sol"; - -import {LSP4DigitalAssetMetadataCore} from "./LSP4DigitalAssetMetadataCore.sol"; - // constants import { _LSP4_SUPPORTED_STANDARDS_KEY, @@ -19,15 +15,19 @@ import { _LSP4_TOKEN_TYPE_KEY } from "./LSP4Constants.sol"; +// errors +import { + LSP4TokenNameNotEditable, + LSP4TokenSymbolNotEditable, + LSP4TokenTypeNotEditable +} from "./LSP4Errors.sol"; + /** * @title Implementation of a LSP4DigitalAssetMetadata contract that stores the **Token-Metadata** (`LSP4TokenName` and `LSP4TokenSymbol`) in its ERC725Y data store. * @author Matthew Stevens * @dev Inheritable Proxy Implementation of the LSP4 standard. */ -abstract contract LSP4DigitalAssetMetadataInitAbstract is - LSP4DigitalAssetMetadataCore, - ERC725YInitAbstract -{ +abstract contract LSP4DigitalAssetMetadataInitAbstract is ERC725YInitAbstract { /** * @notice Initializing a digital asset `name_` with the `symbol_` symbol. * @@ -45,14 +45,17 @@ abstract contract LSP4DigitalAssetMetadataInitAbstract is ERC725YInitAbstract._initialize(initialOwner_); // set data key SupportedStandards:LSP4DigitalAsset - ERC725YCore._setData( + ERC725YInitAbstract._setData( _LSP4_SUPPORTED_STANDARDS_KEY, _LSP4_SUPPORTED_STANDARDS_VALUE ); - ERC725YCore._setData(_LSP4_TOKEN_NAME_KEY, bytes(name_)); - ERC725YCore._setData(_LSP4_TOKEN_SYMBOL_KEY, bytes(symbol_)); - ERC725YCore._setData(_LSP4_TOKEN_TYPE_KEY, abi.encode(lsp4TokenType_)); + ERC725YInitAbstract._setData(_LSP4_TOKEN_NAME_KEY, bytes(name_)); + ERC725YInitAbstract._setData(_LSP4_TOKEN_SYMBOL_KEY, bytes(symbol_)); + ERC725YInitAbstract._setData( + _LSP4_TOKEN_TYPE_KEY, + abi.encode(lsp4TokenType_) + ); } /** @@ -62,7 +65,17 @@ abstract contract LSP4DigitalAssetMetadataInitAbstract is function _setData( bytes32 dataKey, bytes memory dataValue - ) internal virtual override(ERC725YCore, LSP4DigitalAssetMetadataCore) { - LSP4DigitalAssetMetadataCore._setData(dataKey, dataValue); + ) internal virtual override { + if (dataKey == _LSP4_TOKEN_NAME_KEY) { + revert LSP4TokenNameNotEditable(); + } else if (dataKey == _LSP4_TOKEN_SYMBOL_KEY) { + revert LSP4TokenSymbolNotEditable(); + } else if (dataKey == _LSP4_TOKEN_TYPE_KEY) { + revert LSP4TokenTypeNotEditable(); + } else { + _store[dataKey] = dataValue; + + emit DataChanged(dataKey, dataValue); + } } } diff --git a/packages/lsp4-contracts/erc725-smart-contracts-8.0.0.tgz b/packages/lsp4-contracts/erc725-smart-contracts-8.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..335f6673ba3d22c45d0b50e4f4adc1371f09fd2f GIT binary patch literal 14290 zcmcI~Q*b5>uxxDGwr$(qcw;9U+cr10ZQJ@{+jg?C^WFc{dAW7p?>zO)RP|d|b@dE! z3=GKs6d3Tv&(>#)YtgE|?+3HuGbip?%VTP-=C#JQ`}bX$6493R5p{VS3EJO=LK#NU zjfJ-NyR*!}RBl-%0&eRIH@Q1X?cLp57s>T}J4z17Kfo38uNg_Pqk6tv=nS*+CDK!%A%Ixt*+Zas zH#Es|+qBRKUtaeIU@};o_@tW)^-hg=#$k|XP`sFmK=ps*O*uzpGCG z_(CZ#h}6aCJSin`44WXfu&FX{SB3irjkQozq%1a^B9rBBgC`vfqTiupA#*=jF%6Z= zARdK9Gta{rk$`gF-IO80YHU1|3|aVShBo@u&y#mqejZ~chCT#|JIDm6o|*$jgIkr&7*1q1lwdPvh$221s*rU_ z7!0Bdv^l8!ao&>kzUYDj?w4{EY3I>|#0xpJUD90<&Oye^kq$*hgEl98-I|s9b5oQ$ zYRTBu!_s;DDB|H`h8HZzp!oY8lq}idLZ{KZ(lePMDU=CYDJdblwg8USbZ-<`jp!{E zLb=LZew|dX!+d4i(ROja;snjmS~f$CE8olP^XD);M3G zLn6tlMfhoP<_vPW@W;?lRWUH36BchYRMfb?{Obl_&=dy8&EbWD*D`M8_#7PH32&Z6 zM?P$apf2mBpkw2Vz1onHkVB#Kk;We`z17IF5-{ApVYUV9fu$L<~~~dv=ka zNje|A#k+v55@K6=D!PaT7nOv`$vVvlVceAYHdkgYc{)^OHJfJOL$y%K9PfTL!U*!=Ep84stYJ7L@ipBEgh$Y>w?+3$}V9Ad4@kNN+ zMAB8Q$B@&Mv9}ny#|8$2n!P~?Vv2DjGGp*e;Zy)htOgo`O-B2{0(JevlO<;WDSqG# z%DAoA!R?d*`sjr=Dss!(ebSNA5Hn1p>MEu!5}{fXAlYbOk)EYt={U(cI0VtCJh4Lo zmq;Un@yLp7tykPhvYUqC;7X&)lu|TtGovpooYF4e>0NLuLjPa@}|VQ1=1b;OsVrUFVqwg)qT) zgbP6zykuD!1kNX43wvv9C`;B=E^`RgAAP8{kB_8EG4NcR2o+?pWg?XGAi;{v=&^q* z20#^%gyTVZxX;lp)WS{ZE-eqEuK>{+J237?-Ux*vM~j;bOMh1KX|g_Tsr>kR)@wYq z5ZMsuB})*tZ971RU>*2*&J=zph9PuXI3xs0=a@9hPz0hJ)i4tLh8Yi(l$dv&x3IS=jm37hvwMgZ3G*p~f|Vi3I~5q8i3ae1cbL?|4a83P6D zBaZXK0U2jJrP$yPyQMMOK!X9s9GRDX$iP)%zL`WX);rM%9nQ;$f}y~P1Q7+=vLV4GXSV5a!xzVqS$jY# z7t(d1LD_;KO}ch~TCTzInM-S$y9X!iWIGaaoc95%Q)FuvthZpm6$nzTZh9xcB_B8- zQ51y=ilIhYm7JMV-R!OYk;VxK-DOL8;1H>hmM%sGc%h;)z~Ei>`|`ycN-)J9fXk_9 zs*yI~3bKm?>5~i6<<5Yqa2K;^%P@f7sTFvEo~RdY@+IRlnNc&jBkmz&j)xYoN?#I; z3J}=Fg**AZbcPzDyNQL+m|aTzr}4xHsjBh0CgO8gSwyYeHrbNU9u7yFNPcZNztvX2 zJIw0dxft02?6q|>4J@%d%6Z0+t(mi&Q~d_`6kyefLINEXYUy7QFF^T$8yS`ov=`ka zZ$JZ_D=h*<5#gUE6~J-S906$#0=7e?s_kaHIi`7jY4M6xQkFB5g*Lj>qX;Xrg{_K4 zk{&N@Y&ogCl+KF}Bx>mLqE{>oYuz_1W5%*!3i2|l&kXV#tJAE`ydq3o`C`bqjRE_i z2zRYXF`Ae$>A_J}#Li48Um4$-I7nhRS=LPHxMhr|fOz zr^x;n4CE$mjB!?=lB|=H2{IGope1#dRF)xhnfamwYODBnT zpwXb!HrX0_Wf&-MvUo$s0fVT7?oX^QhhvIXqRQev&8Apu1~uT)ROX3wq|u*|0#R1h!q#Yn z%oOlLFL$8qNXk1SoT^zX9ERS4HZx>k?7@@{+_}WeFeI*mGeOB}N{SxIpx%-}(3Fh( z(OYzpDkuk{JQukJ7B*#7q-`#HN$B_Bd_3nISmL8*sgg0dTL>err1iQqZFB5`23wYh zji|fIhH4&2WwkD?N(*3$#Yk+wsL`W2(1&2z@Or^15$AJ^j9!v&jA1hjZQhyW%WbR`@|zuGnj_=(@fap~*YuA_yV2U3>w<@Fb1NK)dmZ-9gsif~fb{ z(cpIlzTiNF97+vqH(dkrg_7MN%wf6BX$a=7h02-M3dMJ zTV!jxAgBXaguI&xi7r%X$L<1Rfu1KS$%irSrt`GxGqDojn#@>x!HS08u_i??4R$r$ zwc#DcwMue|aT@`r`d$h9BG{^t(tJ!8`VWccR1((KHL`O3f=dXcE!6j@vB2~&QZVpKM^a4f{OW0O@#UdqDpzvl4!&(*>wM^s1_{tnRDED$b3t*2`S;w)Y#$ z%R&W?Sn$Xd0PdQXKRhA7&UpPhQ2Yf|ibBNHlFeAP$5DZCGdWel=`agHj0@>4BaEn; zJGQ+$iR}b$YHsq|AUPOp{Rv!1A_yr6KSXfojqxcFR)PfPDIR+%;yADJ2t1a}djc#T zoIVDGi7|K4X)_$z@G21mpMb;y!S^cuHS?2XT}}%OhGnq~9*K9Q@^s$FrPu)M^ium{ z`T&F5lG8J;Ihx7D#olvTU+ADvS0SRl3oB$(Ex#iiu8dH^c{sip(0>$U%kL{Mfi`1- zQ4>mnJ`MU0^<+>WtsE6m>Tw>9+Y<&$A~+BmgsVOVnU@9q8R}LXWxhF_XC;EQOdXh3 zoa|aM#2va12g}zX>c&jFUmzJT$b$|7pY=Ed7=I~nk31}gjl8vXp5cQ}@7ij?xKu2X z(G^`-%ye!mo=H_@F>5gax2p93shnCP;qlCY?^0hqmup%*EBQS^% zJQZfP=F}_t1Y47SP7xR=c zzrc*x=sNDl>8Gvxt6Ar?$)V$VVLfY3EE;A<)?!9Y?%BQK9HonE(w{Bu>bRor&J`|h zmK?#wWD)T)GNwM%&&96D2VjoxOQ+9tW6uiJ#FIF)2+bu3q^}aftr&}GlXG_g91B~1 zzW|kRA@(o2gkNTau)PW|Dy)|Hb*XG&%!ovxEIf#l6#o)1`djzoth!AYAcJ?0X;x!9 zq`~mw&s?VgJYD8a8FAO@t7!D~F<(8p_=dj%@;~hyoL}0Ws2Xz`JYvyXU5R z;LeVJeKas2R#@M|+26^}{e9Yo3^CMN8(%x4Zo1(T;1Tq3fBC+D&h%aOh~SMmqQP>6yA=8*_1 zFtrdCrqEK*eP%K7q2UL4CviR0_p*wWE{c-p3Im;8tV{3?^ zxE39J`c)nlXz%f{^KB4-%cX20g>JE`t}n-XV#gh% zsbU6$`?z2%WcHy`tDesOZ-XHcYw|OJU;B9f4uRk2`#a=-?QLbee4S8cXHOL-UmL0N zM@}?o=mVyIYLI37&ikh?paCL0M&|YPhRhhn;#~}Ni{*%>Ypzwo`4 zD9+to$}a#m$8ymK7(C_*2PJbK8+K&&0FJGm<(Ygkuvsq?n4eVnfy9&a0GUWC02mxY zs@TK7jlBiOza2Q@DT`@6Xu1`KnT)uDr2)WW=e<^jjQxAMDLlI&zD})wn8{Ypnh$6U z6X`M_cH^#Aq1FcbonCNjG*`}F9Fp4#st51D{W^vZ#=f~rxY&EsOF3|iyXVZZSc6pj zPQlkAt77(MXu+DRj(%6V4Mr!>x230tmd0q_zRE%KUSPQ7u&~acEY^bDYbxYr zI@=h&rQpK9q`=NG%7riK*Ea~;?GU&>>OSXAZk2crrM5#kBEtM6F@fqeC6Lf}b923# zXI5Suh6GuRC4^_w@PUrW)3LJ4!bJ4RD`(Qek9X_Fm%_GMT%+t$yl{J7aMdWtRni-> zYXuy*igW+?{2cZ>eeNZ67~i_Pb#+Jf=7;9rZPRTaIK><-SM6h(eUwoyk}{S?Te$Gx z`Rog^j?G;wJA7{ZQ`Uen^UaXY-sW-f!*uiH$48)A@8d`!SwU8pCeD+%5``en&I8N`PT2DsIwwn& zK?(sEcABrqCI~eVsqX(u#w?+*4hyt3ukGE~-M#YpTRNN*A|Q7a6A7;0BGNuffA8!H zm5MubC`*fP3a@W%?OYIg?g;JNxPJ`qqDM$7kOvSoVEI71JI&zh=R$6lt-wpr+JL>) zb9f9I(C_T609Sx|KrGd_jt}6AdwcQ{(Boq(^#_O(AR?P>biN}%ksV;!*uJ)99YY(J zT$Xgr9Tdv-s}HYb%hpYo@O_!pdKiCV)NYY|ogg#nO(bLr-sL_{RF^~ z*k-^oIoZaVEeXbkkDZ;xX&;OSw-@i#M9aH#DuA@TJ0_4h9l^+))kY~XUS;~+eBw(d z*yS8J!_bq(?_jcgcS`EjYur2m%6(H?`=Ti?5p)|r21`7_Eu--9zV?y~3r~_m{hezY zxHQK!7q1+^W2@-*Es|LdT9Z%tf%%UhXz9(EENEgMID>G^$2$}5Li85NiTBASNW2vB zYy^tjh)=a|SaKpHjG;Q?_3Y!IrdJN-{*E&WMac~BC z72`Atc&F7hH)qoM49cPrX+JjlzhG}h)&=HLX4qX`7_e7Ra>i~uHghyxKk0~^@Z)i- zX|SXQ5+m04D;VM*!Hj-PReCenx62(E9K)T^T!z!t_naER%8w?u^xvtq3&c)@^mAx0n)uD|R*z8=WAh3Z89!TB# z*1gTSzJ+8*TnMl;`_L#8#(ukY_Zt8&T`(5(Z4qS=u2kQ){*KaB!OCb{^L^jnQz5k< zcIg?@wSdcOcYdGF59QRaSDAplM6|+$FY`%1VY$4&Yli(umg>Lj_s_Dhn%-Qu(a>XW zt?nxbXUlH3++`gYo%nzH$#fvDtuW?G?0rC$eR;Bf^a@(a+D&D--9Szy2wxz+pj?c* z*JspAUILvEiAF)T>)YG7xYYJ4F~}80WaP{D%T*uRVlS! zBqHQI=qd|v`f%Pv=$IXUC-GCNy*nBgD8S9Hz>OVAdQmqSY9HgxV!~S}$>zJl;&6u% zO}p%q(i3eT@p3YKw%m1a^P{k&TAJQ5$VFyn4fO|)EIb^#nU?6nH5?b33U+u3f&|TB z_31R>2E3=R6s?Iy9rjPkA=CyvgJs9}BP0LHYQpm?kmHLdtGU?yvGaXI^nzX8jf=aI zk)AMBS!IZ4QN%dhBk6caQ%9RE!^aO9Gy;DM^;Z=eTDL#aUQGy8G1+N65iru!S_F5u z^{-%_eA1wgYGY*MDvi>qDi&slT?>a-6j1B4Yt_ZS(*l!@?-z`S0G6~r!G%eO{@W89 zF8dg1sZisojj!03kX%?FD#w~6M{DAD9uMF8&-Z?KDgGz49#Jm-I|&Z+N$(AtR+1h# z>W3NbV~q!L?XS2v`m|}wh|bc#am;6=bb3S9ApJL6ATj4W^`_7BvF%Pb5wG$d4mi3Uh zU1AO{T!(oF^zQ)%ppp>)4#z$UrwAAU35S^LDm_=C1M`LSOgL!~F%Twvasz-H?Qw+C zSH^3d1tO@02EkG?V<#K*_A>w9!G)&wAhGnN*t|ZcDU?+xq!PEeIIHj3C2iF-|Ma2V z#JotjxPGMC+L&1MpB!!Bk)IPQYut^Rc15xSO=j>il!F1o4E)KafulZU>UbZF4MO`Bf7E$@1XxlAyo8Yz8){FFFC>g&ScD%W7W?>SnQ5*Mq*gy~s>QZ&Wpw;uVT|6%w=4BxnMl zTv2Dx0lzc;T0!0V@AtW73PUVuiB?X8D&FTzPYR<&0hA*&6cCidS`!5@B}D;%hJTZM zP)!K>`@Gyw94bTES-7W7}jCuZ5sO%EFx z(Ph|C5-nwY1odhq{a}^FaRYZeE~r|I$w76L9>^wtZqHW=TsCvw25A zO9z}mh+@^Ihc)KHQ;re%16kXq%+0m=2b0$3yOHLAmb!OW;W*CA&;LUz22py1=u>&^ z{TNDkLAnK(h@bt(5bS5K8j(=U=%X3wa27ujKddj0$#&I`yjW!d^@8cox;moIapY54 z+qS={xXuLXhQVeBa17CfQo02A&)`bnTW{sU={lg-fLaUK+rCwQ4)iDoCMPR3>q&j_ z|NStt3RevX__h3IU_DUVW@`OkaB1zH{KvhR(;XpTgDgPV6AkCtjtAKfP!)l_$SAe? z8g-y0)J?f(!W{l5kfbzI9xcu-i=DzgoWZtog9MF1M`ZtB{N!}TRnN>cmgs;D{BRg- zd6`)Oo!IInI7>F76bDTBvJZTJYY(h=YwdxU@c<5^0Vl$Ir)Ob*b!>w=da?Yl38L02 z4@5sAhZ?I6culEX$XVhQXT!TiS1d1X7PsQ)PH?iOi5 z9^^XRwRBTr9Ye6NoZrr*1m{JnT2QCDUYlhMM{{BhfuX)YKU67X*B5gPd0dJn-LhN#`BG(pWU+82cJcnCFX?3UKr8gnFa)4idlAacklJ+#Z@Pn%sZ9`2J8G2-x zDmG&ZmAg_e?<;4lHg@v1v%9ptSB}xak{;Ihwq@&eUbT2?vloK-Q-mtUvZ4U3Dzn+( zUrizuOC!u6P2M{p_IJa&doMt8#9vU&93a2fdq8);RxZ%+-#c>mnJ0~-wE3Lp>+gFf z<~ek;Oy4F&-eQs_3LnNkkRm!gGUu^qs zF=7_S5xO{tJxZQHw2MChG)wE?`s;y)FsOfcq8WqZ3y=y|$A1+P2tsT7X_L@ztJJ9SJ0_4j zDj?;wC~TjFfaR182dO!5*jXG3k&AMi=GB2sOD+`Xb6MV1q*sWktE`_pQ3i3pqC;}o zsXBI=PlHopWbEmX%i08B-6(Exr?9h=W!06PWT~N`wk|(sR_;7KCnaa>$+T{1n7Kwe z=WjdPkm}q0$x3h)Ga`j-+dY@($-C-?h=I)Ew9};J^P~ApwI-3|v20!6DcA05`KE7o zG>k{AQTXwB4n!&_eb{sNXwQ!U?%oC}Xio&>w*$4J0$*$d$#rwjwnf@hKLu{kf|q2o*T)!&+H7)??li!F-oGoxGMNgAsLJVgwlj4!g*1EI zFjcHkd6+xgJv>&kv7x76G~9+$Xx~f0^I%_O;QvYPdVBSm<(_YpZ(8R0+3O!~VAn|t zd@|jD>@{@LVip&b1-CM=J!-2h&{Aq(t*XhjYa4V}x#_k0t8_j4MZcN#G0^5G+y64y zr`oZX49die`*VV3nR}d7)AC@Uft1n%9e?o0D78XM<)*)qeH1Tra)9SHQ+olq1*&-c zb1gaG#V5cvv43}-7Cyk}K6JR=fuAsmXefb%()aKaOsIJp8aQGtPDA<+wHbwFT7ye1vjIbu2<&^(Cu6qp_N>D#dQB8+fl>tk1{2GCrggp?KDPA?}Hx4pm8@G&cO!7 z&u(Wb@8@zs;I{sUgXxv5c7|_5nE3mmFs1DFcJ}D)UCZm4J(A;ha&htDTi>3)yq`01 zm=&(l?9u`NAVcwS?doZqayN@3@o%1_O+c@A!)w#l4;Q*N0w-oFO5HN~OT2o3nb#TF9yXToDplgA2 z11RCj1H|#ED;P1SNtui_mP*Pcb~J=Q;tU!CdJ%_ARcIU$48D`#{uC4NG^8Oz(M_jd+YT9Ii`6)a}cr_s66jLyY>j1{9Jv&>WD2A zY8b*GR|*6*-pTI?!Bk_k7fw6E`y}6?r?yaa0Iub!`M{croa3Ypl+0oi3F@M}1*6@J zCX8d!YlOU%v4aI%QMUyMZkt>PsVl_Vkx_ZW?!ztXl$#8q+HJtEW>3ShjlD0Wn&15V z(%BP%Ah z$+5LI=ZTH#t0_}w=P$H*O}60Mbyj@YVr`l~hR&jy`EAKY8&M|>pyt`5F_!OKr>mJ^|{Ucde^#G?^38O$ToH^7u;8*j3}O9>^rqrC=$c7Vtl z(v*MFh>gNU%jg{m!zz}wveYFC!JUY$yH)xnLG_l>wFUT#V?!x-n!AhIFJg zQVx|(dV;4sL3{UUat~;6A57YTfQf&oSwB_^VDHPjs178e9_Y)^#!+O>&7&As{i*$; z34{2|?JV52)*r&Ye|qyvp@Vc!Yqu7~pS|^#$M^rC8#fSrkzB*Ud?|0KG0_|-+pc`c zcL7?)xh~$T3>U9arnzTVbmc3i@+=^1beG`%OGNd?cj~upGeZ|lKUIH{veNq%V%7lF z5xV*4R^;UiF9gIq;7u{=RenTl=E3b(3`!S|2-|MTNWf|kW^&4Xh?N=EB6+bwdA#GA zfy9=BNaDQWZWcH*fcVqf0cqCjN8IG@O-FsZqG8jmBU$~xx(>^^aN5U6`dgY&S9Snd zsnVR|Z}cD5l*M;}iV>5xG}IIziEHAb#be5RKQg5m=Mi!lWP9v>v;OS znH=q>Zv|WJxWBvWMcqAdFq>jSbfe+){i+W~m+f4=n){>KW^FyQLU8_6Yck-ih#~1v zohXc&W#6q%F!sh^uk0w>LOW&GBUBkbSG0=P%3;X7Z4@%RNm?7f9<7?-{q zB5Q+KN&W=Xr&j~pd$+E%-VF_9ezas^2R_SA0<2IAw2(6()Jk2yRMq(wpOXyy9D_=< zeub5c*C#$*F33~#R@qPp>c^F68G0v`2pfNoYyC%Pi(oFK5ipAL9uq4Tph^OvC$y6fPDlxc@?)`lKNvj2VF zwJ95n+l~C0X!-QN?0-N?ezBs7k@!MsHG9#Qj)S$=Jf;l;oir!t+o1CocWLLZU`i#M zUr?vGCyj~b*d)H-Vt=Sn8V*fUNM+wrE=s5Xym08Wg<|b+qy%()4LpSc3>W&PVyJw| zMYM9+tP)WJv3Dj&O-Kv|{Peoj=ZQnX*xXaMEWMej(la7h{6a_S*uRj8)t#j8y?6dK%At%$mDn44{2F zQ?#6Y$7Qebwv$;I0n@sbuG&dNnsE<~=o6v46&oesCi{sUz@9}vfcRK$mR}a^@x1sh zc_{g#tdQq0QW+Qz8%)@Ez6V2C?jUr{cSuP|ZKii)s~ajMLi!{$5L`QQ6e_wG!Av)M3(QyQ_5hbX;a<<&kS#1aUPcDpGe^Qfhvt&8 zsnv}D4F6yr6;UH&8={62VTiaDgWSiwFk@T+EYn%P5Eu)W>Ypr8(%fo}^Zp*mP{i9= zyx2oIclkunj56%5D>>86}*BA(IRrhX**lg=iiMVdqVsh&h}y_vfk$q~j)0QKpkI^PBDC8=sCAemIl zsLdQZ$cS=mtawcjGhx3|>}AbTEx;xejIwppmJ;|4(;hV>Y$aA$KQE|{k{?F{0dEwX ziPi3OxGi&vth|jT358l$(zrbC6czM5Mj50Vu6$ZJ*YGeL>*YHl$fhEQ41)|w0wXl2 z2}(yOb)-`G>K&UgV?uS@H?D>vw*vaXyqLM)N|BUWl}u#9f@1|9KZSzi=%0Z7k2V*7Vyv?L~e^->OTyuNxzr z&1cHppsjU(dfw0f{Im;t5BdzD4y8<1g}OWw0b>oXz*nWsiCE@*vJ*1bB>SRQF8+F4 zc}a=N(*N~u@%C?|Md*KmQ`u|lHzNdjxBm07{_{g_v;M=Q#37*Y5i(|&fmSJP4T2b* zkpjJuV8Mf7GU~B!5EQ1X+l9D-H)XaEm<&3ig2>GLjD^%FmTXusx$%$1*~QJv`F-2Y z{S=7Q{10+-ew`=%W+}*RU1n}93U;#pJ!3K#Pj!_h_5nVmxrx<*F#12GKYP;Ez`d=l ztJ5o>!|Q+I$36ry)&T>WYkq(;;H$v?N`m3P5eRbX%T){V#G^IrGLJCHga__6d$78o*?Tx*#8>CbAGD)CB7 z(ba^u%8jfw^kH%25-U(0ZKWmIQr*!+S635FUwt@PMU(Nrkf!Q?`~Pe8|G?{ACv(FO zOdn!G6U}cw)n~&R;k&{yZ6aX%*45p~A+XKodlCqgd;_NTYuQXXI>S`1QL|3k=)UJm zvC3zMUY{hQ&+FH*skGvrv<}LVEIbp}vr5SS@Z*_(XpXVF?77g@Ox(<9 zHmQ49opy=EpzqRD-qo&QL$>JFeiY>TF^t0cQqO4VC$eHaMW1N=uHHpY$}{r;pK!2# zm-Fk&8cMAsb9pX}`P&_$knVvmvt(e!)UhCy<;p5zj1AWqiM=tQZh%D-VpH|8CrCs1 zw%mygYZD@@xPw((#6N;E_Ni;ScGe#PLGoTPQ9Tp) z{F3XD%0 zu4o9J#<ykL%S~jxC=a)vrpywX17rK!1f78SWmfJ$MI)T*TYqo^Q`@Tqv7x8$Vljl> zB8y47=pALmmzsk#qt$+RX_YpvK4@y8+x;1# z1)K!?SRA|6XDXE8A@>@^+eK45Mp^%k(BHZ;5&ie_ZZ$Ih76>NAL8eXx;TijH5)&5# z!NP(N(oV_6PnsULz-&)u>ir?qDHWQ(FOqKr^7OeWmxy z819{4tQ9VqP!05e0rdlK=`F~NJ6~l^oIFxHGE@=Yj35uTzTWidvpNSOor(4{{{q_qv9*=gh7mdUDEf)_;au-GGQ$L4`#pr?j|h zjoWd>Q^wz<$Nts<mKfO=3Pv(h#@+Ctz2@kV0jXoR9y&LlM2 zBKQl<;#cp)U*K#eLpS}#3R79TIZVQI97|7|DarF^iHbGiezw+-K z)gfk7r7SuH)iJg(!S_xPs>7!XmbswQypVF;S@0k008;3%d}|^&_9mv=CQ7y9HS+$0Q@sa;AW&ymR&8P-p%!aIMC#!0`5A5<6W#&l0d1`m=&&?) zNa%gI8ymFsq1~lU;?rUE_ z&B0g+w~Y2SMMP6;2m{*<6T_q-i+bxDyH+!GrJG@^$X;`a*~ZC&t;lMn-No}1xbqz5 z&{I9d>2=yhOD86*!EII<+O-NqY5{G}+1gd#GuHG%?7~v@V!M#PY*;o-qn+xg@g(f` z{gln|2bqelIV|Pc*f2rdv9z=CpUDV=y+z3xS2d_rz26LnL3BzCdK*J%=qE8grHg9G zVtMied3t|0A4D0rS`W1fhE>42OcSY4xp5oJlxe8v@HG5#C+_kV-)iG;lZxoeOpp4d zKz+tnU=hmVV3BKZ^;-ZQ89t!Y6%qNFCH8_il;mT8l)=t{QH;T5+yPo6y(xC^DKBI> z$d?Kof36HQvPyLm$*>T+ctTqFujxw=Yu9q&+qR5f@2g$5Iazi{{zt(hB*KL literal 0 HcmV?d00001 diff --git a/packages/lsp4-contracts/package.json b/packages/lsp4-contracts/package.json index 1a3aafb78..36e927e7b 100644 --- a/packages/lsp4-contracts/package.json +++ b/packages/lsp4-contracts/package.json @@ -48,7 +48,7 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0" + "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0.tgz", + "@lukso/lsp2-contracts": "*" } } From 9fbafe98e09305c11b26e71a2f29fbed813efd74 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Tue, 3 Sep 2024 11:21:51 +0900 Subject: [PATCH 40/94] feat: create InitAbstract version of LSP17Extendable --- .../contracts/LSP17ExtendableInitAbstract.sol | 122 ++++++++++++++++++ .../contracts/LSP17ExtensionInitAbstract.sol | 60 +++++++++ .../package.json | 1 - .../erc725-smart-contracts-8.0.0.tgz | Bin 14290 -> 0 bytes 4 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 packages/lsp17contractextension-contracts/contracts/LSP17ExtendableInitAbstract.sol create mode 100644 packages/lsp17contractextension-contracts/contracts/LSP17ExtensionInitAbstract.sol delete mode 100644 packages/lsp4-contracts/erc725-smart-contracts-8.0.0.tgz diff --git a/packages/lsp17contractextension-contracts/contracts/LSP17ExtendableInitAbstract.sol b/packages/lsp17contractextension-contracts/contracts/LSP17ExtendableInitAbstract.sol new file mode 100644 index 000000000..99290b21a --- /dev/null +++ b/packages/lsp17contractextension-contracts/contracts/LSP17ExtendableInitAbstract.sol @@ -0,0 +1,122 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +// modules +import { + ERC165Upgradeable +} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; +import { + ERC165Checker +} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; + +// constants +import {_INTERFACEID_LSP17_EXTENDABLE} from "./LSP17Constants.sol"; + +// errors +import {NoExtensionFoundForFunctionSelector} from "./LSP17Errors.sol"; + +/** + * @title Module to add more functionalities to a contract using extensions. + * + * @dev Implementation of the `fallback(...)` logic according to LSP17 - Contract Extension standard. + * This module can be inherited to extend the functionality of the parent contract when + * calling a function that doesn't exist on the parent contract via forwarding the call + * to an extension mapped to the function selector being called, set originally by the parent contract + */ +abstract contract LSP17ExtendableInitAbstract is ERC165Upgradeable { + /** + * @dev See {IERC165-supportsInterface}. + */ + function supportsInterface( + bytes4 interfaceId + ) public view virtual override returns (bool) { + return + interfaceId == _INTERFACEID_LSP17_EXTENDABLE || + super.supportsInterface(interfaceId); + } + + /** + * @dev Returns whether the interfaceId being checked is supported in the extension of the + * {supportsInterface} selector. + * + * To be used by extendable contracts wishing to extend the ERC165 interfaceIds originally + * supported by reading whether the interfaceId queried is supported in the `supportsInterface` + * extension if the extension is set, if not it returns false. + */ + function _supportsInterfaceInERC165Extension( + bytes4 interfaceId + ) internal view virtual returns (bool) { + (address erc165Extension, ) = _getExtensionAndForwardValue( + ERC165Upgradeable.supportsInterface.selector + ); + if (erc165Extension == address(0)) return false; + + return + ERC165Checker.supportsERC165InterfaceUnchecked( + erc165Extension, + interfaceId + ); + } + + /** + * @dev Returns the extension mapped to a specific function selector + * If no extension was found, return the address(0) + * To be overrided. + * Up to the implementor contract to return an extension based on a function selector + */ + function _getExtensionAndForwardValue( + bytes4 functionSelector + ) internal view virtual returns (address, bool); + + /** + * @dev Forwards the call to an extension mapped to a function selector. + * + * Calls {_getExtensionAndForwardValue} to get the address of the extension mapped to the function selector being + * called on the account. If there is no extension, the `address(0)` will be returned. + * Forwards the value if the extension is payable. + * + * Reverts if there is no extension for the function being called. + * + * If there is an extension for the function selector being called, it calls the extension with the + * `CALL` opcode, passing the `msg.data` appended with the 20 bytes of the {msg.sender} and 32 bytes of the `msg.value`. + * + * @custom:hint This function does not forward to the extension contract the `msg.value` received by the contract that inherits `LSP17Extendable`. + * If you would like to forward the `msg.value` to the extension contract, you can override the code of this internal function as follow: + * + * ```solidity + * (bool success, bytes memory result) = extension.call{value: msg.value}( + * abi.encodePacked(callData, msg.sender, msg.value) + * ); + * ``` + */ + function _fallbackLSP17Extendable( + bytes calldata callData + ) internal virtual returns (bytes memory) { + // If there is a function selector + ( + address extension, + bool shouldForwardValue + ) = _getExtensionAndForwardValue(msg.sig); + + // if no extension was found, revert + if (extension == address(0)) + revert NoExtensionFoundForFunctionSelector(msg.sig); + + (bool success, bytes memory result) = extension.call{ + value: shouldForwardValue ? msg.value : 0 + }(abi.encodePacked(callData, msg.sender, msg.value)); + + if (success) { + return result; + } else { + // `mload(result)` -> offset in memory where `result.length` is located + // `add(result, 32)` -> offset in memory where `result` data starts + // solhint-disable no-inline-assembly + /// @solidity memory-safe-assembly + assembly { + let resultdata_size := mload(result) + revert(add(result, 32), resultdata_size) + } + } + } +} diff --git a/packages/lsp17contractextension-contracts/contracts/LSP17ExtensionInitAbstract.sol b/packages/lsp17contractextension-contracts/contracts/LSP17ExtensionInitAbstract.sol new file mode 100644 index 000000000..b2c133639 --- /dev/null +++ b/packages/lsp17contractextension-contracts/contracts/LSP17ExtensionInitAbstract.sol @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +// modules +import {Version} from "./Version.sol"; +import { + ERC165Upgradeable +} from "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol"; + +// constants +import {_INTERFACEID_LSP17_EXTENSION} from "./LSP17Constants.sol"; + +/** + * @title Module to create a contract that can act as an extension. + * + * @dev Implementation of the extension logic according to LSP17ContractExtension. + * This module can be inherited to provide context of the msg variable related to the extendable contract + */ +abstract contract LSP17ExtensionInitAbstract is ERC165Upgradeable, Version { + /** + * @dev See {IERC165-supportsInterface}. + */ + function supportsInterface( + bytes4 interfaceId + ) public view virtual override returns (bool) { + return + interfaceId == _INTERFACEID_LSP17_EXTENSION || + super.supportsInterface(interfaceId); + } + + /** + * @dev Returns the original `msg.data` passed to the extendable contract + * without the appended `msg.sender` and `msg.value`. + */ + function _extendableMsgData() + internal + view + virtual + returns (bytes calldata) + { + return msg.data[:msg.data.length - 52]; + } + + /** + * @dev Returns the original `msg.sender` calling the extendable contract. + */ + function _extendableMsgSender() internal view virtual returns (address) { + return + address( + bytes20(msg.data[msg.data.length - 52:msg.data.length - 32]) + ); + } + + /** + * @dev Returns the original `msg.value` sent to the extendable contract. + */ + function _extendableMsgValue() internal view virtual returns (uint256) { + return uint256(bytes32(msg.data[msg.data.length - 32:])); + } +} diff --git a/packages/lsp17contractextension-contracts/package.json b/packages/lsp17contractextension-contracts/package.json index ee05f991b..b974fe525 100644 --- a/packages/lsp17contractextension-contracts/package.json +++ b/packages/lsp17contractextension-contracts/package.json @@ -44,7 +44,6 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@erc725/smart-contracts": "^7.0.0", "@openzeppelin/contracts": "^4.9.3" } } diff --git a/packages/lsp4-contracts/erc725-smart-contracts-8.0.0.tgz b/packages/lsp4-contracts/erc725-smart-contracts-8.0.0.tgz deleted file mode 100644 index 335f6673ba3d22c45d0b50e4f4adc1371f09fd2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14290 zcmcI~Q*b5>uxxDGwr$(qcw;9U+cr10ZQJ@{+jg?C^WFc{dAW7p?>zO)RP|d|b@dE! z3=GKs6d3Tv&(>#)YtgE|?+3HuGbip?%VTP-=C#JQ`}bX$6493R5p{VS3EJO=LK#NU zjfJ-NyR*!}RBl-%0&eRIH@Q1X?cLp57s>T}J4z17Kfo38uNg_Pqk6tv=nS*+CDK!%A%Ixt*+Zas zH#Es|+qBRKUtaeIU@};o_@tW)^-hg=#$k|XP`sFmK=ps*O*uzpGCG z_(CZ#h}6aCJSin`44WXfu&FX{SB3irjkQozq%1a^B9rBBgC`vfqTiupA#*=jF%6Z= zARdK9Gta{rk$`gF-IO80YHU1|3|aVShBo@u&y#mqejZ~chCT#|JIDm6o|*$jgIkr&7*1q1lwdPvh$221s*rU_ z7!0Bdv^l8!ao&>kzUYDj?w4{EY3I>|#0xpJUD90<&Oye^kq$*hgEl98-I|s9b5oQ$ zYRTBu!_s;DDB|H`h8HZzp!oY8lq}idLZ{KZ(lePMDU=CYDJdblwg8USbZ-<`jp!{E zLb=LZew|dX!+d4i(ROja;snjmS~f$CE8olP^XD);M3G zLn6tlMfhoP<_vPW@W;?lRWUH36BchYRMfb?{Obl_&=dy8&EbWD*D`M8_#7PH32&Z6 zM?P$apf2mBpkw2Vz1onHkVB#Kk;We`z17IF5-{ApVYUV9fu$L<~~~dv=ka zNje|A#k+v55@K6=D!PaT7nOv`$vVvlVceAYHdkgYc{)^OHJfJOL$y%K9PfTL!U*!=Ep84stYJ7L@ipBEgh$Y>w?+3$}V9Ad4@kNN+ zMAB8Q$B@&Mv9}ny#|8$2n!P~?Vv2DjGGp*e;Zy)htOgo`O-B2{0(JevlO<;WDSqG# z%DAoA!R?d*`sjr=Dss!(ebSNA5Hn1p>MEu!5}{fXAlYbOk)EYt={U(cI0VtCJh4Lo zmq;Un@yLp7tykPhvYUqC;7X&)lu|TtGovpooYF4e>0NLuLjPa@}|VQ1=1b;OsVrUFVqwg)qT) zgbP6zykuD!1kNX43wvv9C`;B=E^`RgAAP8{kB_8EG4NcR2o+?pWg?XGAi;{v=&^q* z20#^%gyTVZxX;lp)WS{ZE-eqEuK>{+J237?-Ux*vM~j;bOMh1KX|g_Tsr>kR)@wYq z5ZMsuB})*tZ971RU>*2*&J=zph9PuXI3xs0=a@9hPz0hJ)i4tLh8Yi(l$dv&x3IS=jm37hvwMgZ3G*p~f|Vi3I~5q8i3ae1cbL?|4a83P6D zBaZXK0U2jJrP$yPyQMMOK!X9s9GRDX$iP)%zL`WX);rM%9nQ;$f}y~P1Q7+=vLV4GXSV5a!xzVqS$jY# z7t(d1LD_;KO}ch~TCTzInM-S$y9X!iWIGaaoc95%Q)FuvthZpm6$nzTZh9xcB_B8- zQ51y=ilIhYm7JMV-R!OYk;VxK-DOL8;1H>hmM%sGc%h;)z~Ei>`|`ycN-)J9fXk_9 zs*yI~3bKm?>5~i6<<5Yqa2K;^%P@f7sTFvEo~RdY@+IRlnNc&jBkmz&j)xYoN?#I; z3J}=Fg**AZbcPzDyNQL+m|aTzr}4xHsjBh0CgO8gSwyYeHrbNU9u7yFNPcZNztvX2 zJIw0dxft02?6q|>4J@%d%6Z0+t(mi&Q~d_`6kyefLINEXYUy7QFF^T$8yS`ov=`ka zZ$JZ_D=h*<5#gUE6~J-S906$#0=7e?s_kaHIi`7jY4M6xQkFB5g*Lj>qX;Xrg{_K4 zk{&N@Y&ogCl+KF}Bx>mLqE{>oYuz_1W5%*!3i2|l&kXV#tJAE`ydq3o`C`bqjRE_i z2zRYXF`Ae$>A_J}#Li48Um4$-I7nhRS=LPHxMhr|fOz zr^x;n4CE$mjB!?=lB|=H2{IGope1#dRF)xhnfamwYODBnT zpwXb!HrX0_Wf&-MvUo$s0fVT7?oX^QhhvIXqRQev&8Apu1~uT)ROX3wq|u*|0#R1h!q#Yn z%oOlLFL$8qNXk1SoT^zX9ERS4HZx>k?7@@{+_}WeFeI*mGeOB}N{SxIpx%-}(3Fh( z(OYzpDkuk{JQukJ7B*#7q-`#HN$B_Bd_3nISmL8*sgg0dTL>err1iQqZFB5`23wYh zji|fIhH4&2WwkD?N(*3$#Yk+wsL`W2(1&2z@Or^15$AJ^j9!v&jA1hjZQhyW%WbR`@|zuGnj_=(@fap~*YuA_yV2U3>w<@Fb1NK)dmZ-9gsif~fb{ z(cpIlzTiNF97+vqH(dkrg_7MN%wf6BX$a=7h02-M3dMJ zTV!jxAgBXaguI&xi7r%X$L<1Rfu1KS$%irSrt`GxGqDojn#@>x!HS08u_i??4R$r$ zwc#DcwMue|aT@`r`d$h9BG{^t(tJ!8`VWccR1((KHL`O3f=dXcE!6j@vB2~&QZVpKM^a4f{OW0O@#UdqDpzvl4!&(*>wM^s1_{tnRDED$b3t*2`S;w)Y#$ z%R&W?Sn$Xd0PdQXKRhA7&UpPhQ2Yf|ibBNHlFeAP$5DZCGdWel=`agHj0@>4BaEn; zJGQ+$iR}b$YHsq|AUPOp{Rv!1A_yr6KSXfojqxcFR)PfPDIR+%;yADJ2t1a}djc#T zoIVDGi7|K4X)_$z@G21mpMb;y!S^cuHS?2XT}}%OhGnq~9*K9Q@^s$FrPu)M^ium{ z`T&F5lG8J;Ihx7D#olvTU+ADvS0SRl3oB$(Ex#iiu8dH^c{sip(0>$U%kL{Mfi`1- zQ4>mnJ`MU0^<+>WtsE6m>Tw>9+Y<&$A~+BmgsVOVnU@9q8R}LXWxhF_XC;EQOdXh3 zoa|aM#2va12g}zX>c&jFUmzJT$b$|7pY=Ed7=I~nk31}gjl8vXp5cQ}@7ij?xKu2X z(G^`-%ye!mo=H_@F>5gax2p93shnCP;qlCY?^0hqmup%*EBQS^% zJQZfP=F}_t1Y47SP7xR=c zzrc*x=sNDl>8Gvxt6Ar?$)V$VVLfY3EE;A<)?!9Y?%BQK9HonE(w{Bu>bRor&J`|h zmK?#wWD)T)GNwM%&&96D2VjoxOQ+9tW6uiJ#FIF)2+bu3q^}aftr&}GlXG_g91B~1 zzW|kRA@(o2gkNTau)PW|Dy)|Hb*XG&%!ovxEIf#l6#o)1`djzoth!AYAcJ?0X;x!9 zq`~mw&s?VgJYD8a8FAO@t7!D~F<(8p_=dj%@;~hyoL}0Ws2Xz`JYvyXU5R z;LeVJeKas2R#@M|+26^}{e9Yo3^CMN8(%x4Zo1(T;1Tq3fBC+D&h%aOh~SMmqQP>6yA=8*_1 zFtrdCrqEK*eP%K7q2UL4CviR0_p*wWE{c-p3Im;8tV{3?^ zxE39J`c)nlXz%f{^KB4-%cX20g>JE`t}n-XV#gh% zsbU6$`?z2%WcHy`tDesOZ-XHcYw|OJU;B9f4uRk2`#a=-?QLbee4S8cXHOL-UmL0N zM@}?o=mVyIYLI37&ikh?paCL0M&|YPhRhhn;#~}Ni{*%>Ypzwo`4 zD9+to$}a#m$8ymK7(C_*2PJbK8+K&&0FJGm<(Ygkuvsq?n4eVnfy9&a0GUWC02mxY zs@TK7jlBiOza2Q@DT`@6Xu1`KnT)uDr2)WW=e<^jjQxAMDLlI&zD})wn8{Ypnh$6U z6X`M_cH^#Aq1FcbonCNjG*`}F9Fp4#st51D{W^vZ#=f~rxY&EsOF3|iyXVZZSc6pj zPQlkAt77(MXu+DRj(%6V4Mr!>x230tmd0q_zRE%KUSPQ7u&~acEY^bDYbxYr zI@=h&rQpK9q`=NG%7riK*Ea~;?GU&>>OSXAZk2crrM5#kBEtM6F@fqeC6Lf}b923# zXI5Suh6GuRC4^_w@PUrW)3LJ4!bJ4RD`(Qek9X_Fm%_GMT%+t$yl{J7aMdWtRni-> zYXuy*igW+?{2cZ>eeNZ67~i_Pb#+Jf=7;9rZPRTaIK><-SM6h(eUwoyk}{S?Te$Gx z`Rog^j?G;wJA7{ZQ`Uen^UaXY-sW-f!*uiH$48)A@8d`!SwU8pCeD+%5``en&I8N`PT2DsIwwn& zK?(sEcABrqCI~eVsqX(u#w?+*4hyt3ukGE~-M#YpTRNN*A|Q7a6A7;0BGNuffA8!H zm5MubC`*fP3a@W%?OYIg?g;JNxPJ`qqDM$7kOvSoVEI71JI&zh=R$6lt-wpr+JL>) zb9f9I(C_T609Sx|KrGd_jt}6AdwcQ{(Boq(^#_O(AR?P>biN}%ksV;!*uJ)99YY(J zT$Xgr9Tdv-s}HYb%hpYo@O_!pdKiCV)NYY|ogg#nO(bLr-sL_{RF^~ z*k-^oIoZaVEeXbkkDZ;xX&;OSw-@i#M9aH#DuA@TJ0_4h9l^+))kY~XUS;~+eBw(d z*yS8J!_bq(?_jcgcS`EjYur2m%6(H?`=Ti?5p)|r21`7_Eu--9zV?y~3r~_m{hezY zxHQK!7q1+^W2@-*Es|LdT9Z%tf%%UhXz9(EENEgMID>G^$2$}5Li85NiTBASNW2vB zYy^tjh)=a|SaKpHjG;Q?_3Y!IrdJN-{*E&WMac~BC z72`Atc&F7hH)qoM49cPrX+JjlzhG}h)&=HLX4qX`7_e7Ra>i~uHghyxKk0~^@Z)i- zX|SXQ5+m04D;VM*!Hj-PReCenx62(E9K)T^T!z!t_naER%8w?u^xvtq3&c)@^mAx0n)uD|R*z8=WAh3Z89!TB# z*1gTSzJ+8*TnMl;`_L#8#(ukY_Zt8&T`(5(Z4qS=u2kQ){*KaB!OCb{^L^jnQz5k< zcIg?@wSdcOcYdGF59QRaSDAplM6|+$FY`%1VY$4&Yli(umg>Lj_s_Dhn%-Qu(a>XW zt?nxbXUlH3++`gYo%nzH$#fvDtuW?G?0rC$eR;Bf^a@(a+D&D--9Szy2wxz+pj?c* z*JspAUILvEiAF)T>)YG7xYYJ4F~}80WaP{D%T*uRVlS! zBqHQI=qd|v`f%Pv=$IXUC-GCNy*nBgD8S9Hz>OVAdQmqSY9HgxV!~S}$>zJl;&6u% zO}p%q(i3eT@p3YKw%m1a^P{k&TAJQ5$VFyn4fO|)EIb^#nU?6nH5?b33U+u3f&|TB z_31R>2E3=R6s?Iy9rjPkA=CyvgJs9}BP0LHYQpm?kmHLdtGU?yvGaXI^nzX8jf=aI zk)AMBS!IZ4QN%dhBk6caQ%9RE!^aO9Gy;DM^;Z=eTDL#aUQGy8G1+N65iru!S_F5u z^{-%_eA1wgYGY*MDvi>qDi&slT?>a-6j1B4Yt_ZS(*l!@?-z`S0G6~r!G%eO{@W89 zF8dg1sZisojj!03kX%?FD#w~6M{DAD9uMF8&-Z?KDgGz49#Jm-I|&Z+N$(AtR+1h# z>W3NbV~q!L?XS2v`m|}wh|bc#am;6=bb3S9ApJL6ATj4W^`_7BvF%Pb5wG$d4mi3Uh zU1AO{T!(oF^zQ)%ppp>)4#z$UrwAAU35S^LDm_=C1M`LSOgL!~F%Twvasz-H?Qw+C zSH^3d1tO@02EkG?V<#K*_A>w9!G)&wAhGnN*t|ZcDU?+xq!PEeIIHj3C2iF-|Ma2V z#JotjxPGMC+L&1MpB!!Bk)IPQYut^Rc15xSO=j>il!F1o4E)KafulZU>UbZF4MO`Bf7E$@1XxlAyo8Yz8){FFFC>g&ScD%W7W?>SnQ5*Mq*gy~s>QZ&Wpw;uVT|6%w=4BxnMl zTv2Dx0lzc;T0!0V@AtW73PUVuiB?X8D&FTzPYR<&0hA*&6cCidS`!5@B}D;%hJTZM zP)!K>`@Gyw94bTES-7W7}jCuZ5sO%EFx z(Ph|C5-nwY1odhq{a}^FaRYZeE~r|I$w76L9>^wtZqHW=TsCvw25A zO9z}mh+@^Ihc)KHQ;re%16kXq%+0m=2b0$3yOHLAmb!OW;W*CA&;LUz22py1=u>&^ z{TNDkLAnK(h@bt(5bS5K8j(=U=%X3wa27ujKddj0$#&I`yjW!d^@8cox;moIapY54 z+qS={xXuLXhQVeBa17CfQo02A&)`bnTW{sU={lg-fLaUK+rCwQ4)iDoCMPR3>q&j_ z|NStt3RevX__h3IU_DUVW@`OkaB1zH{KvhR(;XpTgDgPV6AkCtjtAKfP!)l_$SAe? z8g-y0)J?f(!W{l5kfbzI9xcu-i=DzgoWZtog9MF1M`ZtB{N!}TRnN>cmgs;D{BRg- zd6`)Oo!IInI7>F76bDTBvJZTJYY(h=YwdxU@c<5^0Vl$Ir)Ob*b!>w=da?Yl38L02 z4@5sAhZ?I6culEX$XVhQXT!TiS1d1X7PsQ)PH?iOi5 z9^^XRwRBTr9Ye6NoZrr*1m{JnT2QCDUYlhMM{{BhfuX)YKU67X*B5gPd0dJn-LhN#`BG(pWU+82cJcnCFX?3UKr8gnFa)4idlAacklJ+#Z@Pn%sZ9`2J8G2-x zDmG&ZmAg_e?<;4lHg@v1v%9ptSB}xak{;Ihwq@&eUbT2?vloK-Q-mtUvZ4U3Dzn+( zUrizuOC!u6P2M{p_IJa&doMt8#9vU&93a2fdq8);RxZ%+-#c>mnJ0~-wE3Lp>+gFf z<~ek;Oy4F&-eQs_3LnNkkRm!gGUu^qs zF=7_S5xO{tJxZQHw2MChG)wE?`s;y)FsOfcq8WqZ3y=y|$A1+P2tsT7X_L@ztJJ9SJ0_4j zDj?;wC~TjFfaR182dO!5*jXG3k&AMi=GB2sOD+`Xb6MV1q*sWktE`_pQ3i3pqC;}o zsXBI=PlHopWbEmX%i08B-6(Exr?9h=W!06PWT~N`wk|(sR_;7KCnaa>$+T{1n7Kwe z=WjdPkm}q0$x3h)Ga`j-+dY@($-C-?h=I)Ew9};J^P~ApwI-3|v20!6DcA05`KE7o zG>k{AQTXwB4n!&_eb{sNXwQ!U?%oC}Xio&>w*$4J0$*$d$#rwjwnf@hKLu{kf|q2o*T)!&+H7)??li!F-oGoxGMNgAsLJVgwlj4!g*1EI zFjcHkd6+xgJv>&kv7x76G~9+$Xx~f0^I%_O;QvYPdVBSm<(_YpZ(8R0+3O!~VAn|t zd@|jD>@{@LVip&b1-CM=J!-2h&{Aq(t*XhjYa4V}x#_k0t8_j4MZcN#G0^5G+y64y zr`oZX49die`*VV3nR}d7)AC@Uft1n%9e?o0D78XM<)*)qeH1Tra)9SHQ+olq1*&-c zb1gaG#V5cvv43}-7Cyk}K6JR=fuAsmXefb%()aKaOsIJp8aQGtPDA<+wHbwFT7ye1vjIbu2<&^(Cu6qp_N>D#dQB8+fl>tk1{2GCrggp?KDPA?}Hx4pm8@G&cO!7 z&u(Wb@8@zs;I{sUgXxv5c7|_5nE3mmFs1DFcJ}D)UCZm4J(A;ha&htDTi>3)yq`01 zm=&(l?9u`NAVcwS?doZqayN@3@o%1_O+c@A!)w#l4;Q*N0w-oFO5HN~OT2o3nb#TF9yXToDplgA2 z11RCj1H|#ED;P1SNtui_mP*Pcb~J=Q;tU!CdJ%_ARcIU$48D`#{uC4NG^8Oz(M_jd+YT9Ii`6)a}cr_s66jLyY>j1{9Jv&>WD2A zY8b*GR|*6*-pTI?!Bk_k7fw6E`y}6?r?yaa0Iub!`M{croa3Ypl+0oi3F@M}1*6@J zCX8d!YlOU%v4aI%QMUyMZkt>PsVl_Vkx_ZW?!ztXl$#8q+HJtEW>3ShjlD0Wn&15V z(%BP%Ah z$+5LI=ZTH#t0_}w=P$H*O}60Mbyj@YVr`l~hR&jy`EAKY8&M|>pyt`5F_!OKr>mJ^|{Ucde^#G?^38O$ToH^7u;8*j3}O9>^rqrC=$c7Vtl z(v*MFh>gNU%jg{m!zz}wveYFC!JUY$yH)xnLG_l>wFUT#V?!x-n!AhIFJg zQVx|(dV;4sL3{UUat~;6A57YTfQf&oSwB_^VDHPjs178e9_Y)^#!+O>&7&As{i*$; z34{2|?JV52)*r&Ye|qyvp@Vc!Yqu7~pS|^#$M^rC8#fSrkzB*Ud?|0KG0_|-+pc`c zcL7?)xh~$T3>U9arnzTVbmc3i@+=^1beG`%OGNd?cj~upGeZ|lKUIH{veNq%V%7lF z5xV*4R^;UiF9gIq;7u{=RenTl=E3b(3`!S|2-|MTNWf|kW^&4Xh?N=EB6+bwdA#GA zfy9=BNaDQWZWcH*fcVqf0cqCjN8IG@O-FsZqG8jmBU$~xx(>^^aN5U6`dgY&S9Snd zsnVR|Z}cD5l*M;}iV>5xG}IIziEHAb#be5RKQg5m=Mi!lWP9v>v;OS znH=q>Zv|WJxWBvWMcqAdFq>jSbfe+){i+W~m+f4=n){>KW^FyQLU8_6Yck-ih#~1v zohXc&W#6q%F!sh^uk0w>LOW&GBUBkbSG0=P%3;X7Z4@%RNm?7f9<7?-{q zB5Q+KN&W=Xr&j~pd$+E%-VF_9ezas^2R_SA0<2IAw2(6()Jk2yRMq(wpOXyy9D_=< zeub5c*C#$*F33~#R@qPp>c^F68G0v`2pfNoYyC%Pi(oFK5ipAL9uq4Tph^OvC$y6fPDlxc@?)`lKNvj2VF zwJ95n+l~C0X!-QN?0-N?ezBs7k@!MsHG9#Qj)S$=Jf;l;oir!t+o1CocWLLZU`i#M zUr?vGCyj~b*d)H-Vt=Sn8V*fUNM+wrE=s5Xym08Wg<|b+qy%()4LpSc3>W&PVyJw| zMYM9+tP)WJv3Dj&O-Kv|{Peoj=ZQnX*xXaMEWMej(la7h{6a_S*uRj8)t#j8y?6dK%At%$mDn44{2F zQ?#6Y$7Qebwv$;I0n@sbuG&dNnsE<~=o6v46&oesCi{sUz@9}vfcRK$mR}a^@x1sh zc_{g#tdQq0QW+Qz8%)@Ez6V2C?jUr{cSuP|ZKii)s~ajMLi!{$5L`QQ6e_wG!Av)M3(QyQ_5hbX;a<<&kS#1aUPcDpGe^Qfhvt&8 zsnv}D4F6yr6;UH&8={62VTiaDgWSiwFk@T+EYn%P5Eu)W>Ypr8(%fo}^Zp*mP{i9= zyx2oIclkunj56%5D>>86}*BA(IRrhX**lg=iiMVdqVsh&h}y_vfk$q~j)0QKpkI^PBDC8=sCAemIl zsLdQZ$cS=mtawcjGhx3|>}AbTEx;xejIwppmJ;|4(;hV>Y$aA$KQE|{k{?F{0dEwX ziPi3OxGi&vth|jT358l$(zrbC6czM5Mj50Vu6$ZJ*YGeL>*YHl$fhEQ41)|w0wXl2 z2}(yOb)-`G>K&UgV?uS@H?D>vw*vaXyqLM)N|BUWl}u#9f@1|9KZSzi=%0Z7k2V*7Vyv?L~e^->OTyuNxzr z&1cHppsjU(dfw0f{Im;t5BdzD4y8<1g}OWw0b>oXz*nWsiCE@*vJ*1bB>SRQF8+F4 zc}a=N(*N~u@%C?|Md*KmQ`u|lHzNdjxBm07{_{g_v;M=Q#37*Y5i(|&fmSJP4T2b* zkpjJuV8Mf7GU~B!5EQ1X+l9D-H)XaEm<&3ig2>GLjD^%FmTXusx$%$1*~QJv`F-2Y z{S=7Q{10+-ew`=%W+}*RU1n}93U;#pJ!3K#Pj!_h_5nVmxrx<*F#12GKYP;Ez`d=l ztJ5o>!|Q+I$36ry)&T>WYkq(;;H$v?N`m3P5eRbX%T){V#G^IrGLJCHga__6d$78o*?Tx*#8>CbAGD)CB7 z(ba^u%8jfw^kH%25-U(0ZKWmIQr*!+S635FUwt@PMU(Nrkf!Q?`~Pe8|G?{ACv(FO zOdn!G6U}cw)n~&R;k&{yZ6aX%*45p~A+XKodlCqgd;_NTYuQXXI>S`1QL|3k=)UJm zvC3zMUY{hQ&+FH*skGvrv<}LVEIbp}vr5SS@Z*_(XpXVF?77g@Ox(<9 zHmQ49opy=EpzqRD-qo&QL$>JFeiY>TF^t0cQqO4VC$eHaMW1N=uHHpY$}{r;pK!2# zm-Fk&8cMAsb9pX}`P&_$knVvmvt(e!)UhCy<;p5zj1AWqiM=tQZh%D-VpH|8CrCs1 zw%mygYZD@@xPw((#6N;E_Ni;ScGe#PLGoTPQ9Tp) z{F3XD%0 zu4o9J#<ykL%S~jxC=a)vrpywX17rK!1f78SWmfJ$MI)T*TYqo^Q`@Tqv7x8$Vljl> zB8y47=pALmmzsk#qt$+RX_YpvK4@y8+x;1# z1)K!?SRA|6XDXE8A@>@^+eK45Mp^%k(BHZ;5&ie_ZZ$Ih76>NAL8eXx;TijH5)&5# z!NP(N(oV_6PnsULz-&)u>ir?qDHWQ(FOqKr^7OeWmxy z819{4tQ9VqP!05e0rdlK=`F~NJ6~l^oIFxHGE@=Yj35uTzTWidvpNSOor(4{{{q_qv9*=gh7mdUDEf)_;au-GGQ$L4`#pr?j|h zjoWd>Q^wz<$Nts<mKfO=3Pv(h#@+Ctz2@kV0jXoR9y&LlM2 zBKQl<;#cp)U*K#eLpS}#3R79TIZVQI97|7|DarF^iHbGiezw+-K z)gfk7r7SuH)iJg(!S_xPs>7!XmbswQypVF;S@0k008;3%d}|^&_9mv=CQ7y9HS+$0Q@sa;AW&ymR&8P-p%!aIMC#!0`5A5<6W#&l0d1`m=&&?) zNa%gI8ymFsq1~lU;?rUE_ z&B0g+w~Y2SMMP6;2m{*<6T_q-i+bxDyH+!GrJG@^$X;`a*~ZC&t;lMn-No}1xbqz5 z&{I9d>2=yhOD86*!EII<+O-NqY5{G}+1gd#GuHG%?7~v@V!M#PY*;o-qn+xg@g(f` z{gln|2bqelIV|Pc*f2rdv9z=CpUDV=y+z3xS2d_rz26LnL3BzCdK*J%=qE8grHg9G zVtMied3t|0A4D0rS`W1fhE>42OcSY4xp5oJlxe8v@HG5#C+_kV-)iG;lZxoeOpp4d zKz+tnU=hmVV3BKZ^;-ZQ89t!Y6%qNFCH8_il;mT8l)=t{QH;T5+yPo6y(xC^DKBI> z$d?Kof36HQvPyLm$*>T+ctTqFujxw=Yu9q&+qR5f@2g$5Iazi{{zt(hB*KL From ddc5d7f2f02f7ff3711bb2acbec5be73420e80c5 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Tue, 3 Sep 2024 11:23:10 +0900 Subject: [PATCH 41/94] refactor!: remove `Core` contract from LSP7 package --- .../contracts/ILSP7DigitalAsset.sol | 9 +- .../contracts/LSP7DigitalAsset.sol | 765 +++++++++++++++++- .../contracts/LSP7DigitalAssetCore.sol | 744 ----------------- .../LSP7DigitalAssetInitAbstract.sol | 753 ++++++++++++++++- packages/lsp7-contracts/package.json | 8 +- 5 files changed, 1485 insertions(+), 794 deletions(-) delete mode 100644 packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol diff --git a/packages/lsp7-contracts/contracts/ILSP7DigitalAsset.sol b/packages/lsp7-contracts/contracts/ILSP7DigitalAsset.sol index ce0055254..7c6f38456 100644 --- a/packages/lsp7-contracts/contracts/ILSP7DigitalAsset.sol +++ b/packages/lsp7-contracts/contracts/ILSP7DigitalAsset.sol @@ -1,17 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 - pragma solidity ^0.8.4; -// interfaces -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; -import { - IERC725Y -} from "@erc725/smart-contracts/contracts/interfaces/IERC725Y.sol"; - /** * @title Interface of the LSP7 - Digital Asset standard, a fungible digital asset. */ -interface ILSP7DigitalAsset is IERC165, IERC725Y { +interface ILSP7DigitalAsset { // --- Events /** diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol index e2f3b28b9..6aefbda33 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol @@ -3,50 +3,104 @@ pragma solidity ^0.8.4; // interfaces import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import { + ILSP1UniversalReceiver as ILSP1 +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; +import {ILSP7DigitalAsset} from "./ILSP7DigitalAsset.sol"; // modules -import {ERC725YCore} from "@erc725/smart-contracts/contracts/ERC725YCore.sol"; import { - LSP4DigitalAssetMetadata + EnumerableSet +} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import { + ERC165Checker +} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; +import { + LSP4DigitalAssetMetadata, + ERC725Y } from "@lukso/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol"; -import {LSP7DigitalAssetCore} from "./LSP7DigitalAssetCore.sol"; import { LSP17Extendable } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Extendable.sol"; // libraries +import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; import {LSP2Utils} from "@lukso/lsp2-contracts/contracts/LSP2Utils.sol"; // constants -import {_INTERFACEID_LSP7} from "./LSP7Constants.sol"; -import {LSP7TokenContractCannotHoldValue} from "./LSP7Errors.sol"; - +import { + _INTERFACEID_LSP1 +} from "@lukso/lsp1-contracts/contracts/LSP1Constants.sol"; import { _LSP17_EXTENSION_PREFIX } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Constants.sol"; +import { + _INTERFACEID_LSP7, + _TYPEID_LSP7_TOKENOPERATOR, + _TYPEID_LSP7_TOKENSSENDER, + _TYPEID_LSP7_TOKENSRECIPIENT +} from "./LSP7Constants.sol"; // errors - import { NoExtensionFoundForFunctionSelector, InvalidFunctionSelector, InvalidExtensionAddress } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Errors.sol"; +import { + LSP7TokenContractCannotHoldValue, + LSP7AmountExceedsAuthorizedAmount, + LSP7InvalidTransferBatch, + LSP7AmountExceedsBalance, + LSP7DecreasedAllowanceBelowZero, + LSP7CannotUseAddressZeroAsOperator, + LSP7TokenOwnerCannotBeOperator, + LSP7CannotSendWithAddressZero, + LSP7NotifyTokenReceiverContractMissingLSP1Interface, + LSP7NotifyTokenReceiverIsEOA, + OperatorAllowanceCannotBeIncreasedFromZero, + LSP7BatchCallFailed, + LSP7RevokeOperatorNotAuthorized, + LSP7DecreaseAllowanceNotAuthorized +} from "./LSP7Errors.sol"; + +/** + * @title LSP7DigitalAsset contract + * @author Matthew Stevens + * @dev Core Implementation of a LSP7 compliant contract. + * + * This contract implement the core logic of the functions for the {ILSP7DigitalAsset} interface. + */ /** - * @title Implementation of a LSP7 Digital Asset, a contract that represents a fungible token. + * @title Implementation of the LSP7 Digital Asset standard, a contract that represents a fungible token. * @author Matthew Stevens * - * @dev Minting and transferring are supplied with a `uint256` amount. - * This implementation is agnostic to the way tokens are created. - * A supply mechanism has to be added in a derived contract using {_mint} - * For a generic mechanism, see {LSP7Mintable}. +j */ abstract contract LSP7DigitalAsset is + ILSP7DigitalAsset, LSP4DigitalAssetMetadata, - LSP7DigitalAssetCore, LSP17Extendable { + using EnumerableSet for EnumerableSet.AddressSet; + + // --- Storage + + bool internal _isNonDivisible; + + uint256 internal _existingTokens; + + // Mapping from `tokenOwner` to an `amount` of tokens + mapping(address => uint256) internal _tokenOwnerBalances; + + // Mapping an `address` to its authorized operator addresses. + mapping(address => EnumerableSet.AddressSet) internal _operators; + + // Mapping a `tokenOwner` to an `operator` to `amount` of tokens. + mapping(address => mapping(address => uint256)) + internal _operatorAuthorizedAmount; + /** * @notice Sets the token-Metadata * @param name_ The name of the token. @@ -65,7 +119,7 @@ abstract contract LSP7DigitalAsset is _isNonDivisible = isNonDivisible_; } - // fallback function + // fallback functions /** * @notice The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`. @@ -169,9 +223,7 @@ abstract contract LSP7DigitalAsset is ); // Check if there is an extension stored under the generated data key - bytes memory extensionAddress = ERC725YCore._getData( - mappedExtensionDataKey - ); + bytes memory extensionAddress = _getData(mappedExtensionDataKey); if (extensionAddress.length != 20 && extensionAddress.length != 0) revert InvalidExtensionAddress(extensionAddress); @@ -183,16 +235,681 @@ abstract contract LSP7DigitalAsset is */ function supportsInterface( bytes4 interfaceId - ) - public - view - virtual - override(IERC165, ERC725YCore, LSP17Extendable) - returns (bool) - { + ) public view virtual override(ERC725Y, LSP17Extendable) returns (bool) { return interfaceId == _INTERFACEID_LSP7 || super.supportsInterface(interfaceId) || LSP17Extendable._supportsInterfaceInERC165Extension(interfaceId); } + + // --- Token queries + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function decimals() public view virtual override returns (uint8) { + return _isNonDivisible ? 0 : 18; + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function totalSupply() public view virtual override returns (uint256) { + return _existingTokens; + } + + // --- Token owner queries + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function balanceOf( + address tokenOwner + ) public view virtual override returns (uint256) { + return _tokenOwnerBalances[tokenOwner]; + } + + // --- General functionality + + /** + * @inheritdoc ILSP7DigitalAsset + * + * @custom:info It's not possible to send value along the functions call due to the use of `delegatecall`. + */ + function batchCalls( + bytes[] calldata data + ) public virtual override returns (bytes[] memory results) { + results = new bytes[](data.length); + for (uint256 i; i < data.length; ) { + (bool success, bytes memory result) = address(this).delegatecall( + data[i] + ); + + if (!success) { + // Look for revert reason and bubble it up if present + if (result.length != 0) { + // The easiest way to bubble the revert reason is using memory via assembly + // solhint-disable no-inline-assembly + /// @solidity memory-safe-assembly + assembly { + let returndata_size := mload(result) + revert(add(32, result), returndata_size) + } + } else { + revert LSP7BatchCallFailed({callIndex: i}); + } + } + + results[i] = result; + + unchecked { + ++i; + } + } + } + + // --- Operator functionality + + /** + * @inheritdoc ILSP7DigitalAsset + * + * @custom:danger To avoid front-running and Allowance Double-Spend Exploit when + * increasing or decreasing the authorized amount of an operator, it is advised to + * use the {increaseAllowance} and {decreaseAllowance} functions. + * + * For more information, see: + * https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/ + */ + function authorizeOperator( + address operator, + uint256 amount, + bytes memory operatorNotificationData + ) public virtual override { + _updateOperator( + msg.sender, + operator, + amount, + true, + operatorNotificationData + ); + + bytes memory lsp1Data = abi.encode( + msg.sender, + amount, + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function revokeOperator( + address operator, + address tokenOwner, + bool notify, + bytes memory operatorNotificationData + ) public virtual override { + if (msg.sender != tokenOwner && msg.sender != operator) { + revert LSP7RevokeOperatorNotAuthorized( + msg.sender, + tokenOwner, + operator + ); + } + + _updateOperator( + tokenOwner, + operator, + 0, + notify, + operatorNotificationData + ); + + if (notify) { + bytes memory lsp1Data = abi.encode( + tokenOwner, + 0, + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function authorizedAmountFor( + address operator, + address tokenOwner + ) public view virtual override returns (uint256) { + if (tokenOwner == operator) { + return _tokenOwnerBalances[tokenOwner]; + } else { + return _operatorAuthorizedAmount[tokenOwner][operator]; + } + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function getOperatorsOf( + address tokenOwner + ) public view virtual override returns (address[] memory) { + return _operators[tokenOwner].values(); + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function increaseAllowance( + address operator, + uint256 addedAmount, + bytes memory operatorNotificationData + ) public virtual override { + uint256 oldAllowance = authorizedAmountFor(operator, msg.sender); + if (oldAllowance == 0) + revert OperatorAllowanceCannotBeIncreasedFromZero(operator); + + uint256 newAllowance = oldAllowance + addedAmount; + + _updateOperator( + msg.sender, + operator, + newAllowance, + true, + operatorNotificationData + ); + + bytes memory lsp1Data = abi.encode( + msg.sender, + newAllowance, + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function decreaseAllowance( + address operator, + address tokenOwner, + uint256 subtractedAmount, + bytes memory operatorNotificationData + ) public virtual override { + if (msg.sender != tokenOwner && msg.sender != operator) { + revert LSP7DecreaseAllowanceNotAuthorized( + msg.sender, + tokenOwner, + operator + ); + } + + uint256 currentAllowance = authorizedAmountFor(operator, tokenOwner); + if (currentAllowance < subtractedAmount) { + revert LSP7DecreasedAllowanceBelowZero(); + } + + uint256 newAllowance; + unchecked { + newAllowance = currentAllowance - subtractedAmount; + _updateOperator( + tokenOwner, + operator, + newAllowance, + true, + operatorNotificationData + ); + } + + bytes memory lsp1Data = abi.encode( + tokenOwner, + newAllowance, + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + + // --- Transfer functionality + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function transfer( + address from, + address to, + uint256 amount, + bool force, + bytes memory data + ) public virtual override { + if (msg.sender != from) { + _spendAllowance({ + operator: msg.sender, + tokenOwner: from, + amountToSpend: amount + }); + } + + _transfer(from, to, amount, force, data); + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function transferBatch( + address[] memory from, + address[] memory to, + uint256[] memory amount, + bool[] memory force, + bytes[] memory data + ) public virtual override { + uint256 fromLength = from.length; + if ( + fromLength != to.length || + fromLength != amount.length || + fromLength != force.length || + fromLength != data.length + ) { + revert LSP7InvalidTransferBatch(); + } + + for (uint256 i; i < fromLength; ) { + // using the public transfer function to handle updates to operator authorized amounts + transfer(from[i], to[i], amount[i], force[i], data[i]); + + unchecked { + ++i; + } + } + } + + /** + * @dev Changes token `amount` the `operator` has access to from `tokenOwner` tokens. + * If the amount is zero the operator is removed from the list of operators, otherwise he is added to the list of operators. + * If the amount is zero then the operator is being revoked, otherwise the operator amount is being modified. + * + * @param tokenOwner The address that will give `operator` an allowance for on its balance. + * @param operator The address to grant an allowance to spend. + * @param allowance The maximum amount of token that `operator` can spend from the `tokenOwner`'s balance. + * @param notified Boolean indicating whether the operator has been notified about the change of allowance + * @param operatorNotificationData The data to send to the universalReceiver function of the operator in case of notifying + * + * @custom:events + * - {OperatorRevoked} event when operator's allowance is set to `0`. + * - {OperatorAuthorizationChanged} event when operator's allowance is set to any other amount. + * + * @custom:requirements + * - `operator` cannot be the zero address. + * - `operator` cannot be the same address as `tokenOwner`. + */ + function _updateOperator( + address tokenOwner, + address operator, + uint256 allowance, + bool notified, + bytes memory operatorNotificationData + ) internal virtual { + if (operator == address(0)) { + revert LSP7CannotUseAddressZeroAsOperator(); + } + + if (operator == tokenOwner) { + revert LSP7TokenOwnerCannotBeOperator(); + } + + _operatorAuthorizedAmount[tokenOwner][operator] = allowance; + + if (allowance != 0) { + _operators[tokenOwner].add(operator); + emit OperatorAuthorizationChanged( + operator, + tokenOwner, + allowance, + operatorNotificationData + ); + } else { + _operators[tokenOwner].remove(operator); + emit OperatorRevoked( + operator, + tokenOwner, + notified, + operatorNotificationData + ); + } + } + + /** + * @dev Mints `amount` of tokens and transfers it to `to`. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances. + * - {_afterTokenTransfer} function will run after updating the balances, **but before notifying the recipient via LSP1**. + * + * @param to The address to mint tokens for. + * @param amount The amount of tokens to mint. + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. + * @param data Additional data the caller wants included in the emitted {Transfer} event, and sent in the LSP1 hook to the `to` address. + * + * @custom:requirements + * - `to` cannot be the zero address. + * + * @custom:events {Transfer} event with `address(0)` as `from`. + */ + function _mint( + address to, + uint256 amount, + bool force, + bytes memory data + ) internal virtual { + if (to == address(0)) { + revert LSP7CannotSendWithAddressZero(); + } + + _beforeTokenTransfer(address(0), to, amount, data); + + // tokens being minted + _existingTokens += amount; + + _tokenOwnerBalances[to] += amount; + + emit Transfer({ + operator: msg.sender, + from: address(0), + to: to, + amount: amount, + force: force, + data: data + }); + + _afterTokenTransfer(address(0), to, amount, data); + + bytes memory lsp1Data = abi.encode( + msg.sender, + address(0), + to, + amount, + data + ); + _notifyTokenReceiver(to, force, lsp1Data); + } + + /** + * @dev Burns (= destroys) `amount` of tokens, decrease the `from` balance. This is done by sending them to the zero address. + * + * Both the sender and recipient will be notified of the token transfer through the LSP1 {universalReceiver} + * function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive + * all the parameters in the calldata packed encoded. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances. + * - {_afterTokenTransfer} function will run after updating the balances, **but before notifying the sender via LSP1**. + * + * @param from The address to burn tokens from its balance. + * @param amount The amount of tokens to burn. + * @param data Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. + * + * @custom:hint In dApps, you can know which address is burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + * + * @custom:requirements + * - `from` cannot be the zero address. + * - `from` must have at least `amount` tokens. + * - If the caller is not `from`, it must be an operator for `from` with access to at least + * `amount` tokens. + * + * @custom:events {Transfer} event with `address(0)` as the `to` address + */ + function _burn( + address from, + uint256 amount, + bytes memory data + ) internal virtual { + if (from == address(0)) { + revert LSP7CannotSendWithAddressZero(); + } + + _beforeTokenTransfer(from, address(0), amount, data); + + uint256 balance = _tokenOwnerBalances[from]; + if (amount > balance) { + revert LSP7AmountExceedsBalance(balance, from, amount); + } + // tokens being burnt + _existingTokens -= amount; + + _tokenOwnerBalances[from] -= amount; + + emit Transfer({ + operator: msg.sender, + from: from, + to: address(0), + amount: amount, + force: false, + data: data + }); + + _afterTokenTransfer(from, address(0), amount, data); + + bytes memory lsp1Data = abi.encode( + msg.sender, + from, + address(0), + amount, + data + ); + _notifyTokenSender(from, lsp1Data); + } + + /** + * @dev Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOwner`. + * + * @param operator The address of the operator to decrease the allowance of. + * @param tokenOwner The address that granted an allowance on its balance to `operator`. + * @param amountToSpend The amount of tokens to subtract in allowance of `operator`. + * + * @custom:events + * - {OperatorRevoked} event when operator's allowance is set to `0`. + * - {OperatorAuthorizationChanged} event when operator's allowance is set to any other amount. + * + * @custom:requirements + * - The `amountToSpend` MUST be at least the allowance granted to `operator` (accessible via {`authorizedAmountFor}`) + * - `operator` cannot be the zero address. + * - `operator` cannot be the same address as `tokenOwner`. + */ + function _spendAllowance( + address operator, + address tokenOwner, + uint256 amountToSpend + ) internal virtual { + uint256 authorizedAmount = _operatorAuthorizedAmount[tokenOwner][ + operator + ]; + + if (amountToSpend > authorizedAmount) { + revert LSP7AmountExceedsAuthorizedAmount( + tokenOwner, + authorizedAmount, + operator, + amountToSpend + ); + } + + _updateOperator({ + tokenOwner: tokenOwner, + operator: operator, + allowance: authorizedAmount - amountToSpend, + notified: false, + operatorNotificationData: "" + }); + } + + /** + * @dev Transfer tokens from `from` to `to` by decreasing the balance of `from` by `-amount` and increasing the balance + * of `to` by `+amount`. + * + * Both the sender and recipient will be notified of the token transfer through the LSP1 {universalReceiver} + * function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive + * all the parameters in the calldata packed encoded. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances. + * - {_afterTokenTransfer} function will run after updating the balances, **but before notifying the sender/recipient via LSP1**. + * + * @param from The address to decrease the balance. + * @param to The address to increase the balance. + * @param amount The amount of tokens to transfer from `from` to `to`. + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. + * @param data Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. + * + * @custom:requirements + * - `from` cannot be the zero address. + * - `to` cannot be the zero address. + * - `from` must have at least `amount` of tokens. + * + * @custom:events {Transfer} event. + */ + function _transfer( + address from, + address to, + uint256 amount, + bool force, + bytes memory data + ) internal virtual { + if (from == address(0) || to == address(0)) { + revert LSP7CannotSendWithAddressZero(); + } + + _beforeTokenTransfer(from, to, amount, data); + + uint256 balance = _tokenOwnerBalances[from]; + if (amount > balance) { + revert LSP7AmountExceedsBalance(balance, from, amount); + } + + _tokenOwnerBalances[from] -= amount; + _tokenOwnerBalances[to] += amount; + + emit Transfer({ + operator: msg.sender, + from: from, + to: to, + amount: amount, + force: force, + data: data + }); + + _afterTokenTransfer(from, to, amount, data); + + bytes memory lsp1Data = abi.encode(msg.sender, from, to, amount, data); + + _notifyTokenSender(from, lsp1Data); + _notifyTokenReceiver(to, force, lsp1Data); + } + + /** + * @dev Hook that is called before any token transfer, including minting and burning. + * Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. + * + * @param from The sender address + * @param to The recipient address + * @param amount The amount of token to transfer + * @param data The data sent alongside the transfer + */ + function _beforeTokenTransfer( + address from, + address to, + uint256 amount, + bytes memory data // solhint-disable-next-line no-empty-blocks + ) internal virtual {} + + /** + * @dev Hook that is called after any token transfer, including minting and burning. + * Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. + * + * @param from The sender address + * @param to The recipient address + * @param amount The amount of token to transfer + * @param data The data sent alongside the transfer + */ + function _afterTokenTransfer( + address from, + address to, + uint256 amount, + bytes memory data // solhint-disable-next-line no-empty-blocks + ) internal virtual {} + + /** + * @dev Attempt to notify the operator `operator` about the `amount` tokens being authorized with. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP7_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. + * If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + + * @param operator The address to call the {universalReceiver} function on. + * @param lsp1Data the data to be sent to the `operator` address in the `universalReceiver` call. + */ + function _notifyTokenOperator( + address operator, + bytes memory lsp1Data + ) internal virtual { + LSP1Utils.notifyUniversalReceiver( + operator, + _TYPEID_LSP7_TOKENOPERATOR, + lsp1Data + ); + } + + /** + * @dev Attempt to notify the token sender `from` about the `amount` of tokens being transferred. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP7_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. + * If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + + * @param from The address to call the {universalReceiver} function on. + * @param lsp1Data the data to be sent to the `from` address in the `universalReceiver` call. + */ + function _notifyTokenSender( + address from, + bytes memory lsp1Data + ) internal virtual { + LSP1Utils.notifyUniversalReceiver( + from, + _TYPEID_LSP7_TOKENSSENDER, + lsp1Data + ); + } + + /** + * @dev Attempt to notify the token receiver `to` about the `amount` tokens being received. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP7_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. + * + * If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + * - if `force` is set to `true`, nothing will happen and no notification will be sent. + * - if `force` is set to `false, the transaction will revert. + * + * @param to The address to call the {universalReceiver} function on. + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. + * @param lsp1Data The data to be sent to the `to` address in the `universalReceiver(...)` call. + */ + function _notifyTokenReceiver( + address to, + bool force, + bytes memory lsp1Data + ) internal virtual { + if ( + ERC165Checker.supportsERC165InterfaceUnchecked( + to, + _INTERFACEID_LSP1 + ) + ) { + ILSP1(to).universalReceiver(_TYPEID_LSP7_TOKENSRECIPIENT, lsp1Data); + } else if (!force) { + if (to.code.length != 0) { + revert LSP7NotifyTokenReceiverContractMissingLSP1Interface(to); + } else { + revert LSP7NotifyTokenReceiverIsEOA(to); + } + } + } } diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol deleted file mode 100644 index ec4e16065..000000000 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol +++ /dev/null @@ -1,744 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.4; - -// interfaces -import { - ILSP1UniversalReceiver as ILSP1 -} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; -import {ILSP7DigitalAsset} from "./ILSP7DigitalAsset.sol"; - -// modules - -// libraries -import { - EnumerableSet -} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -import { - ERC165Checker -} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; -import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; - -// errors -import { - LSP7AmountExceedsAuthorizedAmount, - LSP7InvalidTransferBatch, - LSP7AmountExceedsBalance, - LSP7DecreasedAllowanceBelowZero, - LSP7CannotUseAddressZeroAsOperator, - LSP7TokenOwnerCannotBeOperator, - LSP7CannotSendWithAddressZero, - LSP7NotifyTokenReceiverContractMissingLSP1Interface, - LSP7NotifyTokenReceiverIsEOA, - OperatorAllowanceCannotBeIncreasedFromZero, - LSP7BatchCallFailed, - LSP7RevokeOperatorNotAuthorized, - LSP7DecreaseAllowanceNotAuthorized -} from "./LSP7Errors.sol"; - -// constants -import { - _INTERFACEID_LSP1 -} from "@lukso/lsp1-contracts/contracts/LSP1Constants.sol"; -import { - _TYPEID_LSP7_TOKENOPERATOR, - _TYPEID_LSP7_TOKENSSENDER, - _TYPEID_LSP7_TOKENSRECIPIENT -} from "./LSP7Constants.sol"; - -/** - * @title LSP7DigitalAsset contract - * @author Matthew Stevens - * @dev Core Implementation of a LSP7 compliant contract. - * - * This contract implement the core logic of the functions for the {ILSP7DigitalAsset} interface. - */ -abstract contract LSP7DigitalAssetCore is ILSP7DigitalAsset { - using EnumerableSet for EnumerableSet.AddressSet; - - // --- Storage - - bool internal _isNonDivisible; - - uint256 internal _existingTokens; - - // Mapping from `tokenOwner` to an `amount` of tokens - mapping(address => uint256) internal _tokenOwnerBalances; - - // Mapping an `address` to its authorized operator addresses. - mapping(address => EnumerableSet.AddressSet) internal _operators; - - // Mapping a `tokenOwner` to an `operator` to `amount` of tokens. - mapping(address => mapping(address => uint256)) - internal _operatorAuthorizedAmount; - - // --- Token queries - - /** - * @inheritdoc ILSP7DigitalAsset - */ - function decimals() public view virtual override returns (uint8) { - return _isNonDivisible ? 0 : 18; - } - - /** - * @inheritdoc ILSP7DigitalAsset - */ - function totalSupply() public view virtual override returns (uint256) { - return _existingTokens; - } - - // --- Token owner queries - - /** - * @inheritdoc ILSP7DigitalAsset - */ - function balanceOf( - address tokenOwner - ) public view virtual override returns (uint256) { - return _tokenOwnerBalances[tokenOwner]; - } - - // --- General functionality - - /** - * @inheritdoc ILSP7DigitalAsset - * - * @custom:info It's not possible to send value along the functions call due to the use of `delegatecall`. - */ - function batchCalls( - bytes[] calldata data - ) public virtual override returns (bytes[] memory results) { - results = new bytes[](data.length); - for (uint256 i; i < data.length; ) { - (bool success, bytes memory result) = address(this).delegatecall( - data[i] - ); - - if (!success) { - // Look for revert reason and bubble it up if present - if (result.length != 0) { - // The easiest way to bubble the revert reason is using memory via assembly - // solhint-disable no-inline-assembly - /// @solidity memory-safe-assembly - assembly { - let returndata_size := mload(result) - revert(add(32, result), returndata_size) - } - } else { - revert LSP7BatchCallFailed({callIndex: i}); - } - } - - results[i] = result; - - unchecked { - ++i; - } - } - } - - // --- Operator functionality - - /** - * @inheritdoc ILSP7DigitalAsset - * - * @custom:danger To avoid front-running and Allowance Double-Spend Exploit when - * increasing or decreasing the authorized amount of an operator, it is advised to - * use the {increaseAllowance} and {decreaseAllowance} functions. - * - * For more information, see: - * https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/ - */ - function authorizeOperator( - address operator, - uint256 amount, - bytes memory operatorNotificationData - ) public virtual override { - _updateOperator( - msg.sender, - operator, - amount, - true, - operatorNotificationData - ); - - bytes memory lsp1Data = abi.encode( - msg.sender, - amount, - operatorNotificationData - ); - - _notifyTokenOperator(operator, lsp1Data); - } - - /** - * @inheritdoc ILSP7DigitalAsset - */ - function revokeOperator( - address operator, - address tokenOwner, - bool notify, - bytes memory operatorNotificationData - ) public virtual override { - if (msg.sender != tokenOwner && msg.sender != operator) { - revert LSP7RevokeOperatorNotAuthorized( - msg.sender, - tokenOwner, - operator - ); - } - - _updateOperator( - tokenOwner, - operator, - 0, - notify, - operatorNotificationData - ); - - if (notify) { - bytes memory lsp1Data = abi.encode( - tokenOwner, - 0, - operatorNotificationData - ); - - _notifyTokenOperator(operator, lsp1Data); - } - } - - /** - * @inheritdoc ILSP7DigitalAsset - */ - function authorizedAmountFor( - address operator, - address tokenOwner - ) public view virtual override returns (uint256) { - if (tokenOwner == operator) { - return _tokenOwnerBalances[tokenOwner]; - } else { - return _operatorAuthorizedAmount[tokenOwner][operator]; - } - } - - /** - * @inheritdoc ILSP7DigitalAsset - */ - function getOperatorsOf( - address tokenOwner - ) public view virtual override returns (address[] memory) { - return _operators[tokenOwner].values(); - } - - /** - * @inheritdoc ILSP7DigitalAsset - */ - function increaseAllowance( - address operator, - uint256 addedAmount, - bytes memory operatorNotificationData - ) public virtual override { - uint256 oldAllowance = authorizedAmountFor(operator, msg.sender); - if (oldAllowance == 0) - revert OperatorAllowanceCannotBeIncreasedFromZero(operator); - - uint256 newAllowance = oldAllowance + addedAmount; - - _updateOperator( - msg.sender, - operator, - newAllowance, - true, - operatorNotificationData - ); - - bytes memory lsp1Data = abi.encode( - msg.sender, - newAllowance, - operatorNotificationData - ); - - _notifyTokenOperator(operator, lsp1Data); - } - - /** - * @inheritdoc ILSP7DigitalAsset - */ - function decreaseAllowance( - address operator, - address tokenOwner, - uint256 subtractedAmount, - bytes memory operatorNotificationData - ) public virtual override { - if (msg.sender != tokenOwner && msg.sender != operator) { - revert LSP7DecreaseAllowanceNotAuthorized( - msg.sender, - tokenOwner, - operator - ); - } - - uint256 currentAllowance = authorizedAmountFor(operator, tokenOwner); - if (currentAllowance < subtractedAmount) { - revert LSP7DecreasedAllowanceBelowZero(); - } - - uint256 newAllowance; - unchecked { - newAllowance = currentAllowance - subtractedAmount; - _updateOperator( - tokenOwner, - operator, - newAllowance, - true, - operatorNotificationData - ); - } - - bytes memory lsp1Data = abi.encode( - tokenOwner, - newAllowance, - operatorNotificationData - ); - - _notifyTokenOperator(operator, lsp1Data); - } - - // --- Transfer functionality - - /** - * @inheritdoc ILSP7DigitalAsset - */ - function transfer( - address from, - address to, - uint256 amount, - bool force, - bytes memory data - ) public virtual override { - if (msg.sender != from) { - _spendAllowance({ - operator: msg.sender, - tokenOwner: from, - amountToSpend: amount - }); - } - - _transfer(from, to, amount, force, data); - } - - /** - * @inheritdoc ILSP7DigitalAsset - */ - function transferBatch( - address[] memory from, - address[] memory to, - uint256[] memory amount, - bool[] memory force, - bytes[] memory data - ) public virtual override { - uint256 fromLength = from.length; - if ( - fromLength != to.length || - fromLength != amount.length || - fromLength != force.length || - fromLength != data.length - ) { - revert LSP7InvalidTransferBatch(); - } - - for (uint256 i; i < fromLength; ) { - // using the public transfer function to handle updates to operator authorized amounts - transfer(from[i], to[i], amount[i], force[i], data[i]); - - unchecked { - ++i; - } - } - } - - /** - * @dev Changes token `amount` the `operator` has access to from `tokenOwner` tokens. - * If the amount is zero the operator is removed from the list of operators, otherwise he is added to the list of operators. - * If the amount is zero then the operator is being revoked, otherwise the operator amount is being modified. - * - * @param tokenOwner The address that will give `operator` an allowance for on its balance. - * @param operator The address to grant an allowance to spend. - * @param allowance The maximum amount of token that `operator` can spend from the `tokenOwner`'s balance. - * @param notified Boolean indicating whether the operator has been notified about the change of allowance - * @param operatorNotificationData The data to send to the universalReceiver function of the operator in case of notifying - * - * @custom:events - * - {OperatorRevoked} event when operator's allowance is set to `0`. - * - {OperatorAuthorizationChanged} event when operator's allowance is set to any other amount. - * - * @custom:requirements - * - `operator` cannot be the zero address. - * - `operator` cannot be the same address as `tokenOwner`. - */ - function _updateOperator( - address tokenOwner, - address operator, - uint256 allowance, - bool notified, - bytes memory operatorNotificationData - ) internal virtual { - if (operator == address(0)) { - revert LSP7CannotUseAddressZeroAsOperator(); - } - - if (operator == tokenOwner) { - revert LSP7TokenOwnerCannotBeOperator(); - } - - _operatorAuthorizedAmount[tokenOwner][operator] = allowance; - - if (allowance != 0) { - _operators[tokenOwner].add(operator); - emit OperatorAuthorizationChanged( - operator, - tokenOwner, - allowance, - operatorNotificationData - ); - } else { - _operators[tokenOwner].remove(operator); - emit OperatorRevoked( - operator, - tokenOwner, - notified, - operatorNotificationData - ); - } - } - - /** - * @dev Mints `amount` of tokens and transfers it to `to`. - * - * @custom:info Any logic in the: - * - {_beforeTokenTransfer} function will run before updating the balances. - * - {_afterTokenTransfer} function will run after updating the balances, **but before notifying the recipient via LSP1**. - * - * @param to The address to mint tokens for. - * @param amount The amount of tokens to mint. - * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. - * @param data Additional data the caller wants included in the emitted {Transfer} event, and sent in the LSP1 hook to the `to` address. - * - * @custom:requirements - * - `to` cannot be the zero address. - * - * @custom:events {Transfer} event with `address(0)` as `from`. - */ - function _mint( - address to, - uint256 amount, - bool force, - bytes memory data - ) internal virtual { - if (to == address(0)) { - revert LSP7CannotSendWithAddressZero(); - } - - _beforeTokenTransfer(address(0), to, amount, data); - - // tokens being minted - _existingTokens += amount; - - _tokenOwnerBalances[to] += amount; - - emit Transfer({ - operator: msg.sender, - from: address(0), - to: to, - amount: amount, - force: force, - data: data - }); - - _afterTokenTransfer(address(0), to, amount, data); - - bytes memory lsp1Data = abi.encode( - msg.sender, - address(0), - to, - amount, - data - ); - _notifyTokenReceiver(to, force, lsp1Data); - } - - /** - * @dev Burns (= destroys) `amount` of tokens, decrease the `from` balance. This is done by sending them to the zero address. - * - * Both the sender and recipient will be notified of the token transfer through the LSP1 {universalReceiver} - * function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive - * all the parameters in the calldata packed encoded. - * - * @custom:info Any logic in the: - * - {_beforeTokenTransfer} function will run before updating the balances. - * - {_afterTokenTransfer} function will run after updating the balances, **but before notifying the sender via LSP1**. - * - * @param from The address to burn tokens from its balance. - * @param amount The amount of tokens to burn. - * @param data Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. - * - * @custom:hint In dApps, you can know which address is burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. - * - * @custom:requirements - * - `from` cannot be the zero address. - * - `from` must have at least `amount` tokens. - * - If the caller is not `from`, it must be an operator for `from` with access to at least - * `amount` tokens. - * - * @custom:events {Transfer} event with `address(0)` as the `to` address - */ - function _burn( - address from, - uint256 amount, - bytes memory data - ) internal virtual { - if (from == address(0)) { - revert LSP7CannotSendWithAddressZero(); - } - - _beforeTokenTransfer(from, address(0), amount, data); - - uint256 balance = _tokenOwnerBalances[from]; - if (amount > balance) { - revert LSP7AmountExceedsBalance(balance, from, amount); - } - // tokens being burnt - _existingTokens -= amount; - - _tokenOwnerBalances[from] -= amount; - - emit Transfer({ - operator: msg.sender, - from: from, - to: address(0), - amount: amount, - force: false, - data: data - }); - - _afterTokenTransfer(from, address(0), amount, data); - - bytes memory lsp1Data = abi.encode( - msg.sender, - from, - address(0), - amount, - data - ); - _notifyTokenSender(from, lsp1Data); - } - - /** - * @dev Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOwner`. - * - * @param operator The address of the operator to decrease the allowance of. - * @param tokenOwner The address that granted an allowance on its balance to `operator`. - * @param amountToSpend The amount of tokens to subtract in allowance of `operator`. - * - * @custom:events - * - {OperatorRevoked} event when operator's allowance is set to `0`. - * - {OperatorAuthorizationChanged} event when operator's allowance is set to any other amount. - * - * @custom:requirements - * - The `amountToSpend` MUST be at least the allowance granted to `operator` (accessible via {`authorizedAmountFor}`) - * - `operator` cannot be the zero address. - * - `operator` cannot be the same address as `tokenOwner`. - */ - function _spendAllowance( - address operator, - address tokenOwner, - uint256 amountToSpend - ) internal virtual { - uint256 authorizedAmount = _operatorAuthorizedAmount[tokenOwner][ - operator - ]; - - if (authorizedAmount == 0 || amountToSpend > authorizedAmount) { - revert LSP7AmountExceedsAuthorizedAmount( - tokenOwner, - authorizedAmount, - operator, - amountToSpend - ); - } - - _updateOperator({ - tokenOwner: tokenOwner, - operator: operator, - allowance: authorizedAmount - amountToSpend, - notified: false, - operatorNotificationData: "" - }); - } - - /** - * @dev Transfer tokens from `from` to `to` by decreasing the balance of `from` by `-amount` and increasing the balance - * of `to` by `+amount`. - * - * Both the sender and recipient will be notified of the token transfer through the LSP1 {universalReceiver} - * function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive - * all the parameters in the calldata packed encoded. - * - * @custom:info Any logic in the: - * - {_beforeTokenTransfer} function will run before updating the balances. - * - {_afterTokenTransfer} function will run after updating the balances, **but before notifying the sender/recipient via LSP1**. - * - * @param from The address to decrease the balance. - * @param to The address to increase the balance. - * @param amount The amount of tokens to transfer from `from` to `to`. - * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. - * @param data Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. - * - * @custom:requirements - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `from` must have at least `amount` of tokens. - * - * @custom:events {Transfer} event. - */ - function _transfer( - address from, - address to, - uint256 amount, - bool force, - bytes memory data - ) internal virtual { - if (from == address(0) || to == address(0)) { - revert LSP7CannotSendWithAddressZero(); - } - - _beforeTokenTransfer(from, to, amount, data); - - uint256 balance = _tokenOwnerBalances[from]; - if (amount > balance) { - revert LSP7AmountExceedsBalance(balance, from, amount); - } - - _tokenOwnerBalances[from] -= amount; - _tokenOwnerBalances[to] += amount; - - emit Transfer({ - operator: msg.sender, - from: from, - to: to, - amount: amount, - force: force, - data: data - }); - - _afterTokenTransfer(from, to, amount, data); - - bytes memory lsp1Data = abi.encode(msg.sender, from, to, amount, data); - - _notifyTokenSender(from, lsp1Data); - _notifyTokenReceiver(to, force, lsp1Data); - } - - /** - * @dev Hook that is called before any token transfer, including minting and burning. - * Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. - * - * @param from The sender address - * @param to The recipient address - * @param amount The amount of token to transfer - * @param data The data sent alongside the transfer - */ - function _beforeTokenTransfer( - address from, - address to, - uint256 amount, - bytes memory data // solhint-disable-next-line no-empty-blocks - ) internal virtual {} - - /** - * @dev Hook that is called after any token transfer, including minting and burning. - * Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. - * - * @param from The sender address - * @param to The recipient address - * @param amount The amount of token to transfer - * @param data The data sent alongside the transfer - */ - function _afterTokenTransfer( - address from, - address to, - uint256 amount, - bytes memory data // solhint-disable-next-line no-empty-blocks - ) internal virtual {} - - /** - * @dev Attempt to notify the operator `operator` about the `amount` tokens being authorized with. - * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP7_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. - * If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. - - * @param operator The address to call the {universalReceiver} function on. - * @param lsp1Data the data to be sent to the `operator` address in the `universalReceiver` call. - */ - function _notifyTokenOperator( - address operator, - bytes memory lsp1Data - ) internal virtual { - LSP1Utils.notifyUniversalReceiver( - operator, - _TYPEID_LSP7_TOKENOPERATOR, - lsp1Data - ); - } - - /** - * @dev Attempt to notify the token sender `from` about the `amount` of tokens being transferred. - * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP7_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. - * If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. - - * @param from The address to call the {universalReceiver} function on. - * @param lsp1Data the data to be sent to the `from` address in the `universalReceiver` call. - */ - function _notifyTokenSender( - address from, - bytes memory lsp1Data - ) internal virtual { - LSP1Utils.notifyUniversalReceiver( - from, - _TYPEID_LSP7_TOKENSSENDER, - lsp1Data - ); - } - - /** - * @dev Attempt to notify the token receiver `to` about the `amount` tokens being received. - * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP7_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. - * - * If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. - * - if `force` is set to `true`, nothing will happen and no notification will be sent. - * - if `force` is set to `false, the transaction will revert. - * - * @param to The address to call the {universalReceiver} function on. - * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. - * @param lsp1Data The data to be sent to the `to` address in the `universalReceiver(...)` call. - */ - function _notifyTokenReceiver( - address to, - bool force, - bytes memory lsp1Data - ) internal virtual { - if ( - ERC165Checker.supportsERC165InterfaceUnchecked( - to, - _INTERFACEID_LSP1 - ) - ) { - ILSP1(to).universalReceiver(_TYPEID_LSP7_TOKENSRECIPIENT, lsp1Data); - } else if (!force) { - if (to.code.length != 0) { - revert LSP7NotifyTokenReceiverContractMissingLSP1Interface(to); - } else { - revert LSP7NotifyTokenReceiverIsEOA(to); - } - } - } -} diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol index 0c8fe8163..e180a41dc 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol @@ -2,29 +2,44 @@ pragma solidity ^0.8.4; // interfaces -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +import { + ILSP1UniversalReceiver as ILSP1 +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; +import {ILSP7DigitalAsset} from "./ILSP7DigitalAsset.sol"; + // modules -import {ERC725YCore} from "@erc725/smart-contracts/contracts/ERC725YCore.sol"; import { - LSP4DigitalAssetMetadataInitAbstract + EnumerableSet +} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import { + ERC165Checker // TODO: define if we inherit the upgradable version +} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; +import { + LSP4DigitalAssetMetadataInitAbstract, + ERC725YInitAbstract } from "@lukso/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol"; -import {LSP7DigitalAssetCore} from "./LSP7DigitalAssetCore.sol"; - import { LSP17Extendable } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Extendable.sol"; // libraries +import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; import {LSP2Utils} from "@lukso/lsp2-contracts/contracts/LSP2Utils.sol"; // constants -import {_INTERFACEID_LSP7} from "./LSP7Constants.sol"; -import {LSP7TokenContractCannotHoldValue} from "./LSP7Errors.sol"; - +import { + _INTERFACEID_LSP1 +} from "@lukso/lsp1-contracts/contracts/LSP1Constants.sol"; import { _LSP17_EXTENSION_PREFIX } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Constants.sol"; +import { + _INTERFACEID_LSP7, + _TYPEID_LSP7_TOKENOPERATOR, + _TYPEID_LSP7_TOKENSSENDER, + _TYPEID_LSP7_TOKENSRECIPIENT +} from "./LSP7Constants.sol"; // errors @@ -33,17 +48,56 @@ import { InvalidFunctionSelector, InvalidExtensionAddress } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Errors.sol"; +import { + LSP7TokenContractCannotHoldValue, + LSP7AmountExceedsAuthorizedAmount, + LSP7InvalidTransferBatch, + LSP7AmountExceedsBalance, + LSP7DecreasedAllowanceBelowZero, + LSP7CannotUseAddressZeroAsOperator, + LSP7TokenOwnerCannotBeOperator, + LSP7CannotSendWithAddressZero, + LSP7NotifyTokenReceiverContractMissingLSP1Interface, + LSP7NotifyTokenReceiverIsEOA, + OperatorAllowanceCannotBeIncreasedFromZero, + LSP7BatchCallFailed, + LSP7RevokeOperatorNotAuthorized, + LSP7DecreaseAllowanceNotAuthorized +} from "./LSP7Errors.sol"; /** - * @title LSP7DigitalAsset contract + * @title Proxy Implementation of the LSP7 Digital Asset standard, a contract that represents a fungible token. * @author Matthew Stevens - * @dev Proxy Implementation of a LSP7 compliant contract. + * + * @dev This contract implement the core logic of the functions for the {ILSP7DigitalAsset} interface. + * Minting and transferring are supplied with a `uint256` amount. + * This implementation is agnostic to the way tokens are created. + * A supply mechanism has to be added in a derived contract using {_mint} + * For a generic mechanism, see {LSP7MintableInitAbstract}. */ abstract contract LSP7DigitalAssetInitAbstract is + ILSP7DigitalAsset, LSP4DigitalAssetMetadataInitAbstract, - LSP7DigitalAssetCore, LSP17Extendable { + using EnumerableSet for EnumerableSet.AddressSet; + + // --- Storage + + bool internal _isNonDivisible; + + uint256 internal _existingTokens; + + // Mapping from `tokenOwner` to an `amount` of tokens + mapping(address => uint256) internal _tokenOwnerBalances; + + // Mapping an `address` to its authorized operator addresses. + mapping(address => EnumerableSet.AddressSet) internal _operators; + + // Mapping a `tokenOwner` to an `operator` to `amount` of tokens. + mapping(address => mapping(address => uint256)) + internal _operatorAuthorizedAmount; + function _initialize( string memory name_, string memory symbol_, @@ -61,7 +115,7 @@ abstract contract LSP7DigitalAssetInitAbstract is _isNonDivisible = isNonDivisible_; } - // fallback function + // fallback functions /** * @notice The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`. @@ -165,7 +219,7 @@ abstract contract LSP7DigitalAssetInitAbstract is ); // Check if there is an extension stored under the generated data key - bytes memory extensionAddress = ERC725YCore._getData( + bytes memory extensionAddress = ERC725YInitAbstract._getData( mappedExtensionDataKey ); if (extensionAddress.length != 20 && extensionAddress.length != 0) @@ -183,7 +237,7 @@ abstract contract LSP7DigitalAssetInitAbstract is public view virtual - override(IERC165, ERC725YCore, LSP17Extendable) + override(ERC725YInitAbstract, LSP17Extendable) returns (bool) { return @@ -191,4 +245,675 @@ abstract contract LSP7DigitalAssetInitAbstract is super.supportsInterface(interfaceId) || LSP17Extendable._supportsInterfaceInERC165Extension(interfaceId); } + + // --- Token queries + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function decimals() public view virtual override returns (uint8) { + return _isNonDivisible ? 0 : 18; + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function totalSupply() public view virtual override returns (uint256) { + return _existingTokens; + } + + // --- Token owner queries + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function balanceOf( + address tokenOwner + ) public view virtual override returns (uint256) { + return _tokenOwnerBalances[tokenOwner]; + } + + // --- General functionality + + /** + * @inheritdoc ILSP7DigitalAsset + * + * @custom:info It's not possible to send value along the functions call due to the use of `delegatecall`. + */ + function batchCalls( + bytes[] calldata data + ) public virtual override returns (bytes[] memory results) { + results = new bytes[](data.length); + for (uint256 i; i < data.length; ) { + (bool success, bytes memory result) = address(this).delegatecall( + data[i] + ); + + if (!success) { + // Look for revert reason and bubble it up if present + if (result.length != 0) { + // The easiest way to bubble the revert reason is using memory via assembly + // solhint-disable no-inline-assembly + /// @solidity memory-safe-assembly + assembly { + let returndata_size := mload(result) + revert(add(32, result), returndata_size) + } + } else { + revert LSP7BatchCallFailed({callIndex: i}); + } + } + + results[i] = result; + + unchecked { + ++i; + } + } + } + + // --- Operator functionality + + /** + * @inheritdoc ILSP7DigitalAsset + * + * @custom:danger To avoid front-running and Allowance Double-Spend Exploit when + * increasing or decreasing the authorized amount of an operator, it is advised to + * use the {increaseAllowance} and {decreaseAllowance} functions. + * + * For more information, see: + * https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/ + */ + function authorizeOperator( + address operator, + uint256 amount, + bytes memory operatorNotificationData + ) public virtual override { + _updateOperator( + msg.sender, + operator, + amount, + true, + operatorNotificationData + ); + + bytes memory lsp1Data = abi.encode( + msg.sender, + amount, + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function revokeOperator( + address operator, + address tokenOwner, + bool notify, + bytes memory operatorNotificationData + ) public virtual override { + if (msg.sender != tokenOwner && msg.sender != operator) { + revert LSP7RevokeOperatorNotAuthorized( + msg.sender, + tokenOwner, + operator + ); + } + + _updateOperator( + tokenOwner, + operator, + 0, + notify, + operatorNotificationData + ); + + if (notify) { + bytes memory lsp1Data = abi.encode( + tokenOwner, + 0, + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function authorizedAmountFor( + address operator, + address tokenOwner + ) public view virtual override returns (uint256) { + if (tokenOwner == operator) { + return _tokenOwnerBalances[tokenOwner]; + } else { + return _operatorAuthorizedAmount[tokenOwner][operator]; + } + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function getOperatorsOf( + address tokenOwner + ) public view virtual override returns (address[] memory) { + return _operators[tokenOwner].values(); + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function increaseAllowance( + address operator, + uint256 addedAmount, + bytes memory operatorNotificationData + ) public virtual override { + uint256 oldAllowance = authorizedAmountFor(operator, msg.sender); + if (oldAllowance == 0) + revert OperatorAllowanceCannotBeIncreasedFromZero(operator); + + uint256 newAllowance = oldAllowance + addedAmount; + + _updateOperator( + msg.sender, + operator, + newAllowance, + true, + operatorNotificationData + ); + + bytes memory lsp1Data = abi.encode( + msg.sender, + newAllowance, + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function decreaseAllowance( + address operator, + address tokenOwner, + uint256 subtractedAmount, + bytes memory operatorNotificationData + ) public virtual override { + if (msg.sender != tokenOwner && msg.sender != operator) { + revert LSP7DecreaseAllowanceNotAuthorized( + msg.sender, + tokenOwner, + operator + ); + } + + uint256 currentAllowance = authorizedAmountFor(operator, tokenOwner); + if (currentAllowance < subtractedAmount) { + revert LSP7DecreasedAllowanceBelowZero(); + } + + uint256 newAllowance; + unchecked { + newAllowance = currentAllowance - subtractedAmount; + _updateOperator( + tokenOwner, + operator, + newAllowance, + true, + operatorNotificationData + ); + } + + bytes memory lsp1Data = abi.encode( + tokenOwner, + newAllowance, + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + + // --- Transfer functionality + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function transfer( + address from, + address to, + uint256 amount, + bool force, + bytes memory data + ) public virtual override { + if (msg.sender != from) { + _spendAllowance({ + operator: msg.sender, + tokenOwner: from, + amountToSpend: amount + }); + } + + _transfer(from, to, amount, force, data); + } + + /** + * @inheritdoc ILSP7DigitalAsset + */ + function transferBatch( + address[] memory from, + address[] memory to, + uint256[] memory amount, + bool[] memory force, + bytes[] memory data + ) public virtual override { + uint256 fromLength = from.length; + if ( + fromLength != to.length || + fromLength != amount.length || + fromLength != force.length || + fromLength != data.length + ) { + revert LSP7InvalidTransferBatch(); + } + + for (uint256 i; i < fromLength; ) { + // using the public transfer function to handle updates to operator authorized amounts + transfer(from[i], to[i], amount[i], force[i], data[i]); + + unchecked { + ++i; + } + } + } + + /** + * @dev Changes token `amount` the `operator` has access to from `tokenOwner` tokens. + * If the amount is zero the operator is removed from the list of operators, otherwise he is added to the list of operators. + * If the amount is zero then the operator is being revoked, otherwise the operator amount is being modified. + * + * @param tokenOwner The address that will give `operator` an allowance for on its balance. + * @param operator The address to grant an allowance to spend. + * @param allowance The maximum amount of token that `operator` can spend from the `tokenOwner`'s balance. + * @param notified Boolean indicating whether the operator has been notified about the change of allowance + * @param operatorNotificationData The data to send to the universalReceiver function of the operator in case of notifying + * + * @custom:events + * - {OperatorRevoked} event when operator's allowance is set to `0`. + * - {OperatorAuthorizationChanged} event when operator's allowance is set to any other amount. + * + * @custom:requirements + * - `operator` cannot be the zero address. + * - `operator` cannot be the same address as `tokenOwner`. + */ + function _updateOperator( + address tokenOwner, + address operator, + uint256 allowance, + bool notified, + bytes memory operatorNotificationData + ) internal virtual { + if (operator == address(0)) { + revert LSP7CannotUseAddressZeroAsOperator(); + } + + if (operator == tokenOwner) { + revert LSP7TokenOwnerCannotBeOperator(); + } + + _operatorAuthorizedAmount[tokenOwner][operator] = allowance; + + if (allowance != 0) { + _operators[tokenOwner].add(operator); + emit OperatorAuthorizationChanged( + operator, + tokenOwner, + allowance, + operatorNotificationData + ); + } else { + _operators[tokenOwner].remove(operator); + emit OperatorRevoked( + operator, + tokenOwner, + notified, + operatorNotificationData + ); + } + } + + /** + * @dev Mints `amount` of tokens and transfers it to `to`. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances. + * - {_afterTokenTransfer} function will run after updating the balances, **but before notifying the recipient via LSP1**. + * + * @param to The address to mint tokens for. + * @param amount The amount of tokens to mint. + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. + * @param data Additional data the caller wants included in the emitted {Transfer} event, and sent in the LSP1 hook to the `to` address. + * + * @custom:requirements + * - `to` cannot be the zero address. + * + * @custom:events {Transfer} event with `address(0)` as `from`. + */ + function _mint( + address to, + uint256 amount, + bool force, + bytes memory data + ) internal virtual { + if (to == address(0)) { + revert LSP7CannotSendWithAddressZero(); + } + + _beforeTokenTransfer(address(0), to, amount, data); + + // tokens being minted + _existingTokens += amount; + + _tokenOwnerBalances[to] += amount; + + emit Transfer({ + operator: msg.sender, + from: address(0), + to: to, + amount: amount, + force: force, + data: data + }); + + _afterTokenTransfer(address(0), to, amount, data); + + bytes memory lsp1Data = abi.encode( + msg.sender, + address(0), + to, + amount, + data + ); + _notifyTokenReceiver(to, force, lsp1Data); + } + + /** + * @dev Burns (= destroys) `amount` of tokens, decrease the `from` balance. This is done by sending them to the zero address. + * + * Both the sender and recipient will be notified of the token transfer through the LSP1 {universalReceiver} + * function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive + * all the parameters in the calldata packed encoded. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances. + * - {_afterTokenTransfer} function will run after updating the balances, **but before notifying the sender via LSP1**. + * + * @param from The address to burn tokens from its balance. + * @param amount The amount of tokens to burn. + * @param data Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. + * + * @custom:hint In dApps, you can know which address is burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + * + * @custom:requirements + * - `from` cannot be the zero address. + * - `from` must have at least `amount` tokens. + * - If the caller is not `from`, it must be an operator for `from` with access to at least + * `amount` tokens. + * + * @custom:events {Transfer} event with `address(0)` as the `to` address + */ + function _burn( + address from, + uint256 amount, + bytes memory data + ) internal virtual { + if (from == address(0)) { + revert LSP7CannotSendWithAddressZero(); + } + + _beforeTokenTransfer(from, address(0), amount, data); + + uint256 balance = _tokenOwnerBalances[from]; + if (amount > balance) { + revert LSP7AmountExceedsBalance(balance, from, amount); + } + // tokens being burnt + _existingTokens -= amount; + + _tokenOwnerBalances[from] -= amount; + + emit Transfer({ + operator: msg.sender, + from: from, + to: address(0), + amount: amount, + force: false, + data: data + }); + + _afterTokenTransfer(from, address(0), amount, data); + + bytes memory lsp1Data = abi.encode( + msg.sender, + from, + address(0), + amount, + data + ); + _notifyTokenSender(from, lsp1Data); + } + + /** + * @dev Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOwner`. + * + * @param operator The address of the operator to decrease the allowance of. + * @param tokenOwner The address that granted an allowance on its balance to `operator`. + * @param amountToSpend The amount of tokens to subtract in allowance of `operator`. + * + * @custom:events + * - {OperatorRevoked} event when operator's allowance is set to `0`. + * - {OperatorAuthorizationChanged} event when operator's allowance is set to any other amount. + * + * @custom:requirements + * - The `amountToSpend` MUST be at least the allowance granted to `operator` (accessible via {`authorizedAmountFor}`) + * - `operator` cannot be the zero address. + * - `operator` cannot be the same address as `tokenOwner`. + */ + function _spendAllowance( + address operator, + address tokenOwner, + uint256 amountToSpend + ) internal virtual { + uint256 authorizedAmount = _operatorAuthorizedAmount[tokenOwner][ + operator + ]; + + if (amountToSpend > authorizedAmount) { + revert LSP7AmountExceedsAuthorizedAmount( + tokenOwner, + authorizedAmount, + operator, + amountToSpend + ); + } + + _updateOperator({ + tokenOwner: tokenOwner, + operator: operator, + allowance: authorizedAmount - amountToSpend, + notified: false, + operatorNotificationData: "" + }); + } + + /** + * @dev Transfer tokens from `from` to `to` by decreasing the balance of `from` by `-amount` and increasing the balance + * of `to` by `+amount`. + * + * Both the sender and recipient will be notified of the token transfer through the LSP1 {universalReceiver} + * function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive + * all the parameters in the calldata packed encoded. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances. + * - {_afterTokenTransfer} function will run after updating the balances, **but before notifying the sender/recipient via LSP1**. + * + * @param from The address to decrease the balance. + * @param to The address to increase the balance. + * @param amount The amount of tokens to transfer from `from` to `to`. + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. + * @param data Additional data the caller wants included in the emitted event, and sent in the LSP1 hook to the `from` and `to` address. + * + * @custom:requirements + * - `from` cannot be the zero address. + * - `to` cannot be the zero address. + * - `from` must have at least `amount` of tokens. + * + * @custom:events {Transfer} event. + */ + function _transfer( + address from, + address to, + uint256 amount, + bool force, + bytes memory data + ) internal virtual { + if (from == address(0) || to == address(0)) { + revert LSP7CannotSendWithAddressZero(); + } + + _beforeTokenTransfer(from, to, amount, data); + + uint256 balance = _tokenOwnerBalances[from]; + if (amount > balance) { + revert LSP7AmountExceedsBalance(balance, from, amount); + } + + _tokenOwnerBalances[from] -= amount; + _tokenOwnerBalances[to] += amount; + + emit Transfer({ + operator: msg.sender, + from: from, + to: to, + amount: amount, + force: force, + data: data + }); + + _afterTokenTransfer(from, to, amount, data); + + bytes memory lsp1Data = abi.encode(msg.sender, from, to, amount, data); + + _notifyTokenSender(from, lsp1Data); + _notifyTokenReceiver(to, force, lsp1Data); + } + + /** + * @dev Hook that is called before any token transfer, including minting and burning. + * Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. + * + * @param from The sender address + * @param to The recipient address + * @param amount The amount of token to transfer + * @param data The data sent alongside the transfer + */ + function _beforeTokenTransfer( + address from, + address to, + uint256 amount, + bytes memory data // solhint-disable-next-line no-empty-blocks + ) internal virtual {} + + /** + * @dev Hook that is called after any token transfer, including minting and burning. + * Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. + * + * @param from The sender address + * @param to The recipient address + * @param amount The amount of token to transfer + * @param data The data sent alongside the transfer + */ + function _afterTokenTransfer( + address from, + address to, + uint256 amount, + bytes memory data // solhint-disable-next-line no-empty-blocks + ) internal virtual {} + + /** + * @dev Attempt to notify the operator `operator` about the `amount` tokens being authorized with. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP7_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. + * If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + + * @param operator The address to call the {universalReceiver} function on. + * @param lsp1Data the data to be sent to the `operator` address in the `universalReceiver` call. + */ + function _notifyTokenOperator( + address operator, + bytes memory lsp1Data + ) internal virtual { + LSP1Utils.notifyUniversalReceiver( + operator, + _TYPEID_LSP7_TOKENOPERATOR, + lsp1Data + ); + } + + /** + * @dev Attempt to notify the token sender `from` about the `amount` of tokens being transferred. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP7_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. + * If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + + * @param from The address to call the {universalReceiver} function on. + * @param lsp1Data the data to be sent to the `from` address in the `universalReceiver` call. + */ + function _notifyTokenSender( + address from, + bytes memory lsp1Data + ) internal virtual { + LSP1Utils.notifyUniversalReceiver( + from, + _TYPEID_LSP7_TOKENSSENDER, + lsp1Data + ); + } + + /** + * @dev Attempt to notify the token receiver `to` about the `amount` tokens being received. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP7_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. + * + * If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + * - if `force` is set to `true`, nothing will happen and no notification will be sent. + * - if `force` is set to `false, the transaction will revert. + * + * @param to The address to call the {universalReceiver} function on. + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. + * @param lsp1Data The data to be sent to the `to` address in the `universalReceiver(...)` call. + */ + function _notifyTokenReceiver( + address to, + bool force, + bytes memory lsp1Data + ) internal virtual { + if ( + ERC165Checker.supportsERC165InterfaceUnchecked( + to, + _INTERFACEID_LSP1 + ) + ) { + ILSP1(to).universalReceiver(_TYPEID_LSP7_TOKENSRECIPIENT, lsp1Data); + } else if (!force) { + if (to.code.length != 0) { + revert LSP7NotifyTokenReceiverContractMissingLSP1Interface(to); + } else { + revert LSP7NotifyTokenReceiverIsEOA(to); + } + } + } } diff --git a/packages/lsp7-contracts/package.json b/packages/lsp7-contracts/package.json index bae0e1b8a..4a5a26051 100644 --- a/packages/lsp7-contracts/package.json +++ b/packages/lsp7-contracts/package.json @@ -47,11 +47,11 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3", + "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0-1.tgz", + "@openzeppelin/contracts": "^4.9.6", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0" + "@lukso/lsp4-contracts": "*", + "@lukso/lsp17contractextension-contracts": "*" } } From d499453612dfe687aef15c7b26d52c15555fe98f Mon Sep 17 00:00:00 2001 From: CJ42 Date: Tue, 3 Sep 2024 11:23:46 +0900 Subject: [PATCH 42/94] refactor!: remove `Core` contract from LSP8 package --- package-lock.json | 5437 +++++++++++------ packages/lsp4-contracts/package.json | 2 +- .../ILSP8IdentifiableDigitalAsset.sol | 8 +- .../LSP8IdentifiableDigitalAsset.sol | 824 ++- .../LSP8IdentifiableDigitalAssetCore.sol | 809 --- ...P8IdentifiableDigitalAssetInitAbstract.sol | 836 ++- .../contracts/extensions/LSP8Enumerable.sol | 7 +- .../extensions/LSP8EnumerableInitAbstract.sol | 7 +- packages/lsp8-contracts/package.json | 8 +- template/package.json | 2 +- 10 files changed, 5140 insertions(+), 2800 deletions(-) delete mode 100644 packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetCore.sol diff --git a/package-lock.json b/package-lock.json index 7fac3acff..750f06028 100644 --- a/package-lock.json +++ b/package-lock.json @@ -130,7 +130,8 @@ }, "node_modules/@babel/compat-data": { "version": "7.25.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "engines": { "node": ">=6.9.0" } @@ -176,7 +177,8 @@ }, "node_modules/@babel/generator": { "version": "7.25.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "dependencies": { "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", @@ -298,7 +300,8 @@ }, "node_modules/@babel/helpers": { "version": "7.25.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "dependencies": { "@babel/template": "^7.25.0", "@babel/types": "^7.25.6" @@ -322,7 +325,8 @@ }, "node_modules/@babel/parser": { "version": "7.25.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "dependencies": { "@babel/types": "^7.25.6" }, @@ -335,7 +339,8 @@ }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.25.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz", + "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==", "dependencies": { "@babel/helper-module-imports": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.8", @@ -353,7 +358,8 @@ }, "node_modules/@babel/runtime": { "version": "7.25.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -363,6 +369,8 @@ }, "node_modules/@babel/runtime-corejs3": { "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.6.tgz", + "integrity": "sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==", "dev": true, "license": "MIT", "dependencies": { @@ -375,6 +383,8 @@ }, "node_modules/@babel/standalone": { "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.25.6.tgz", + "integrity": "sha512-Kf2ZcZVqsKbtYhlA7sP0z5A3q5hmCVYMKMWRWNK/5OVwHIve3JY1djVRmIVAx8FMueLIfZGKQDIILK2w8zO4mg==", "dev": true, "license": "MIT", "engines": { @@ -406,7 +416,8 @@ }, "node_modules/@babel/traverse": { "version": "7.25.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/generator": "^7.25.6", @@ -440,7 +451,8 @@ }, "node_modules/@babel/types": { "version": "7.25.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "dependencies": { "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", @@ -484,181 +496,550 @@ }, "node_modules/@erc725/smart-contracts": { "version": "7.0.0", - "license": "Apache-2.0", + "resolved": "file:packages/lsp7-contracts/erc725-smart-contracts-8.0.0-1.tgz", + "integrity": "sha512-bqvxTz4xG4UUNVHrCaewSUTN7y9LBTHxeYM4Ojtw32Yq/JiwkdNTrxFrn4cMdfvYRC7BWBBq5iwBosn7KrusGw==", "dependencies": { - "@openzeppelin/contracts": "^4.9.3", - "@openzeppelin/contracts-upgradeable": "^4.9.3", + "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts-upgradeable": "^4.9.6", "solidity-bytes-utils": "0.8.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", "cpu": [ - "arm64" + "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "darwin" + "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=12" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "license": "Apache-2.0", + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "license": "MIT", + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { - "version": "1.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/@ethereumjs/common": { - "version": "2.6.5", - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@ethereumjs/rlp": { - "version": "4.0.1", + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" + "node": ">=12" } }, - "node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@ethereumjs/util": { - "version": "8.1.0", + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" + "node": ">=12" } }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.4.2", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.4.0", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=12" } }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "dev": true, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause" + }, + "node_modules/@ethereumjs/common": { + "version": "2.6.5", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "dev": true, "license": "MIT", "dependencies": { "@noble/curves": "1.4.2", @@ -1798,6 +2179,8 @@ }, "node_modules/@nomicfoundation/hardhat-ethers": { "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz", + "integrity": "sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA==", "dev": true, "license": "MIT", "peer": true, @@ -1848,6 +2231,8 @@ }, "node_modules/@nomicfoundation/hardhat-verify": { "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.10.tgz", + "integrity": "sha512-3zoTZGQhpeOm6piJDdsGb6euzZAd7N5Tk0zPQvGnfKQ0+AoxKz/7i4if12goi8IDTuUGElAUuZyQB8PMQoXA5g==", "dev": true, "license": "MIT", "peer": true, @@ -2149,8 +2534,38 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", + "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", + "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true + }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", + "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", "cpu": [ "arm64" ], @@ -2162,6 +2577,188 @@ ], "peer": true }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", + "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", + "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", + "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", + "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", + "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", + "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", + "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", + "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", + "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", + "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", + "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", + "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", + "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, "node_modules/@scure/base": { "version": "1.1.8", "license": "MIT", @@ -3028,6 +3625,8 @@ }, "node_modules/@types/chai": { "version": "4.3.19", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.19.tgz", + "integrity": "sha512-2hHHvQBVE2FiSK4eN0Br6snX9MtolHaTo/batnLjlGRhoQzlCL61iVpxoqO7SfFyOw+P/pwv+0zNHzKoGWz9Cw==", "dev": true, "license": "MIT", "peer": true @@ -3164,8 +3763,9 @@ "peer": true }, "node_modules/@types/node": { - "version": "22.5.3", - "license": "MIT", + "version": "22.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz", + "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==", "dependencies": { "undici-types": "~6.19.2" } @@ -3287,7 +3887,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { "version": "5.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { "node": ">= 4" } @@ -3425,7 +4026,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": { "version": "5.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { "node": ">= 4" } @@ -4499,9 +5101,10 @@ } }, "node_modules/async": { - "version": "3.2.6", - "dev": true, - "license": "MIT" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true }, "node_modules/async-eventemitter": { "version": "0.2.4", @@ -4598,7 +5201,8 @@ }, "node_modules/aws4": { "version": "1.13.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==" }, "node_modules/axios": { "version": "0.21.4", @@ -5160,6 +5764,8 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001655", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", + "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", "funding": [ { "type": "opencollective", @@ -5712,7 +6318,8 @@ }, "node_modules/core-js-compat": { "version": "3.38.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dependencies": { "browserslist": "^4.23.3" }, @@ -5723,6 +6330,8 @@ }, "node_modules/core-js-pure": { "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", + "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5827,11 +6436,12 @@ "license": "MIT" }, "node_modules/cross-fetch": { - "version": "4.0.0", - "dev": true, - "license": "MIT", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", + "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", "dependencies": { - "node-fetch": "^2.6.12" + "node-fetch": "^2.6.7", + "whatwg-fetch": "^2.0.4" } }, "node_modules/cross-spawn": { @@ -5924,6 +6534,8 @@ }, "node_modules/cssnano": { "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.5.tgz", + "integrity": "sha512-Aq0vqBLtpTT5Yxj+hLlLfNPFuRQCDIjx5JQAhhaedQKLNDvDGeVziF24PS+S1f0Z5KCxWvw0QVI3VNHNBITxVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5943,6 +6555,8 @@ }, "node_modules/cssnano-preset-default": { "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.5.tgz", + "integrity": "sha512-Jbzja0xaKwc5JzxPQoc+fotKpYtWEu4wQLMQe29CM0FjjdRjA4omvbGHl2DTGgARKxSTpPssBsok+ixv8uTBqw==", "dev": true, "license": "MIT", "dependencies": { @@ -6467,7 +7081,8 @@ }, "node_modules/electron-to-chromium": { "version": "1.5.13", - "license": "ISC" + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -6754,7 +7369,8 @@ }, "node_modules/escalade": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } @@ -6868,11 +7484,11 @@ } }, "node_modules/eslint-config-turbo": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-2.2.1.tgz", - "integrity": "sha512-cDvPCMSlcyNe5+a3tEZoF/gsZ8WrCddAdqcN/qvBGVD7IL1XdxWerFCfgU/R2fT9JFjyqRhsJnmcbbbwyXockw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-2.1.1.tgz", + "integrity": "sha512-JJF8SZErmgKCGkt124WUmTt0sQ5YLvPo2YxDsfzn9avGJC7/BQIa+3FZoDb3zeYYsZx91pZ6htQAJaKK8NQQAg==", "dependencies": { - "eslint-plugin-turbo": "2.2.1" + "eslint-plugin-turbo": "2.1.1" }, "peerDependencies": { "eslint": ">6.6.0" @@ -6898,9 +7514,9 @@ } }, "node_modules/eslint-plugin-turbo": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-2.2.1.tgz", - "integrity": "sha512-ajKdYtqLC238QGA4SpAFHp6dZICcEktB5oLOnMXz84M+pS9FlGBiUmonrBkmdTEm5jakxqmSdt/cq9J2hWm6mg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-2.1.1.tgz", + "integrity": "sha512-E/34kdQd0n3RP18+e0DSV0f3YTSCOojUh1p4X0Xrho2PBYmJ3umSnNo9FhkZt6UDACl+nBQcYTFkRHMz76lJdw==", "dependencies": { "dotenv": "16.0.3" }, @@ -7352,6 +7968,8 @@ }, "node_modules/eth-gas-reporter/node_modules/axios": { "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7615,7 +8233,8 @@ }, "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", "engines": { "node": "^14.21.3 || >=16" }, @@ -8783,6 +9402,8 @@ }, "node_modules/globby/node_modules/ignore": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -8953,6 +9574,8 @@ }, "node_modules/hardhat": { "version": "2.22.10", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.10.tgz", + "integrity": "sha512-JRUDdiystjniAvBGFmJRsiIZSOP2/6s++8xRDe3TzLeQXlWWHsXBrd9wd3JWFyKXvgMqMeLL5Sz/oNxXKYw9vg==", "dev": true, "license": "MIT", "dependencies": { @@ -10020,6 +10643,8 @@ }, "node_modules/is-core-module": { "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11156,7 +11781,8 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -11279,6 +11905,8 @@ }, "node_modules/mkdist": { "version": "1.5.5", + "resolved": "https://registry.npmjs.org/mkdist/-/mkdist-1.5.5.tgz", + "integrity": "sha512-Kbj0Tt4uk6AN/XEV1W7EgBpJUmEXZgTWxbMKYIpO0hRXoTstFIJrJVqDgPjBz9AXXN3ZpxQBk2Q0n28Ze0Gh1w==", "dev": true, "license": "MIT", "dependencies": { @@ -11316,16 +11944,354 @@ } } }, - "node_modules/mkdist/node_modules/@esbuild/darwin-arm64": { + "node_modules/mkdist/node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/win32-ia32": { "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "cpu": [ - "arm64" + "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/mkdist/node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" ], "engines": { "node": ">=18" @@ -11333,6 +12299,8 @@ }, "node_modules/mkdist/node_modules/esbuild": { "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -11412,6 +12380,8 @@ }, "node_modules/mocha": { "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", "dev": true, "license": "MIT", "dependencies": { @@ -11787,7 +12757,8 @@ }, "node_modules/node-gyp-build": { "version": "4.8.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -12659,7 +13630,8 @@ }, "node_modules/picocolors": { "version": "1.1.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -12694,6 +13666,8 @@ }, "node_modules/pkg-types": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", + "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", "dev": true, "license": "MIT", "dependencies": { @@ -12719,6 +13693,8 @@ }, "node_modules/postcss": { "version": "8.4.44", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz", + "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==", "dev": true, "funding": [ { @@ -12746,6 +13722,8 @@ }, "node_modules/postcss-calc": { "version": "10.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", + "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", "dev": true, "license": "MIT", "dependencies": { @@ -12761,6 +13739,8 @@ }, "node_modules/postcss-colormin": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", + "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", "dev": true, "license": "MIT", "dependencies": { @@ -12778,6 +13758,8 @@ }, "node_modules/postcss-convert-values": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.3.tgz", + "integrity": "sha512-yJhocjCs2SQer0uZ9lXTMOwDowbxvhwFVrZeS6NPEij/XXthl73ggUmfwVvJM+Vaj5gtCKJV1jiUu4IhAUkX/Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12793,6 +13775,8 @@ }, "node_modules/postcss-discard-comments": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.2.tgz", + "integrity": "sha512-/Hje9Ls1IYcB9duELO/AyDUJI6aQVY3h5Rj1ziXgaLYCTi1iVBLnjg/TS0D6NszR/kDG6I86OwLmAYe+bvJjiQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12807,6 +13791,8 @@ }, "node_modules/postcss-discard-duplicates": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", + "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", "dev": true, "license": "MIT", "engines": { @@ -12840,6 +13826,8 @@ }, "node_modules/postcss-merge-longhand": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.3.tgz", + "integrity": "sha512-8waYomFxshdv6M9Em3QRM9MettRLDRcH2JQi2l0Z1KlYD/vhal3gbkeSES0NuACXOlZBB0V/B0AseHZaklzWOA==", "dev": true, "license": "MIT", "dependencies": { @@ -12855,6 +13843,8 @@ }, "node_modules/postcss-merge-rules": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.3.tgz", + "integrity": "sha512-2eSas2p3voPxNfdI5sQrvIkMaeUHpVc3EezgVs18hz/wRTQAC9U99tp9j3W5Jx9/L3qHkEDvizEx/LdnmumIvQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12902,6 +13892,8 @@ }, "node_modules/postcss-minify-params": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", + "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12918,6 +13910,8 @@ }, "node_modules/postcss-minify-selectors": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.3.tgz", + "integrity": "sha512-SxTgUQSgBk6wEqzQZKEv1xQYIp9UBju6no9q+npohzSdhuSICQdkqmD1UMKkZWItS3olJSJMDDEY9WOJ5oGJew==", "dev": true, "license": "MIT", "dependencies": { @@ -13038,6 +14032,8 @@ }, "node_modules/postcss-normalize-unicode": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", + "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", "dev": true, "license": "MIT", "dependencies": { @@ -13096,6 +14092,8 @@ }, "node_modules/postcss-reduce-initial": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", + "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", "dev": true, "license": "MIT", "dependencies": { @@ -13125,6 +14123,8 @@ }, "node_modules/postcss-selector-parser": { "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -13152,6 +14152,8 @@ }, "node_modules/postcss-unique-selectors": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.2.tgz", + "integrity": "sha512-CjSam+7Vf8cflJQsHrMS0P2hmy9u0+n/P001kb5eAszLmhjMqrt/i5AqQuNFihhViwDvEAezqTmXqaYXL2ugMw==", "dev": true, "license": "MIT", "dependencies": { @@ -13207,6 +14209,8 @@ }, "node_modules/prettier-plugin-solidity": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.1.tgz", + "integrity": "sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==", "dev": true, "license": "MIT", "dependencies": { @@ -13222,8 +14226,9 @@ }, "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { "version": "0.18.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", + "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", + "dev": true }, "node_modules/prettier-plugin-solidity/node_modules/semver": { "version": "7.6.3", @@ -14798,6 +15803,8 @@ }, "node_modules/solhint/node_modules/ignore": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -14846,6 +15853,8 @@ }, "node_modules/solidity-coverage": { "version": "0.8.13", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.13.tgz", + "integrity": "sha512-RiBoI+kF94V3Rv0+iwOj3HQVSqNzA9qm/qDP1ZDXK5IX0Cvho1qiz8hAXTsAo6KOIUeP73jfscq0KlLqVxzGWA==", "dev": true, "license": "ISC", "peer": true, @@ -14986,8 +15995,9 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.20", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true }, "node_modules/split": { "version": "0.3.3", @@ -15271,6 +16281,8 @@ }, "node_modules/stylehacks": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.3.tgz", + "integrity": "sha512-4DqtecvI/Nd+2BCvW9YEF6lhBN5UM50IJ1R3rnEAhBwbCKf4VehRf+uqvnVArnBayjYD/WtT3g0G/HSRxWfTRg==", "dev": true, "license": "MIT", "dependencies": { @@ -15618,6 +16630,8 @@ }, "node_modules/tempy/node_modules/ignore": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -15927,6 +16941,8 @@ }, "node_modules/tsconfck": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.3.tgz", + "integrity": "sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==", "dev": true, "license": "MIT", "bin": { @@ -15968,26 +16984,26 @@ } }, "node_modules/turbo": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.2.1.tgz", - "integrity": "sha512-clZFkh6U6NpsLKBVZYRjlZjRTfju1Z5STqvFVaOGu5443uM75alJe1nCYH9pQ9YJoiOvXAqA2rDHWN5kLS9JMg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.1.1.tgz", + "integrity": "sha512-u9gUDkmR9dFS8b5kAYqIETK4OnzsS4l2ragJ0+soSMHh6VEeNHjTfSjk1tKxCqLyziCrPogadxP680J+v6yGHw==", "dev": true, "bin": { "turbo": "bin/turbo" }, "optionalDependencies": { - "turbo-darwin-64": "2.2.1", - "turbo-darwin-arm64": "2.2.1", - "turbo-linux-64": "2.2.1", - "turbo-linux-arm64": "2.2.1", - "turbo-windows-64": "2.2.1", - "turbo-windows-arm64": "2.2.1" + "turbo-darwin-64": "2.1.1", + "turbo-darwin-arm64": "2.1.1", + "turbo-linux-64": "2.1.1", + "turbo-linux-arm64": "2.1.1", + "turbo-windows-64": "2.1.1", + "turbo-windows-arm64": "2.1.1" } }, "node_modules/turbo-darwin-64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.2.1.tgz", - "integrity": "sha512-jltMdSQ+7rQDVaorjW729PCw6fwAn1MgZSdoa0Gil7GZCOF3SnR/ok0uJw6G5mdm6F5XM8ZTlz+mdGzBLuBRaA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.1.1.tgz", + "integrity": "sha512-aYNuJpZlCoi0Htd79fl/2DywpewGKijdXeOfg9KzNuPVKzSMYlAXuAlNGh0MKjiOcyqxQGL7Mq9LFhwA0VpDpQ==", "cpu": [ "x64" ], @@ -15998,7 +17014,9 @@ ] }, "node_modules/turbo-darwin-arm64": { - "version": "2.2.1", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.1.1.tgz", + "integrity": "sha512-tifJKD8yHY48rHXPMcM8o1jI/Jk2KCaXiNjTKvvy9Zsim61BZksNVLelIbrRoCGwAN6PUBZO2lGU5iL/TQJ5Pw==", "cpu": [ "arm64" ], @@ -16010,9 +17028,9 @@ ] }, "node_modules/turbo-linux-64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.2.1.tgz", - "integrity": "sha512-RasrjV+i2B90hoR8r6B2Btf2/ebNT5MJbhkpY0G1EN06E1IkjCKfAXj/1Dwmjy9+Zo0NC2r69L3HxRrtpar8jQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.1.1.tgz", + "integrity": "sha512-Js6d/bSQe9DuV9c7ITXYpsU/ADzFHABdz1UIHa7Oqjj9VOEbFeA9WpAn0c+mdJrVD+IXJFbbDZUjN7VYssmtcg==", "cpu": [ "x64" ], @@ -16023,9 +17041,9 @@ ] }, "node_modules/turbo-linux-arm64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.2.1.tgz", - "integrity": "sha512-LNkUUJuu1gNkhlo7Ky/zilXEiajLoGlWLiKT1XV5neEf+x1s+aU9Hzd/+HhSVMiyI8l7z6zLbrM1a6+v4co/SQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.1.1.tgz", + "integrity": "sha512-LidzTCq0yvQ+N8w8Qub9FmhQ/mmEIeoqFi7DSupekEV2EjvE9jw/zYc9Pk67X+g7dHVfgOnvVzmrjChdxpFePw==", "cpu": [ "arm64" ], @@ -16036,9 +17054,9 @@ ] }, "node_modules/turbo-windows-64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.2.1.tgz", - "integrity": "sha512-Mn5tlFrLzlQ6tW6wTWNlyT1osXuDUg0VT1VAjRpmRXlK2Zi3oKVVG0rs0nkkq4rmuheryD1xyuGPN9nFKbAn/A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.1.1.tgz", + "integrity": "sha512-GKc9ZywKwy4xLDhwXd6H07yzl0TB52HjXMrFLyHGhCVnf/w0oq4sLJv2sjbvuarPjsyx4xnCBJ3m3oyL2XmFtA==", "cpu": [ "x64" ], @@ -16049,9 +17067,9 @@ ] }, "node_modules/turbo-windows-arm64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.2.1.tgz", - "integrity": "sha512-bvYOJ3SMN00yiem+uAqwRMbUMau/KiMzJYxnD0YkFo6INc08z8gZi5g0GLZAR7g/L3JegktX3UQW2cJvryjvLg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.1.1.tgz", + "integrity": "sha512-oFKkMj11KKUv3xSK9/fhAEQTxLUp1Ol1EOktwc32+SFtEU0uls7kosAz0b+qe8k3pJGEMFdDPdqoEjyJidbxtQ==", "cpu": [ "arm64" ], @@ -16069,322 +17087,670 @@ "version": "0.15.1", "license": "Unlicense" }, - "node_modules/type": { - "version": "2.7.3", - "license": "ISC" + "node_modules/type": { + "version": "2.7.3", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typechain": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT" }, - "node_modules/type-check": { - "version": "0.4.0", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.17" } }, - "node_modules/type-detect": { - "version": "4.1.0", + "node_modules/typical": { + "version": "4.0.0", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node_modules/ufo": { + "version": "1.5.4", + "dev": true, + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/type-is": { - "version": "1.6.18", + "node_modules/ultron": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, - "engines": { - "node": ">= 0.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typechain": { - "version": "8.3.2", + "node_modules/unbuild": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" + "@rollup/plugin-alias": "^5.0.0", + "@rollup/plugin-commonjs": "^25.0.4", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.2.1", + "@rollup/plugin-replace": "^5.0.2", + "@rollup/pluginutils": "^5.0.3", + "chalk": "^5.3.0", + "citty": "^0.1.2", + "consola": "^3.2.3", + "defu": "^6.1.2", + "esbuild": "^0.19.2", + "globby": "^13.2.2", + "hookable": "^5.5.3", + "jiti": "^1.19.3", + "magic-string": "^0.30.3", + "mkdist": "^1.3.0", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "pretty-bytes": "^6.1.1", + "rollup": "^3.28.1", + "rollup-plugin-dts": "^6.0.0", + "scule": "^1.0.0", + "untyped": "^1.4.0" }, "bin": { - "typechain": "dist/cli/cli.js" + "unbuild": "dist/cli.mjs" }, "peerDependencies": { - "typescript": ">=4.3.0" + "typescript": "^5.1.6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/unbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", + "node_modules/unbuild/node_modules/chalk": { + "version": "5.3.0", "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/unbuild/node_modules/esbuild": { + "version": "0.19.12", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", + "node_modules/unbuild/node_modules/globby": { + "version": "13.2.2", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": "*" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typechain/node_modules/jsonfile": { + "node_modules/unbuild/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/unbuild/node_modules/slash": { "version": "4.0.0", "dev": true, "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/undici": { + "version": "5.28.4", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@fastify/busboy": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=14.0" } }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/unique-string": { + "version": "2.0.0", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "crypto-random-string": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "dev": true, + "node_modules/unpipe": { + "version": "1.0.0", "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">= 0.8" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", + "node_modules/untyped": { + "version": "1.4.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "@babel/core": "^7.23.7", + "@babel/standalone": "^7.23.8", + "@babel/types": "^7.23.6", + "defu": "^6.1.4", + "jiti": "^1.21.0", + "mri": "^1.2.0", + "scule": "^1.2.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "untyped": "dist/cli.mjs" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "dev": true, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, - "engines": { - "node": ">= 0.4" + "bin": { + "update-browserslist-db": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", + "node_modules/update-check": { + "version": "1.5.4", "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" } }, - "node_modules/typed-array-length": { - "version": "1.0.6", + "node_modules/upper-case": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/upper-case-first": { + "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "upper-case": "^1.1.1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.14.2" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "dev": true, + "node_modules/utf8": { + "version": "3.0.0", "license": "MIT" }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", + "node_modules/util": { + "version": "0.12.5", "license": "MIT", "dependencies": { - "is-typedarray": "^1.0.0" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "node_modules/typescript": { - "version": "5.5.4", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", "engines": { - "node": ">=14.17" + "node": ">= 0.4.0" } }, - "node_modules/typical": { - "version": "4.0.0", + "node_modules/uuid": { + "version": "8.3.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/ufo": { - "version": "1.5.4", + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", "dev": true, "license": "MIT" }, - "node_modules/uglify-js": { - "version": "3.19.3", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "dev": true, + "license": "ISC", "engines": { - "node": ">=0.8.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ultron": { - "version": "1.1.1", + "node_modules/varint": { + "version": "5.0.2", "license": "MIT" }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, + "node_modules/vary": { + "version": "1.1.2", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.8" } }, - "node_modules/unbuild": { - "version": "2.0.0", - "dev": true, + "node_modules/verror": { + "version": "1.10.0", + "engines": [ + "node >=0.6.0" + ], "license": "MIT", "dependencies": { - "@rollup/plugin-alias": "^5.0.0", - "@rollup/plugin-commonjs": "^25.0.4", - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.2.1", - "@rollup/plugin-replace": "^5.0.2", - "@rollup/pluginutils": "^5.0.3", - "chalk": "^5.3.0", - "citty": "^0.1.2", - "consola": "^3.2.3", - "defu": "^6.1.2", - "esbuild": "^0.19.2", - "globby": "^13.2.2", - "hookable": "^5.5.3", - "jiti": "^1.19.3", - "magic-string": "^0.30.3", - "mkdist": "^1.3.0", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "pretty-bytes": "^6.1.1", - "rollup": "^3.28.1", - "rollup-plugin-dts": "^6.0.0", - "scule": "^1.0.0", - "untyped": "^1.4.0" - }, - "bin": { - "unbuild": "dist/cli.mjs" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/viem": { + "version": "2.21.32", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.11.0", + "@noble/curves": "1.6.0", + "@noble/hashes": "1.5.0", + "@scure/bip32": "1.5.0", + "@scure/bip39": "1.4.0", + "abitype": "1.0.6", + "isows": "1.0.6", + "webauthn-p256": "0.0.10", + "ws": "8.18.0" }, "peerDependencies": { - "typescript": "^5.1.6" + "typescript": ">=5.0.4" }, "peerDependenciesMeta": { "typescript": { @@ -16392,2204 +17758,2346 @@ } } }, - "node_modules/unbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "cpu": [ - "arm64" - ], + "node_modules/viem/node_modules/@adraffy/ens-normalize": { + "version": "1.11.0", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/unbuild/node_modules/chalk": { - "version": "5.3.0", + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.6.0", "dev": true, "license": "MIT", + "dependencies": { + "@noble/hashes": "1.5.0" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/unbuild/node_modules/esbuild": { - "version": "0.19.12", + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.5.0", "dev": true, - "hasInstallScript": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, "engines": { - "node": ">=12" + "node": "^14.21.3 || >=16" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/unbuild/node_modules/globby": { - "version": "13.2.2", + "node_modules/viem/node_modules/@scure/bip32": { + "version": "1.5.0", "dev": true, "license": "MIT", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@noble/curves": "~1.6.0", + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.7" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/unbuild/node_modules/ignore": { - "version": "5.3.2", + "node_modules/viem/node_modules/@scure/bip39": { + "version": "1.4.0", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.8" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/unbuild/node_modules/slash": { - "version": "4.0.0", + "node_modules/viem/node_modules/ws": { + "version": "8.18.0", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/undici": { - "version": "5.28.4", + "node_modules/vite": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz", + "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@fastify/busboy": "^2.0.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.41", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">=14.0" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/undici-types": { - "version": "6.19.8", - "license": "MIT" - }, - "node_modules/unique-string": { - "version": "2.0.0", + "node_modules/vite-plugin-checker": { + "version": "0.5.6", "dev": true, "license": "MIT", "dependencies": { - "crypto-random-string": "^2.0.0" + "@babel/code-frame": "^7.12.13", + "ansi-escapes": "^4.3.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "commander": "^8.0.0", + "fast-glob": "^3.2.7", + "fs-extra": "^11.1.0", + "lodash.debounce": "^4.0.8", + "lodash.pick": "^4.4.0", + "npm-run-path": "^4.0.1", + "strip-ansi": "^6.0.0", + "tiny-invariant": "^1.1.0", + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2" }, "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node": ">=14.16" + }, + "peerDependencies": { + "eslint": ">=7", + "meow": "^9.0.0", + "optionator": "^0.9.1", + "stylelint": ">=13", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*", + "vue-tsc": "*" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } } }, - "node_modules/untyped": { - "version": "1.4.2", + "node_modules/vite-plugin-checker/node_modules/@babel/code-frame": { + "version": "7.24.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.23.7", - "@babel/standalone": "^7.23.8", - "@babel/types": "^7.23.6", - "defu": "^6.1.4", - "jiti": "^1.21.0", - "mri": "^1.2.0", - "scule": "^1.2.0" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, - "bin": { - "untyped": "dist/cli.mjs" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/vite-plugin-checker/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "color-convert": "^2.0.1" }, - "bin": { - "update-browserslist-db": "cli.js" + "engines": { + "node": ">=8" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/update-check": { - "version": "1.5.4", + "node_modules/vite-plugin-checker/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/upper-case": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/upper-case-first": { - "version": "1.1.2", + "node_modules/vite-plugin-checker/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "upper-case": "^1.1.1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.3.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/util": { - "version": "0.12.5", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "node": ">=7.0.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", + "node_modules/vite-plugin-checker/node_modules/color-name": { + "version": "1.1.4", + "dev": true, "license": "MIT" }, - "node_modules/utils-merge": { - "version": "1.0.1", + "node_modules/vite-plugin-checker/node_modules/commander": { + "version": "8.3.0", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4.0" + "node": ">= 12" } }, - "node_modules/uuid": { - "version": "8.3.2", + "node_modules/vite-plugin-checker/node_modules/fs-extra": { + "version": "11.2.0", "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "dev": true, - "license": "ISC", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=14.14" } }, - "node_modules/varint": { - "version": "5.0.2", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", + "node_modules/vite-plugin-checker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/verror": { - "version": "1.10.0", - "engines": [ - "node >=0.6.0" - ], + "node_modules/vite-plugin-checker/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/viem": { - "version": "2.21.32", + "node_modules/vite-tsconfig-paths": { + "version": "4.3.2", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.11.0", - "@noble/curves": "1.6.0", - "@noble/hashes": "1.5.0", - "@scure/bip32": "1.5.0", - "@scure/bip39": "1.4.0", - "abitype": "1.0.6", - "isows": "1.0.6", - "webauthn-p256": "0.0.10", - "ws": "8.18.0" + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.3" }, "peerDependencies": { - "typescript": ">=5.0.4" + "vite": "*" }, "peerDependenciesMeta": { - "typescript": { + "vite": { "optional": true } } }, - "node_modules/viem/node_modules/@adraffy/ens-normalize": { - "version": "1.11.0", - "dev": true, - "license": "MIT" - }, - "node_modules/viem/node_modules/@noble/curves": { - "version": "1.6.0", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vite/node_modules/rollup": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", + "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@noble/hashes": "1.5.0" + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", + "fsevents": "~2.3.2" } }, - "node_modules/viem/node_modules/@noble/hashes": { - "version": "1.5.0", + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", "dev": true, "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=8.0.0 || >=10.0.0" } }, - "node_modules/viem/node_modules/@scure/bip32": { - "version": "1.5.0", + "node_modules/vscode-languageclient": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "@noble/curves": "~1.6.0", - "@noble/hashes": "~1.5.0", - "@scure/base": "~1.1.7" + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "vscode": "^1.52.0" } }, - "node_modules/viem/node_modules/@scure/bip39": { - "version": "1.4.0", + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "license": "MIT", "dependencies": { - "@noble/hashes": "~1.5.0", - "@scure/base": "~1.1.8" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/viem/node_modules/ws": { - "version": "8.18.0", + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "engines": { + "node": "*" + } + }, + "node_modules/vscode-languageclient/node_modules/semver": { + "version": "7.6.3", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/vite": { - "version": "5.4.3", + "node_modules/vscode-languageserver": { + "version": "7.0.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "vscode-languageserver-protocol": "3.16.0" }, "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "installServerIntoExtension": "bin/installServerIntoExtension" } }, - "node_modules/vite-plugin-checker": { - "version": "0.5.6", + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "ansi-escapes": "^4.3.0", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "commander": "^8.0.0", - "fast-glob": "^3.2.7", - "fs-extra": "^11.1.0", - "lodash.debounce": "^4.0.8", - "lodash.pick": "^4.4.0", - "npm-run-path": "^4.0.1", - "strip-ansi": "^6.0.0", - "tiny-invariant": "^1.1.0", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2" - }, - "engines": { - "node": ">=14.16" - }, - "peerDependencies": { - "eslint": ">=7", - "meow": "^9.0.0", - "optionator": "^0.9.1", - "stylelint": ">=13", - "typescript": "*", - "vite": ">=2.0.0", - "vls": "*", - "vti": "*", - "vue-tsc": "*" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "meow": { - "optional": true - }, - "optionator": { - "optional": true - }, - "stylelint": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vls": { - "optional": true - }, - "vti": { - "optional": true - }, - "vue-tsc": { - "optional": true - } + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" } }, - "node_modules/vite-plugin-checker/node_modules/@babel/code-frame": { - "version": "7.24.7", + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" + "defaults": "^1.0.3" } }, - "node_modules/vite-plugin-checker/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/web-streams-polyfill": { + "version": "3.3.3", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 8" } }, - "node_modules/vite-plugin-checker/node_modules/chalk": { - "version": "4.1.2", + "node_modules/web3": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "web3-bzz": "1.10.4", + "web3-core": "1.10.4", + "web3-eth": "1.10.4", + "web3-eth-personal": "1.10.4", + "web3-net": "1.10.4", + "web3-shh": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8.0.0" } }, - "node_modules/vite-plugin-checker/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/web3-bzz": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { - "color-name": "~1.1.4" + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" }, "engines": { - "node": ">=7.0.0" + "node": ">=8.0.0" } }, - "node_modules/vite-plugin-checker/node_modules/color-name": { - "version": "1.1.4", + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.55", "dev": true, "license": "MIT" }, - "node_modules/vite-plugin-checker/node_modules/commander": { - "version": "8.3.0", + "node_modules/web3-core": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", + "dependencies": { + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-requestmanager": "1.10.4", + "web3-utils": "1.10.4" + }, "engines": { - "node": ">= 12" + "node": ">=8.0.0" } }, - "node_modules/vite-plugin-checker/node_modules/fs-extra": { - "version": "11.2.0", + "node_modules/web3-core-helpers": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "web3-eth-iban": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { - "node": ">=14.14" + "node": ">=8.0.0" } }, - "node_modules/vite-plugin-checker/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/web3-core-method": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", + "dependencies": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.4", + "web3-core-promievent": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-utils": "1.10.4" + }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/vite-plugin-checker/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/web3-core-promievent": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "has-flag": "^4.0.0" + "eventemitter3": "4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/vite-tsconfig-paths": { - "version": "4.3.2", + "node_modules/web3-core-requestmanager": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "tsconfck": "^3.0.3" - }, - "peerDependencies": { - "vite": "*" + "util": "^0.12.5", + "web3-core-helpers": "1.10.4", + "web3-providers-http": "1.10.4", + "web3-providers-ipc": "1.10.4", + "web3-providers-ws": "1.10.4" }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } + "engines": { + "node": ">=8.0.0" } }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "cpu": [ - "arm64" - ], + "node_modules/web3-core-subscriptions": { + "version": "1.10.4", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, + "license": "LGPL-3.0", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.4" + }, "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.21.5", + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "bin": { - "esbuild": "bin/esbuild" + "license": "MIT" + }, + "node_modules/web3-eth": { + "version": "1.10.4", + "dev": true, + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-eth-abi": "1.10.4", + "web3-eth-accounts": "1.10.4", + "web3-eth-contract": "1.10.4", + "web3-eth-ens": "1.10.4", + "web3-eth-iban": "1.10.4", + "web3-eth-personal": "1.10.4", + "web3-net": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "node": ">=8.0.0" } }, - "node_modules/vite/node_modules/rollup": { - "version": "4.21.2", + "node_modules/web3-eth-abi": { + "version": "1.10.4", "dev": true, - "license": "MIT", - "peer": true, + "license": "LGPL-3.0", "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.4" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts": { + "version": "1.10.4", + "dev": true, + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/common": "2.6.5", + "@ethereumjs/tx": "3.5.2", + "@ethereumjs/util": "^8.1.0", + "eth-lib": "0.2.8", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-utils": "1.10.4" }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.2", - "@rollup/rollup-android-arm64": "4.21.2", - "@rollup/rollup-darwin-arm64": "4.21.2", - "@rollup/rollup-darwin-x64": "4.21.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", - "@rollup/rollup-linux-arm-musleabihf": "4.21.2", - "@rollup/rollup-linux-arm64-gnu": "4.21.2", - "@rollup/rollup-linux-arm64-musl": "4.21.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", - "@rollup/rollup-linux-riscv64-gnu": "4.21.2", - "@rollup/rollup-linux-s390x-gnu": "4.21.2", - "@rollup/rollup-linux-x64-gnu": "4.21.2", - "@rollup/rollup-linux-x64-musl": "4.21.2", - "@rollup/rollup-win32-arm64-msvc": "4.21.2", - "@rollup/rollup-win32-ia32-msvc": "4.21.2", - "@rollup/rollup-win32-x64-msvc": "4.21.2", - "fsevents": "~2.3.2" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", + "node_modules/web3-eth-accounts/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", "dev": true, "license": "MIT", - "engines": { - "node": ">=8.0.0 || >=10.0.0" + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" } }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "9.0.1", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/web3-eth-contract": { + "version": "1.10.4", + "dev": true, + "license": "LGPL-3.0", "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-promievent": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-eth-abi": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { - "vscode": "^1.52.0" + "node": ">=8.0.0" } }, - "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/web3-eth-ens": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-promievent": "1.10.4", + "web3-eth-abi": "1.10.4", + "web3-eth-contract": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/web3-eth-iban": { + "version": "1.10.4", "dev": true, - "license": "ISC", + "license": "LGPL-3.0", "dependencies": { - "brace-expansion": "^1.1.7" + "bn.js": "^5.2.1", + "web3-utils": "1.10.4" }, "engines": { - "node": "*" + "node": ">=8.0.0" } }, - "node_modules/vscode-languageclient/node_modules/semver": { - "version": "7.6.3", + "node_modules/web3-eth-personal": { + "version": "1.10.4", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "LGPL-3.0", + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-net": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/vscode-languageserver": { - "version": "7.0.0", + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.55", + "dev": true, + "license": "MIT" + }, + "node_modules/web3-net": { + "version": "1.10.4", "dev": true, + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "1.10.4", + "web3-core-method": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-provider-engine": { + "version": "16.0.3", "license": "MIT", "dependencies": { - "vscode-languageserver-protocol": "3.16.0" + "@ethereumjs/tx": "^3.3.0", + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^4.4.2", + "eth-json-rpc-filters": "^4.2.1", + "eth-json-rpc-infura": "^5.1.0", + "eth-json-rpc-middleware": "^6.0.0", + "eth-rpc-errors": "^3.0.0", + "eth-sig-util": "^1.4.2", + "ethereumjs-block": "^1.2.2", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "dev": true, + "node_modules/web3-provider-engine/node_modules/async": { + "version": "2.6.4", "license": "MIT", "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "lodash": "^4.17.14" } }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "dev": true, + "node_modules/web3-provider-engine/node_modules/bn.js": { + "version": "4.12.0", "license": "MIT" }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "dev": true, - "license": "MIT" + "node_modules/web3-provider-engine/node_modules/clone": { + "version": "2.1.2", + "license": "MIT", + "engines": { + "node": ">=0.8" + } }, - "node_modules/vscode-uri": { - "version": "3.0.8", - "dev": true, + "node_modules/web3-provider-engine/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/web3-provider-engine/node_modules/isarray": { + "version": "1.0.0", "license": "MIT" }, - "node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, + "node_modules/web3-provider-engine/node_modules/readable-stream": { + "version": "2.3.8", "license": "MIT", "dependencies": { - "defaults": "^1.0.3" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "dev": true, + "node_modules/web3-provider-engine/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/web3-provider-engine/node_modules/string_decoder": { + "version": "1.1.1", "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/web3": { - "version": "1.10.4", - "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", + "node_modules/web3-provider-engine/node_modules/ws": { + "version": "5.2.4", + "license": "MIT", "dependencies": { - "web3-bzz": "1.10.4", - "web3-core": "1.10.4", - "web3-eth": "1.10.4", - "web3-eth-personal": "1.10.4", - "web3-net": "1.10.4", - "web3-shh": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" + "async-limiter": "~1.0.0" } }, - "node_modules/web3-bzz": { + "node_modules/web3-providers-http": { "version": "1.10.4", "dev": true, - "hasInstallScript": true, "license": "LGPL-3.0", "dependencies": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" + "abortcontroller-polyfill": "^1.7.5", + "cross-fetch": "^4.0.0", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.55", - "dev": true, - "license": "MIT" - }, - "node_modules/web3-core": { - "version": "1.10.4", + "node_modules/web3-providers-http/node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dev": true, - "license": "LGPL-3.0", "dependencies": { - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-requestmanager": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" + "node-fetch": "^2.6.12" } }, - "node_modules/web3-core-helpers": { + "node_modules/web3-providers-ipc": { "version": "1.10.4", "dev": true, "license": "LGPL-3.0", "dependencies": { - "web3-eth-iban": "1.10.4", - "web3-utils": "1.10.4" + "oboe": "2.1.5", + "web3-core-helpers": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-core-method": { + "node_modules/web3-providers-ws": { "version": "1.10.4", "dev": true, "license": "LGPL-3.0", "dependencies": { - "@ethersproject/transactions": "^5.6.2", + "eventemitter3": "4.0.4", "web3-core-helpers": "1.10.4", - "web3-core-promievent": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-utils": "1.10.4" + "websocket": "^1.0.32" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-core-promievent": { + "node_modules/web3-shh": { "version": "1.10.4", "dev": true, + "hasInstallScript": true, "license": "LGPL-3.0", "dependencies": { - "eventemitter3": "4.0.4" + "web3-core": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-net": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-core-requestmanager": { + "node_modules/web3-utils": { "version": "1.10.4", "dev": true, "license": "LGPL-3.0", "dependencies": { - "util": "^0.12.5", - "web3-core-helpers": "1.10.4", - "web3-providers-http": "1.10.4", - "web3-providers-ipc": "1.10.4", - "web3-providers-ws": "1.10.4" + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-core-subscriptions": { - "version": "1.10.4", + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.4.2", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.4" + "@noble/hashes": "1.4.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.4.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.55", + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.2.1", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } }, - "node_modules/web3-eth": { - "version": "1.10.4", + "node_modules/webauthn-p256": { + "version": "0.0.10", "dev": true, - "license": "LGPL-3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", "dependencies": { - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-eth-abi": "1.10.4", - "web3-eth-accounts": "1.10.4", - "web3-eth-contract": "1.10.4", - "web3-eth-ens": "1.10.4", - "web3-eth-iban": "1.10.4", - "web3-eth-personal": "1.10.4", - "web3-net": "1.10.4", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" + "@noble/curves": "^1.4.0", + "@noble/hashes": "^1.4.0" } }, - "node_modules/web3-eth-abi": { - "version": "1.10.4", + "node_modules/webauthn-p256/node_modules/@noble/curves": { + "version": "1.6.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.4" + "@noble/hashes": "1.5.0" }, "engines": { - "node": ">=8.0.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/web3-eth-accounts": { - "version": "1.10.4", + "node_modules/webauthn-p256/node_modules/@noble/hashes": { + "version": "1.5.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/webpod": { + "version": "0.0.2", + "dev": true, + "license": "MIT", + "bin": { + "webpod": "dist/index.js" + } + }, + "node_modules/websocket": { + "version": "1.0.35", + "license": "Apache-2.0", "dependencies": { - "@ethereumjs/common": "2.6.5", - "@ethereumjs/tx": "3.5.2", - "@ethereumjs/util": "^8.1.0", - "eth-lib": "0.2.8", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-utils": "1.10.4" + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" }, "engines": { - "node": ">=8.0.0" + "node": ">=4.0.0" } }, - "node_modules/web3-eth-accounts/node_modules/bn.js": { - "version": "4.12.0", - "dev": true, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", "license": "MIT" }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", + "node_modules/whatwg-fetch": { + "version": "2.0.4", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "9.0.1", + "node_modules/which-module": { + "version": "2.0.1", "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.15", "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/web3-eth-contract": { - "version": "1.10.4", + "node_modules/widest-line": { + "version": "3.1.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-promievent": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-eth-abi": "1.10.4", - "web3-utils": "1.10.4" + "string-width": "^4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/web3-eth-ens": { - "version": "1.10.4", + "node_modules/wordwrap": { + "version": "1.0.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT" + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-promievent": "1.10.4", - "web3-eth-abi": "1.10.4", - "web3-eth-contract": "1.10.4", - "web3-utils": "1.10.4" + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-eth-iban": { - "version": "1.10.4", + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.4" - }, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-eth-personal": { - "version": "1.10.4", + "node_modules/workerpool": { + "version": "6.5.1", "dev": true, - "license": "LGPL-3.0", + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-net": "1.10.4", - "web3-utils": "1.10.4" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.55", - "dev": true, - "license": "MIT" - }, - "node_modules/web3-net": { - "version": "1.10.4", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "web3-core": "1.10.4", - "web3-core-method": "1.10.4", - "web3-utils": "1.10.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/web3-provider-engine": { - "version": "16.0.3", + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { - "@ethereumjs/tx": "^3.3.0", - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^4.4.2", - "eth-json-rpc-filters": "^4.2.1", - "eth-json-rpc-infura": "^5.1.0", - "eth-json-rpc-middleware": "^6.0.0", - "eth-rpc-errors": "^3.0.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12.0.0" + "node": ">=7.0.0" } }, - "node_modules/web3-provider-engine/node_modules/async": { - "version": "2.6.4", + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "3.3.3", "license": "MIT", "dependencies": { - "lodash": "^4.17.14" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, - "node_modules/web3-provider-engine/node_modules/bn.js": { - "version": "4.12.0", + "node_modules/ws/node_modules/safe-buffer": { + "version": "5.1.2", "license": "MIT" }, - "node_modules/web3-provider-engine/node_modules/clone": { - "version": "2.1.2", + "node_modules/xhr": { + "version": "2.6.0", "license": "MIT", - "engines": { - "node": ">=0.8" + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" } }, - "node_modules/web3-provider-engine/node_modules/cross-fetch": { - "version": "2.2.6", + "node_modules/xhr-request": { + "version": "1.1.0", "license": "MIT", "dependencies": { - "node-fetch": "^2.6.7", - "whatwg-fetch": "^2.0.4" + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" } }, - "node_modules/web3-provider-engine/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "license": "MIT", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "xhr-request": "^1.1.0" } }, - "node_modules/web3-provider-engine/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/web3-provider-engine/node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/xtend": { + "version": "4.0.2", "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": ">=0.4" } }, - "node_modules/web3-provider-engine/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" + "node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" }, - "node_modules/web3-provider-engine/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/yaeti": { + "version": "0.0.6", "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=0.10.32" } }, - "node_modules/web3-provider-engine/node_modules/ws": { - "version": "5.2.4", + "node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.5.1", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "dev": true, "license": "MIT", "dependencies": { - "async-limiter": "~1.0.0" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" } }, - "node_modules/web3-providers-http": { - "version": "1.10.4", + "node_modules/yargs-parser": { + "version": "20.2.9", "dev": true, - "license": "LGPL-3.0", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "abortcontroller-polyfill": "^1.7.5", - "cross-fetch": "^4.0.0", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.4" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/web3-providers-ipc": { - "version": "1.10.4", + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.10.4" + "license": "MIT", + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=6" } }, - "node_modules/web3-providers-ws": { - "version": "1.10.4", + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.4", - "websocket": "^1.0.32" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-shh": { - "version": "1.10.4", + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "web3-core": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-net": "1.10.4" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-utils": { - "version": "1.10.4", + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "@ethereumjs/util": "^8.1.0", - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereum-cryptography": "^2.1.2", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.4.2", + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "@noble/hashes": "1.4.0" + "p-limit": "^2.2.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=8" } }, - "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.4.0", + "node_modules/yargs/node_modules/p-try": { + "version": "2.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=6" } }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.2.1", + "node_modules/yargs/node_modules/path-exists": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "engines": { + "node": ">=8" } }, - "node_modules/webauthn-p256": { - "version": "0.0.10", + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", + "license": "ISC", "dependencies": { - "@noble/curves": "^1.4.0", - "@noble/hashes": "^1.4.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/webauthn-p256/node_modules/@noble/curves": { - "version": "1.6.0", + "node_modules/yn": { + "version": "3.1.1", "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.5.0" - }, "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=6" } }, - "node_modules/webauthn-p256/node_modules/@noble/hashes": { - "version": "1.5.0", + "node_modules/yocto-queue": { + "version": "0.1.0", "dev": true, "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" + "node": ">=10" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/webpod": { - "version": "0.0.2", + "node_modules/zksync-ethers": { + "version": "5.9.2", "dev": true, "license": "MIT", - "bin": { - "webpod": "dist/index.js" - } - }, - "node_modules/websocket": { - "version": "1.0.35", - "license": "Apache-2.0", "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.63", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" + "ethers": "~5.7.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "ethers": "~5.7.0" } }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", + "node_modules/zksync-ethers/node_modules/ethers": { + "version": "5.7.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "ms": "2.0.0" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/whatwg-fetch": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", + "node_modules/zod": { + "version": "3.23.8", + "dev": true, "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", + "node_modules/zx": { + "version": "7.2.3", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "isexe": "^2.0.0" + "@types/fs-extra": "^11.0.1", + "@types/minimist": "^1.2.2", + "@types/node": "^18.16.3", + "@types/ps-tree": "^1.1.2", + "@types/which": "^3.0.0", + "chalk": "^5.2.0", + "fs-extra": "^11.1.1", + "fx": "*", + "globby": "^13.1.4", + "minimist": "^1.2.8", + "node-fetch": "3.3.1", + "ps-tree": "^1.2.0", + "webpod": "^0", + "which": "^3.0.0", + "yaml": "^2.2.2" }, "bin": { - "node-which": "bin/node-which" + "zx": "build/cli.js" }, "engines": { - "node": ">= 8" + "node": ">= 16.0.0" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", + "node_modules/zx/node_modules/@types/node": { + "version": "18.19.48", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.48.tgz", + "integrity": "sha512-7WevbG4ekUcRQSZzOwxWgi5dZmTak7FaxXDoW7xVxPBmKx1rTzfmRLkeCgJzcbBnOV2dkhAPc8cCeT6agocpjg==", "dev": true, "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "undici-types": "~5.26.4" } }, - "node_modules/which-module": { - "version": "2.0.1", + "node_modules/zx/node_modules/chalk": { + "version": "5.3.0", "dev": true, - "license": "ISC" - }, - "node_modules/which-typed-array": { - "version": "1.1.15", "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/widest-line": { - "version": "3.1.0", + "node_modules/zx/node_modules/data-uri-to-buffer": { + "version": "4.0.1", "dev": true, "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 12" } }, - "node_modules/word-wrap": { - "version": "1.2.5", + "node_modules/zx/node_modules/fs-extra": { + "version": "11.2.0", + "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.14" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", + "node_modules/zx/node_modules/globby": { + "version": "13.2.2", "dev": true, "license": "MIT", "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", + "node_modules/zx/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/workerpool": { - "version": "6.5.1", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", + "node_modules/zx/node_modules/node-fetch": { + "version": "3.3.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/zx/node_modules/slash": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/zx/node_modules/undici-types": { + "version": "5.26.5", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/zx/node_modules/which": { + "version": "3.0.1", + "dev": true, + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">=7.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "packages/lsp-smart-contracts": { + "name": "@lukso/lsp-smart-contracts", + "version": "0.15.0", + "license": "Apache-2.0", + "dependencies": { + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp10-contracts": "~0.15.0", + "@lukso/lsp12-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp16-contracts": "~0.15.0", + "@lukso/lsp17-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp1delegate-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp23-contracts": "~0.15.0", + "@lukso/lsp25-contracts": "~0.15.0", + "@lukso/lsp26-contracts": "~0.15.0", + "@lukso/lsp3-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", + "@lukso/lsp5-contracts": "~0.15.0", + "@lukso/lsp6-contracts": "~0.15.0", + "@lukso/lsp7-contracts": "~0.15.0", + "@lukso/lsp8-contracts": "~0.15.0", + "@lukso/lsp9-contracts": "~0.15.0", + "@lukso/universalprofile-contracts": "~0.15.0" + } }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" + "packages/lsp0-contracts": { + "name": "@lukso/lsp0-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp0-contracts/-/lsp0-contracts-0.15.0.tgz", + "integrity": "sha512-dKQu9juDJNxKdJMHkF3wOfjC/VZZW+RonQ5hSw9kBhLAhyFd6SVYU3VSUOYG3G3bLDAE9We+DeONc0N/j4zjIQ==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" + } }, - "node_modules/ws": { - "version": "3.3.3", - "license": "MIT", + "packages/lsp1-contracts": { + "name": "@lukso/lsp1-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", + "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "@lukso/lsp2-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/ws/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" + "packages/lsp10-contracts": { + "name": "@lukso/lsp10-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp10-contracts/-/lsp10-contracts-0.15.0.tgz", + "integrity": "sha512-LXyOOCD43sHtQxyp98utUwxaU+r2MA8TvqXBibxjHxD20/L7vYGSxHqDX493/zUtfCUIMUELuj6a1+NGscbBTw==", + "dependencies": { + "@erc725/smart-contracts": "^6.0.0", + "@lukso/lsp2-contracts": "~0.15.0" + } }, - "node_modules/xhr": { - "version": "2.6.0", - "license": "MIT", + "packages/lsp10-contracts/node_modules/@erc725/smart-contracts": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-6.0.0.tgz", + "integrity": "sha512-6okutGGL9xbg/MSgAof2FU1UcSNE/z3p9TORlROVGaM3gi1A6FQQ7fDqtBYkPtvHureX8yS9gP7xPt3PRbP43Q==", "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts-upgradeable": "^4.9.3", + "solidity-bytes-utils": "0.8.0" } }, - "node_modules/xhr-request": { - "version": "1.1.0", - "license": "MIT", + "packages/lsp-smart-contracts/node_modules/@lukso/lsp12-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp12-contracts/-/lsp12-contracts-0.15.0.tgz", + "integrity": "sha512-fSq8syWvRkHb0hOtVubJ3YyqLoZ0IDGT+FC3W79nKCP5OYpZt1VwWwUsqQlBUImrrtTaP9Vdin9aNGD9umtCqA==", "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" + "@lukso/lsp2-contracts": "~0.15.0" + } + }, + "packages/lsp14-contracts": { + "name": "@lukso/lsp14-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", + "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0" + } + }, + "packages/lsp16-contracts": { + "name": "@lukso/lsp16-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp16-contracts/-/lsp16-contracts-0.15.0.tgz", + "integrity": "sha512-zt58Uq4nWoGRMlSvZYYKM+YWmqXaWqDymiB9+v42kgNFvdpaK2bnt6zhoZOCd+D5YyQ5X7koooxR05amyxLe2w==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.2", + "@openzeppelin/contracts-upgradeable": "^4.9.2" + } + }, + "packages/lsp17-contracts": { + "name": "@lukso/lsp17-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17-contracts/-/lsp17-contracts-0.15.0.tgz", + "integrity": "sha512-lEMayqU5SR2ysgs08cqzsW50DrJrTtsjoIyqvctaIMZF9DSEHRTn1yh8ePzNNcNr3tQcDmaxwtPAuYD469tXHQ==", + "dependencies": { + "@account-abstraction/contracts": "^0.6.0", + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp6-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp17contractextension-contracts": { + "name": "@lukso/lsp17contractextension-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", + "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "license": "MIT", + "packages/lsp1delegate-contracts": { + "name": "@lukso/lsp1delegate-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp1delegate-contracts/-/lsp1delegate-contracts-0.15.0.tgz", + "integrity": "sha512-FuBzBsJZdbtHBF1q6IsCpd94xD/Ce7kHrZASWjSWIU6lzqEWpJcItZ95EkRPmJjAqYlkwzz3ry0wfY8nAIbJrA==", "dependencies": { - "xhr-request": "^1.1.0" + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp10-contracts": "~0.15.0", + "@lukso/lsp5-contracts": "~0.15.0", + "@lukso/lsp7-contracts": "~0.15.0", + "@lukso/lsp8-contracts": "~0.15.0", + "@lukso/lsp9-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" + "packages/lsp2-contracts": { + "name": "@lukso/lsp2-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", + "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/y18n": { - "version": "4.0.3", - "dev": true, - "license": "ISC" + "packages/lsp20-contracts": { + "name": "@lukso/lsp20-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", + "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" }, - "node_modules/yaeti": { - "version": "0.0.6", - "license": "MIT", - "engines": { - "node": ">=0.10.32" + "packages/lsp23-contracts": { + "name": "@lukso/lsp23-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp23-contracts/-/lsp23-contracts-0.15.0.tgz", + "integrity": "sha512-IQqvK19PyLEAb/6gscLqn1MVy9zKOflQCVNIQmjgMhv6d89FvItwfvLk81aycSUELX5XANbzK14dM0x/ydEQAg==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/universalprofile-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.5.1", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" + "packages/lsp25-contracts": { + "name": "@lukso/lsp25-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp25-contracts/-/lsp25-contracts-0.15.0.tgz", + "integrity": "sha512-GYgnosvrWhNbkZ1lpZ9InPKF8dB1FGb3N0FvpV98ZIG28wKGdBkKnT54ot2bMwmW6oeRuz7/8hAGbcpCKVa/WA==", + "dependencies": { + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/yargs": { - "version": "15.4.1", - "dev": true, - "license": "MIT", + "packages/lsp26-contracts": { + "name": "@lukso/lsp26-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp3-contracts/-/lsp3-contracts-0.15.0.tgz", + "integrity": "sha512-GgL9Ys9HvCuRCJ2/XB6abAwHBCE+LYMPY5vcHnZ67U7cgVgy9sc7z9VDTcBwZygsKUMuNrrnph4MC0G90rALjg==", "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "packages/lsp3-contracts": { + "name": "@lukso/lsp3-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp4-contracts/-/lsp4-contracts-0.15.0.tgz", + "integrity": "sha512-M85S5DN3hqHTIfTs7Cs1dqM4EE2ftEZfh0RcPV00+Fgo2IID8QQxKNFiGP1I59Upn6GsDar/RJpFyV1SCnAOGw==", + "dependencies": { + "@lukso/lsp2-contracts": "~0.15.0" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "dev": true, - "license": "MIT", + "packages/lsp4-contracts": { + "name": "@lukso/lsp4-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp5-contracts/-/lsp5-contracts-0.15.0.tgz", + "integrity": "sha512-mrFp5RAY/rswka8D8rfh25T30yipiQsH87pw+f3t0BLnxbkRt9XiUD4vWD9v8D04TO8wQWuTuFJutObirgFwEg==", "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp2-contracts": "~0.15.0" } }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "packages/lsp-smart-contracts/node_modules/@lukso/lsp6-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp6-contracts/-/lsp6-contracts-0.15.0.tgz", + "integrity": "sha512-nJ1V5x6RP6WlOy2yX/SqNA1M07fPjmmsGQRIWJ1/K+oZKcKSPXKRkaRfzbGo9uzBYS4sDa0E2Q4UMItjaTokoQ==", + "dependencies": { + "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts-upgradeable": "^4.9.6", + "solidity-bytes-utils": "0.8.0" } }, - "node_modules/yargs/node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "packages/lsp5-contracts": { + "name": "@lukso/lsp5-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp7-contracts/-/lsp7-contracts-0.15.0.tgz", + "integrity": "sha512-9kQmwL49CA90vCF1dneG44DdtkNzmnWZ7JzLIopizLw8pnKxhvTAnnJFdsDUVZiDqH3l61RBY51IpEBj+u5yXA==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp2-contracts": "~0.15.0" } }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", + "packages/lsp6-contracts": { + "name": "@lukso/lsp6-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp8-contracts/-/lsp8-contracts-0.15.0.tgz", + "integrity": "sha512-7iWN55lSivJ8PUchY5ocrHjeQ/SeaL2zVrLBW+224AkFQn3no1hhZ8q9mqAbwxv0CEIt5L2x+2RclZq3yMa2uw==", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp25-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", + "packages/lsp7-contracts": { + "name": "@lukso/lsp7-contracts", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp9-contracts/-/lsp9-contracts-0.15.0.tgz", + "integrity": "sha512-wyE4RR9toZrNTcJZXtHHeLfUEqQzE+Zn5nmailAspBTo/sUmW6AjUxl4PKHG/nLYrcjb3wvZ4mTCnbFkGsRHwg==", "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", + "packages/lsp-smart-contracts/node_modules/@lukso/universalprofile-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/universalprofile-contracts/-/universalprofile-contracts-0.15.0.tgz", + "integrity": "sha512-umW4mpC2HtUNW+Cxi4rP+jgWDzpGQfAiDHYiqVB7TunIO6YzlVez8i4DhrmN/lInYQSuk6+kHpUo1jEO8kiJxQ==", "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp3-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", + "packages/lsp0-contracts": { + "name": "@lukso/lsp0-contracts", + "version": "0.15.0-rc.0", + "license": "Apache-2.0", "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/yargs/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "packages/lsp0-contracts/node_modules/@lukso/lsp1-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", + "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", + "dependencies": { + "@lukso/lsp2-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/yargs/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "packages/lsp0-contracts/node_modules/@lukso/lsp14-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", + "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "dev": true, - "license": "ISC", + "packages/lsp0-contracts/node_modules/@lukso/lsp17contractextension-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", + "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/yn": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "packages/lsp0-contracts/node_modules/@lukso/lsp2-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", + "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "packages/lsp0-contracts/node_modules/@lukso/lsp20-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", + "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" + }, + "packages/lsp1-contracts": { + "name": "@lukso/lsp1-contracts", + "version": "0.15.0-rc.0", + "license": "Apache-2.0", + "dependencies": { + "@lukso/lsp2-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/zksync-ethers": { - "version": "5.9.2", - "dev": true, - "license": "MIT", + "packages/lsp1-contracts/node_modules/@lukso/lsp2-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", + "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", "dependencies": { - "ethers": "~5.7.0" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "ethers": "~5.7.0" + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/zksync-ethers/node_modules/ethers": { - "version": "5.7.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "packages/lsp10-contracts": { + "name": "@lukso/lsp10-contracts", + "version": "0.15.0-rc.0", + "license": "Apache-2.0", "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp2-contracts": "~0.15.0" } }, - "node_modules/zod": { - "version": "3.23.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "packages/lsp10-contracts/node_modules/@lukso/lsp2-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", + "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/zx": { - "version": "7.2.3", - "dev": true, + "packages/lsp11-contracts": { + "name": "@lukso/lsp11-contracts", + "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@types/fs-extra": "^11.0.1", - "@types/minimist": "^1.2.2", - "@types/node": "^18.16.3", - "@types/ps-tree": "^1.1.2", - "@types/which": "^3.0.0", - "chalk": "^5.2.0", - "fs-extra": "^11.1.1", - "fx": "*", - "globby": "^13.1.4", - "minimist": "^1.2.8", - "node-fetch": "3.3.1", - "ps-tree": "^1.2.0", - "webpod": "^0", - "which": "^3.0.0", - "yaml": "^2.2.2" - }, - "bin": { - "zx": "build/cli.js" - }, - "engines": { - "node": ">= 16.0.0" + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp25-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/zx/node_modules/@types/node": { - "version": "18.19.49", - "dev": true, - "license": "MIT", + "packages/lsp11-contracts/node_modules/@lukso/lsp25-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp25-contracts/-/lsp25-contracts-0.15.0.tgz", + "integrity": "sha512-GYgnosvrWhNbkZ1lpZ9InPKF8dB1FGb3N0FvpV98ZIG28wKGdBkKnT54ot2bMwmW6oeRuz7/8hAGbcpCKVa/WA==", "dependencies": { - "undici-types": "~5.26.4" + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/zx/node_modules/chalk": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "packages/lsp12-contracts": { + "name": "@lukso/lsp12-contracts", + "version": "0.15.0-rc.0", + "license": "Apache-2.0", + "dependencies": { + "@lukso/lsp2-contracts": "*" } }, - "node_modules/zx/node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" + "packages/lsp14-contracts": { + "name": "@lukso/lsp14-contracts", + "version": "0.15.0-rc.0", + "license": "Apache-2.0", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "*" } }, - "node_modules/zx/node_modules/fs-extra": { - "version": "11.2.0", - "dev": true, - "license": "MIT", + "packages/lsp16-contracts": { + "name": "@lukso/lsp16-contracts", + "version": "0.15.0-rc.0", + "license": "Apache-2.0", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.2", + "@openzeppelin/contracts-upgradeable": "^4.9.2" } }, - "node_modules/zx/node_modules/globby": { - "version": "13.2.2", - "dev": true, - "license": "MIT", + "packages/lsp17-contracts": { + "name": "@lukso/lsp17-contracts", + "version": "0.15.0-rc.0", + "license": "Apache-2.0", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@account-abstraction/contracts": "^0.6.0", + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/zx/node_modules/ignore": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" + "packages/lsp17-contracts/node_modules/@lukso/lsp1-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", + "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", + "dependencies": { + "@lukso/lsp2-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/zx/node_modules/node-fetch": { - "version": "3.3.1", - "dev": true, - "license": "MIT", + "packages/lsp17-contracts/node_modules/@lukso/lsp14-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", + "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0" } }, - "node_modules/zx/node_modules/slash": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "packages/lsp17-contracts/node_modules/@lukso/lsp17contractextension-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", + "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "node_modules/zx/node_modules/undici-types": { - "version": "5.26.5", - "dev": true, - "license": "MIT" - }, - "node_modules/zx/node_modules/which": { - "version": "3.0.1", - "dev": true, - "license": "ISC", + "packages/lsp17-contracts/node_modules/@lukso/lsp2-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", + "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp17-contracts/node_modules/@lukso/lsp20-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", + "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" + }, + "packages/lsp17contractextension-contracts": { + "name": "@lukso/lsp17contractextension-contracts", + "version": "0.15.0-rc.0", + "license": "Apache-2.0", + "dependencies": { + "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp-smart-contracts": { - "name": "@lukso/lsp-smart-contracts", - "version": "0.15.0", + "packages/lsp1delegate-contracts": { + "name": "@lukso/lsp1delegate-contracts", + "version": "0.15.0-rc.0", "license": "Apache-2.0", "dependencies": { - "@lukso/lsp0-contracts": "~0.15.0", + "@erc725/smart-contracts": "^7.0.0", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp10-contracts": "~0.15.0", - "@lukso/lsp12-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp16-contracts": "~0.15.0", - "@lukso/lsp17-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp1delegate-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@lukso/lsp23-contracts": "~0.15.0", - "@lukso/lsp25-contracts": "~0.15.0", - "@lukso/lsp26-contracts": "~0.15.0", - "@lukso/lsp3-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", "@lukso/lsp5-contracts": "~0.15.0", - "@lukso/lsp6-contracts": "~0.15.0", "@lukso/lsp7-contracts": "~0.15.0", "@lukso/lsp8-contracts": "~0.15.0", "@lukso/lsp9-contracts": "~0.15.0", - "@lukso/universalprofile-contracts": "~0.15.0" - } - }, - "packages/lsp0-contracts": { - "name": "@lukso/lsp0-contracts", - "version": "0.15.0", - "license": "Apache-2.0", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } }, - "packages/lsp1-contracts": { - "name": "@lukso/lsp1-contracts", + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp1-contracts": { "version": "0.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", + "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", "dependencies": { "@lukso/lsp2-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp10-contracts": { - "name": "@lukso/lsp10-contracts", + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp10-contracts": { "version": "0.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp10-contracts/-/lsp10-contracts-0.15.0.tgz", + "integrity": "sha512-LXyOOCD43sHtQxyp98utUwxaU+r2MA8TvqXBibxjHxD20/L7vYGSxHqDX493/zUtfCUIMUELuj6a1+NGscbBTw==", "dependencies": { "@erc725/smart-contracts": "^6.0.0", "@lukso/lsp2-contracts": "~0.15.0" } }, - "packages/lsp10-contracts/node_modules/@erc725/smart-contracts": { + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp10-contracts/node_modules/@erc725/smart-contracts": { "version": "6.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-6.0.0.tgz", + "integrity": "sha512-6okutGGL9xbg/MSgAof2FU1UcSNE/z3p9TORlROVGaM3gi1A6FQQ7fDqtBYkPtvHureX8yS9gP7xPt3PRbP43Q==", "dependencies": { "@openzeppelin/contracts": "^4.9.3", "@openzeppelin/contracts-upgradeable": "^4.9.3", "solidity-bytes-utils": "0.8.0" } }, - "packages/lsp11-contracts": { - "name": "@lukso/lsp11-contracts", - "version": "0.1.0", - "license": "Apache-2.0", + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp14-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", + "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0" + } + }, + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp17contractextension-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", + "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp25-contracts": "~0.15.0-rc.4", "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp12-contracts": { - "name": "@lukso/lsp12-contracts", + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp2-contracts": { "version": "0.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", + "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0" + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp14-contracts": { - "name": "@lukso/lsp14-contracts", + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp20-contracts": { "version": "0.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", + "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" + }, + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp25-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp25-contracts/-/lsp25-contracts-0.15.0.tgz", + "integrity": "sha512-GYgnosvrWhNbkZ1lpZ9InPKF8dB1FGb3N0FvpV98ZIG28wKGdBkKnT54ot2bMwmW6oeRuz7/8hAGbcpCKVa/WA==", + "dependencies": { + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp4-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp4-contracts/-/lsp4-contracts-0.15.0.tgz", + "integrity": "sha512-M85S5DN3hqHTIfTs7Cs1dqM4EE2ftEZfh0RcPV00+Fgo2IID8QQxKNFiGP1I59Upn6GsDar/RJpFyV1SCnAOGw==", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0" + "@lukso/lsp2-contracts": "~0.15.0" } }, - "packages/lsp16-contracts": { - "name": "@lukso/lsp16-contracts", + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp5-contracts": { "version": "0.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp5-contracts/-/lsp5-contracts-0.15.0.tgz", + "integrity": "sha512-mrFp5RAY/rswka8D8rfh25T30yipiQsH87pw+f3t0BLnxbkRt9XiUD4vWD9v8D04TO8wQWuTuFJutObirgFwEg==", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.2", - "@openzeppelin/contracts-upgradeable": "^4.9.2" + "@lukso/lsp2-contracts": "~0.15.0" } }, - "packages/lsp17-contracts": { - "name": "@lukso/lsp17-contracts", + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp6-contracts": { "version": "0.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp6-contracts/-/lsp6-contracts-0.15.0.tgz", + "integrity": "sha512-nJ1V5x6RP6WlOy2yX/SqNA1M07fPjmmsGQRIWJ1/K+oZKcKSPXKRkaRfzbGo9uzBYS4sDa0E2Q4UMItjaTokoQ==", "dependencies": { - "@account-abstraction/contracts": "^0.6.0", "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp14-contracts": "~0.15.0", "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", "@lukso/lsp20-contracts": "~0.15.0", - "@lukso/lsp6-contracts": "~0.15.0", + "@lukso/lsp25-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp17contractextension-contracts": { - "name": "@lukso/lsp17contractextension-contracts", + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp7-contracts": { "version": "0.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp7-contracts/-/lsp7-contracts-0.15.0.tgz", + "integrity": "sha512-9kQmwL49CA90vCF1dneG44DdtkNzmnWZ7JzLIopizLw8pnKxhvTAnnJFdsDUVZiDqH3l61RBY51IpEBj+u5yXA==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp8-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp8-contracts/-/lsp8-contracts-0.15.0.tgz", + "integrity": "sha512-7iWN55lSivJ8PUchY5ocrHjeQ/SeaL2zVrLBW+224AkFQn3no1hhZ8q9mqAbwxv0CEIt5L2x+2RclZq3yMa2uw==", "dependencies": { "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp1delegate-contracts": { - "name": "@lukso/lsp1delegate-contracts", + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp9-contracts": { "version": "0.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp9-contracts/-/lsp9-contracts-0.15.0.tgz", + "integrity": "sha512-wyE4RR9toZrNTcJZXtHHeLfUEqQzE+Zn5nmailAspBTo/sUmW6AjUxl4PKHG/nLYrcjb3wvZ4mTCnbFkGsRHwg==", "dependencies": { "@erc725/smart-contracts": "^7.0.0", "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp10-contracts": "~0.15.0", - "@lukso/lsp5-contracts": "~0.15.0", - "@lukso/lsp7-contracts": "~0.15.0", - "@lukso/lsp8-contracts": "~0.15.0", - "@lukso/lsp9-contracts": "~0.15.0", + "@lukso/lsp6-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp2-contracts": { "name": "@lukso/lsp2-contracts", - "version": "0.15.0", + "version": "0.15.0-rc.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "@erc725/smart-contracts": "^7.0.0" } }, "packages/lsp20-contracts": { "name": "@lukso/lsp20-contracts", - "version": "0.15.0", + "version": "0.12.1", "license": "Apache-2.0" }, "packages/lsp23-contracts": { "name": "@lukso/lsp23-contracts", - "version": "0.15.0", + "version": "0.15.0-rc.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/universalprofile-contracts": "~0.15.0", + "@lukso/universalprofile-contracts": "*", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp25-contracts": { "name": "@lukso/lsp25-contracts", - "version": "0.15.0", + "version": "0.12.1", "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.3" @@ -18605,98 +20113,162 @@ "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp3-contracts": { - "name": "@lukso/lsp3-contracts", + "packages/lsp26-contracts/node_modules/@lukso/lsp0-contracts": { "version": "0.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp0-contracts/-/lsp0-contracts-0.15.0.tgz", + "integrity": "sha512-dKQu9juDJNxKdJMHkF3wOfjC/VZZW+RonQ5hSw9kBhLAhyFd6SVYU3VSUOYG3G3bLDAE9We+DeONc0N/j4zjIQ==", "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0" + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp4-contracts": { - "name": "@lukso/lsp4-contracts", + "packages/lsp26-contracts/node_modules/@lukso/lsp1-contracts": { "version": "0.15.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", + "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", + "dependencies": { + "@lukso/lsp2-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp26-contracts/node_modules/@lukso/lsp14-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", + "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0" + "@lukso/lsp1-contracts": "~0.15.0" } }, - "packages/lsp4-contracts/node_modules/@erc725/smart-contracts": { - "version": "8.0.0", + "packages/lsp26-contracts/node_modules/@lukso/lsp17contractextension-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", + "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp26-contracts/node_modules/@lukso/lsp2-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", + "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp26-contracts/node_modules/@lukso/lsp20-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", + "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" + }, + "packages/lsp3-contracts": { + "name": "@lukso/lsp3-contracts", + "version": "0.15.0-rc.0", "license": "Apache-2.0", "dependencies": { - "@openzeppelin/contracts": "^4.9.6", - "@openzeppelin/contracts-upgradeable": "^4.9.6", - "solidity-bytes-utils": "0.8.0" + "@lukso/lsp2-contracts": "*" + } + }, + "packages/lsp4-contracts": { + "name": "@lukso/lsp4-contracts", + "version": "0.15.0-rc.0", + "license": "Apache-2.0", + "dependencies": { + "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0-1.tgz", + "@lukso/lsp2-contracts": "*" } }, "packages/lsp5-contracts": { "name": "@lukso/lsp5-contracts", - "version": "0.15.0", + "version": "0.15.0-rc.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0" + "@lukso/lsp2-contracts": "*" } }, "packages/lsp6-contracts": { "name": "@lukso/lsp6-contracts", - "version": "0.15.0", + "version": "0.15.0-rc.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@lukso/lsp25-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "*", + "@lukso/lsp14-contracts": "*", + "@lukso/lsp17contractextension-contracts": "*", + "@lukso/lsp2-contracts": "*", + "@lukso/lsp20-contracts": "*", + "@lukso/lsp25-contracts": "*", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp7-contracts": { "name": "@lukso/lsp7-contracts", - "version": "0.15.0", + "version": "0.15.0-rc.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", + "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0-1.tgz", "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "*", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "*", + "@openzeppelin/contracts": "^4.9.6" + } + }, + "packages/lsp7-contracts/node_modules/@lukso/lsp1-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", + "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", + "dependencies": { "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp7-contracts/node_modules/@erc725/smart-contracts": { - "version": "8.0.0", - "license": "Apache-2.0", + "packages/lsp7-contracts/node_modules/@lukso/lsp2-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", + "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", "dependencies": { - "@openzeppelin/contracts": "^4.9.6", - "@openzeppelin/contracts-upgradeable": "^4.9.6", - "solidity-bytes-utils": "0.8.0" + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp8-contracts": { "name": "@lukso/lsp8-contracts", - "version": "0.15.0", + "version": "0.15.0-rc.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", + "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0-1.tgz", "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "*", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "*", + "@openzeppelin/contracts": "^4.9.6" + } + }, + "packages/lsp8-contracts/node_modules/@lukso/lsp1-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", + "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", + "dependencies": { "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp8-contracts/node_modules/@erc725/smart-contracts": { - "version": "8.0.0", - "license": "Apache-2.0", + "packages/lsp8-contracts/node_modules/@lukso/lsp2-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", + "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", "dependencies": { - "@openzeppelin/contracts": "^4.9.6", - "@openzeppelin/contracts-upgradeable": "^4.9.6", - "solidity-bytes-utils": "0.8.0" + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp9-contracts": { @@ -18720,6 +20292,69 @@ "@lukso/lsp3-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } + }, + "packages/universalprofile-contracts/node_modules/@lukso/lsp0-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp0-contracts/-/lsp0-contracts-0.15.0.tgz", + "integrity": "sha512-dKQu9juDJNxKdJMHkF3wOfjC/VZZW+RonQ5hSw9kBhLAhyFd6SVYU3VSUOYG3G3bLDAE9We+DeONc0N/j4zjIQ==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/universalprofile-contracts/node_modules/@lukso/lsp1-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", + "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", + "dependencies": { + "@lukso/lsp2-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/universalprofile-contracts/node_modules/@lukso/lsp14-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", + "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0" + } + }, + "packages/universalprofile-contracts/node_modules/@lukso/lsp17contractextension-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", + "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/universalprofile-contracts/node_modules/@lukso/lsp2-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", + "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/universalprofile-contracts/node_modules/@lukso/lsp20-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", + "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" + }, + "packages/universalprofile-contracts/node_modules/@lukso/lsp3-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp3-contracts/-/lsp3-contracts-0.15.0.tgz", + "integrity": "sha512-GgL9Ys9HvCuRCJ2/XB6abAwHBCE+LYMPY5vcHnZ67U7cgVgy9sc7z9VDTcBwZygsKUMuNrrnph4MC0G90rALjg==", + "dependencies": { + "@lukso/lsp2-contracts": "~0.15.0" + } } } } diff --git a/packages/lsp4-contracts/package.json b/packages/lsp4-contracts/package.json index 36e927e7b..b5356e489 100644 --- a/packages/lsp4-contracts/package.json +++ b/packages/lsp4-contracts/package.json @@ -48,7 +48,7 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0.tgz", + "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0-1.tgz", "@lukso/lsp2-contracts": "*" } } diff --git a/packages/lsp8-contracts/contracts/ILSP8IdentifiableDigitalAsset.sol b/packages/lsp8-contracts/contracts/ILSP8IdentifiableDigitalAsset.sol index 2e596194d..ed8cd2b42 100644 --- a/packages/lsp8-contracts/contracts/ILSP8IdentifiableDigitalAsset.sol +++ b/packages/lsp8-contracts/contracts/ILSP8IdentifiableDigitalAsset.sol @@ -1,16 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.4; -// interfaces -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; -import { - IERC725Y -} from "@erc725/smart-contracts/contracts/interfaces/IERC725Y.sol"; - /** * @title Interface of the LSP8 - Identifiable Digital Asset standard, a non-fungible digital asset. */ -interface ILSP8IdentifiableDigitalAsset is IERC165, IERC725Y { +interface ILSP8IdentifiableDigitalAsset { // --- Events /** diff --git a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol index cbd3d2a33..a60f65124 100644 --- a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol +++ b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol @@ -3,47 +3,75 @@ pragma solidity ^0.8.12; // interfaces import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; - -// modules -import {ERC725YCore} from "@erc725/smart-contracts/contracts/ERC725YCore.sol"; import { - LSP8IdentifiableDigitalAssetCore -} from "./LSP8IdentifiableDigitalAssetCore.sol"; + ILSP1UniversalReceiver as ILSP1 +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; import { - LSP4DigitalAssetMetadata -} from "@lukso/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol"; + ILSP8IdentifiableDigitalAsset +} from "./ILSP8IdentifiableDigitalAsset.sol"; +// modules import { - LSP4DigitalAssetMetadataCore -} from "@lukso/lsp4-contracts/contracts/LSP4DigitalAssetMetadataCore.sol"; + LSP4DigitalAssetMetadata, + ERC725Y +} from "@lukso/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol"; import { LSP17Extendable } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Extendable.sol"; // libraries +import { + EnumerableSet +} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import { + ERC165Checker +} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; +import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; import {LSP2Utils} from "@lukso/lsp2-contracts/contracts/LSP2Utils.sol"; // constants -import {_INTERFACEID_LSP8, _LSP8_TOKENID_FORMAT_KEY} from "./LSP8Constants.sol"; - -// errors import { - LSP8TokenContractCannotHoldValue, - LSP8TokenIdFormatNotEditable -} from "./LSP8Errors.sol"; - + _INTERFACEID_LSP1 +} from "@lukso/lsp1-contracts/contracts/LSP1Constants.sol"; import { _LSP17_EXTENSION_PREFIX } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Constants.sol"; +import { + _INTERFACEID_LSP8, + _LSP8_TOKENID_FORMAT_KEY, + _TYPEID_LSP8_TOKENOPERATOR, + _TYPEID_LSP8_TOKENSSENDER, + _TYPEID_LSP8_TOKENSRECIPIENT +} from "./LSP8Constants.sol"; // errors - import { NoExtensionFoundForFunctionSelector, InvalidFunctionSelector, InvalidExtensionAddress } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Errors.sol"; +import { + LSP8TokenContractCannotHoldValue, + LSP8TokenIdFormatNotEditable, + LSP8NonExistentTokenId, + LSP8NotTokenOwner, + LSP8CannotUseAddressZeroAsOperator, + LSP8TokenOwnerCannotBeOperator, + LSP8OperatorAlreadyAuthorized, + LSP8NotTokenOperator, + LSP8InvalidTransferBatch, + LSP8NonExistingOperator, + LSP8CannotSendToAddressZero, + LSP8TokenIdAlreadyMinted, + LSP8NotifyTokenReceiverContractMissingLSP1Interface, + LSP8NotifyTokenReceiverIsEOA, + LSP8TokenIdsDataLengthMismatch, + LSP8TokenIdsDataEmptyArray, + LSP8BatchCallFailed, + LSP8TokenOwnerChanged, + LSP8RevokeOperatorNotAuthorized +} from "./LSP8Errors.sol"; /** * @title Implementation of a LSP8 Identifiable Digital Asset, a contract that represents a non-fungible token. @@ -57,10 +85,26 @@ import { * For a generic mechanism, see {LSP7Mintable}. */ abstract contract LSP8IdentifiableDigitalAsset is + ILSP8IdentifiableDigitalAsset, LSP4DigitalAssetMetadata, - LSP8IdentifiableDigitalAssetCore, LSP17Extendable { + using EnumerableSet for EnumerableSet.AddressSet; + using EnumerableSet for EnumerableSet.Bytes32Set; + + // --- Storage + + uint256 internal _existingTokens; + + // Mapping from `tokenId` to `tokenOwner` + mapping(bytes32 => address) internal _tokenOwners; + + // Mapping `tokenOwner` to owned tokenIds + mapping(address => EnumerableSet.Bytes32Set) internal _ownedTokens; + + // Mapping a `tokenId` to its authorized operator addresses. + mapping(bytes32 => EnumerableSet.AddressSet) internal _operators; + /** * @notice Deploying a LSP8IdentifiableDigitalAsset with name `name_`, symbol `symbol_`, owned by address `newOwner_` * with tokenId format `lsp8TokenIdFormat_`. @@ -90,7 +134,7 @@ abstract contract LSP8IdentifiableDigitalAsset is ); } - // fallback function + // fallback functions /** * @notice The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`. @@ -193,9 +237,7 @@ abstract contract LSP8IdentifiableDigitalAsset is ); // Check if there is an extension stored under the generated data key - bytes memory extensionAddress = ERC725YCore._getData( - mappedExtensionDataKey - ); + bytes memory extensionAddress = _getData(mappedExtensionDataKey); if (extensionAddress.length != 20 && extensionAddress.length != 0) revert InvalidExtensionAddress(extensionAddress); @@ -207,13 +249,7 @@ abstract contract LSP8IdentifiableDigitalAsset is */ function supportsInterface( bytes4 interfaceId - ) - public - view - virtual - override(IERC165, ERC725YCore, LSP17Extendable) - returns (bool) - { + ) public view virtual override(ERC725Y, LSP17Extendable) returns (bool) { return interfaceId == _INTERFACEID_LSP8 || super.supportsInterface(interfaceId) || @@ -228,14 +264,734 @@ abstract contract LSP8IdentifiableDigitalAsset is function _setData( bytes32 dataKey, bytes memory dataValue - ) - internal - virtual - override(LSP4DigitalAssetMetadata, LSP4DigitalAssetMetadataCore) - { + ) internal virtual override { if (dataKey == _LSP8_TOKENID_FORMAT_KEY) { revert LSP8TokenIdFormatNotEditable(); } LSP4DigitalAssetMetadata._setData(dataKey, dataValue); } + + // --- Token queries + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function totalSupply() public view virtual override returns (uint256) { + return _existingTokens; + } + + // --- Token owner queries + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function balanceOf( + address tokenOwner + ) public view virtual override returns (uint256) { + return _ownedTokens[tokenOwner].length(); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function tokenOwnerOf( + bytes32 tokenId + ) public view virtual override returns (address) { + address tokenOwner = _tokenOwners[tokenId]; + + if (tokenOwner == address(0)) { + revert LSP8NonExistentTokenId(tokenId); + } + + return tokenOwner; + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function tokenIdsOf( + address tokenOwner + ) public view virtual override returns (bytes32[] memory) { + return _ownedTokens[tokenOwner].values(); + } + + // --- TokenId Metadata functionality + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey + ) public view virtual override returns (bytes memory dataValue) { + return _getDataForTokenId(tokenId, dataKey); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function getDataBatchForTokenIds( + bytes32[] memory tokenIds, + bytes32[] memory dataKeys + ) public view virtual override returns (bytes[] memory dataValues) { + if (tokenIds.length != dataKeys.length) { + revert LSP8TokenIdsDataLengthMismatch(); + } + + dataValues = new bytes[](tokenIds.length); + + for (uint256 i; i < tokenIds.length; ) { + dataValues[i] = _getDataForTokenId(tokenIds[i], dataKeys[i]); + + // Increment the iterator in unchecked block to save gas + unchecked { + ++i; + } + } + + return dataValues; + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes memory dataValue + ) public virtual override onlyOwner { + _setDataForTokenId(tokenId, dataKey, dataValue); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function setDataBatchForTokenIds( + bytes32[] memory tokenIds, + bytes32[] memory dataKeys, + bytes[] memory dataValues + ) public virtual override onlyOwner { + if ( + tokenIds.length != dataKeys.length || + dataKeys.length != dataValues.length + ) { + revert LSP8TokenIdsDataLengthMismatch(); + } + + if (tokenIds.length == 0) { + revert LSP8TokenIdsDataEmptyArray(); + } + + for (uint256 i; i < tokenIds.length; ) { + _setDataForTokenId(tokenIds[i], dataKeys[i], dataValues[i]); + + // Increment the iterator in unchecked block to save gas + unchecked { + ++i; + } + } + } + + // --- General functionality + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + * + * @custom:info It's not possible to send value along the functions call due to the use of `delegatecall`. + */ + function batchCalls( + bytes[] calldata data + ) public virtual override returns (bytes[] memory results) { + results = new bytes[](data.length); + for (uint256 i; i < data.length; ) { + (bool success, bytes memory result) = address(this).delegatecall( + data[i] + ); + + if (!success) { + // Look for revert reason and bubble it up if present + if (result.length != 0) { + // The easiest way to bubble the revert reason is using memory via assembly + // solhint-disable no-inline-assembly + /// @solidity memory-safe-assembly + assembly { + let returndata_size := mload(result) + revert(add(32, result), returndata_size) + } + } else { + revert LSP8BatchCallFailed({callIndex: i}); + } + } + + results[i] = result; + + unchecked { + ++i; + } + } + } + + // --- Operator functionality + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function authorizeOperator( + address operator, + bytes32 tokenId, + bytes memory operatorNotificationData + ) public virtual override { + address tokenOwner = tokenOwnerOf(tokenId); + + if (tokenOwner != msg.sender) { + revert LSP8NotTokenOwner(tokenOwner, tokenId, msg.sender); + } + + if (operator == address(0)) { + revert LSP8CannotUseAddressZeroAsOperator(); + } + + if (tokenOwner == operator) { + revert LSP8TokenOwnerCannotBeOperator(); + } + + bool isAdded = _operators[tokenId].add(operator); + if (!isAdded) revert LSP8OperatorAlreadyAuthorized(operator, tokenId); + + emit OperatorAuthorizationChanged( + operator, + tokenOwner, + tokenId, + operatorNotificationData + ); + + bytes memory lsp1Data = abi.encode( + msg.sender, + tokenId, + true, // authorized + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function revokeOperator( + address operator, + bytes32 tokenId, + bool notify, + bytes memory operatorNotificationData + ) public virtual override { + address tokenOwner = tokenOwnerOf(tokenId); + + if (msg.sender != tokenOwner) { + if (operator != msg.sender) { + revert LSP8RevokeOperatorNotAuthorized( + msg.sender, + tokenOwner, + tokenId + ); + } + } + + if (operator == address(0)) { + revert LSP8CannotUseAddressZeroAsOperator(); + } + + if (tokenOwner == operator) { + revert LSP8TokenOwnerCannotBeOperator(); + } + + _revokeOperator( + operator, + tokenOwner, + tokenId, + notify, + operatorNotificationData + ); + + if (notify) { + bytes memory lsp1Data = abi.encode( + tokenOwner, + tokenId, + false, // unauthorized + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function isOperatorFor( + address operator, + bytes32 tokenId + ) public view virtual override returns (bool) { + return _isOperatorOrOwner(operator, tokenId); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function getOperatorsOf( + bytes32 tokenId + ) public view virtual override returns (address[] memory) { + _existsOrError(tokenId); + + return _operators[tokenId].values(); + } + + /** + * @dev verifies if the `caller` is operator or owner for the `tokenId` + * @return true if `caller` is either operator or owner + */ + function _isOperatorOrOwner( + address caller, + bytes32 tokenId + ) internal view virtual returns (bool) { + return (caller == tokenOwnerOf(tokenId) || + _operators[tokenId].contains(caller)); + } + + // --- Transfer functionality + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes memory data + ) public virtual override { + if (!_isOperatorOrOwner(msg.sender, tokenId)) { + revert LSP8NotTokenOperator(tokenId, msg.sender); + } + + _transfer(from, to, tokenId, force, data); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function transferBatch( + address[] memory from, + address[] memory to, + bytes32[] memory tokenId, + bool[] memory force, + bytes[] memory data + ) public virtual override { + uint256 fromLength = from.length; + if ( + fromLength != to.length || + fromLength != tokenId.length || + fromLength != force.length || + fromLength != data.length + ) { + revert LSP8InvalidTransferBatch(); + } + + for (uint256 i; i < fromLength; ) { + transfer(from[i], to[i], tokenId[i], force[i], data[i]); + + unchecked { + ++i; + } + } + } + + /** + * @dev removes `operator` from the list of operators for the `tokenId` + */ + function _revokeOperator( + address operator, + address tokenOwner, + bytes32 tokenId, + bool notified, + bytes memory operatorNotificationData + ) internal virtual { + bool isRemoved = _operators[tokenId].remove(operator); + if (!isRemoved) revert LSP8NonExistingOperator(operator, tokenId); + + emit OperatorRevoked( + operator, + tokenOwner, + tokenId, + notified, + operatorNotificationData + ); + } + + /** + * @dev revoke all the current operators for a specific `tokenId` token which belongs to `tokenOwner`. + * + * @param tokenOwner The address that is the owner of the `tokenId`. + * @param tokenId The token to remove the associated operators for. + */ + function _clearOperators( + address tokenOwner, + bytes32 tokenId + ) internal virtual { + // here is a good example of why having multiple operators will be expensive.. we + // need to clear them on token transfer + // + // NOTE: this may cause a tx to fail if there is too many operators to clear, in which case + // the tokenOwner needs to call `revokeOperator` until there is less operators to clear and + // the desired `transfer` or `burn` call can succeed. + EnumerableSet.AddressSet storage operatorsForTokenId = _operators[ + tokenId + ]; + + uint256 operatorListLength = operatorsForTokenId.length(); + address operator; + for (uint256 i; i < operatorListLength; ) { + // we are emptying the list, always remove from index 0 + operator = operatorsForTokenId.at(0); + _revokeOperator(operator, tokenOwner, tokenId, false, ""); + + unchecked { + ++i; + } + } + } + + /** + * @dev Returns whether `tokenId` exists. + * + * Tokens start existing when they are minted ({_mint}), and stop existing when they are burned ({_burn}). + */ + function _exists(bytes32 tokenId) internal view virtual returns (bool) { + return _tokenOwners[tokenId] != address(0); + } + + /** + * @dev When `tokenId` does not exist then revert with an error. + */ + function _existsOrError(bytes32 tokenId) internal view virtual { + if (!_exists(tokenId)) { + revert LSP8NonExistentTokenId(tokenId); + } + } + + /** + * @dev Create `tokenId` by minting it and transfers it to `to`. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances and ownership of `tokenId`s. + * - {_afterTokenTransfer} function will run after updating the balances and ownership of `tokenId`s, **but before notifying the recipient via LSP1**. + * + * @param to The address that will receive the minted `tokenId`. + * @param tokenId The token ID to create (= mint). + * @param force When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. + * @param data Any additional data the caller wants included in the emitted event, and sent in the hook of the `to` address. + * + * @custom:requirements + * - `tokenId` must not exist and not have been already minted. + * - `to` cannot be the zero address. + + * @custom:events {Transfer} event with `address(0)` as `from` address. + */ + function _mint( + address to, + bytes32 tokenId, + bool force, + bytes memory data + ) internal virtual { + if (to == address(0)) { + revert LSP8CannotSendToAddressZero(); + } + + // Check that `tokenId` is not already minted + if (_exists(tokenId)) { + revert LSP8TokenIdAlreadyMinted(tokenId); + } + + _beforeTokenTransfer(address(0), to, tokenId, data); + + // Check that `tokenId` was not minted inside the `_beforeTokenTransfer` hook + if (_exists(tokenId)) { + revert LSP8TokenIdAlreadyMinted(tokenId); + } + + // token being minted + ++_existingTokens; + + _ownedTokens[to].add(tokenId); + _tokenOwners[tokenId] = to; + + emit Transfer(msg.sender, address(0), to, tokenId, force, data); + + _afterTokenTransfer(address(0), to, tokenId, data); + + bytes memory lsp1Data = abi.encode( + msg.sender, + address(0), + to, + tokenId, + data + ); + _notifyTokenReceiver(to, force, lsp1Data); + } + + /** + * @dev Burn a specific `tokenId`, removing the `tokenId` from the {tokenIdsOf} the caller and decreasing its {balanceOf} by -1. + * This will also clear all the operators allowed to transfer the `tokenId`. + * + * The owner of the `tokenId` will be notified about the `tokenId` being transferred through its LSP1 {universalReceiver} + * function, if it is a contract that supports the LSP1 interface. Its {universalReceiver} function will receive + * all the parameters in the calldata packed encoded. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances and ownership of `tokenId`s. + * - {_afterTokenTransfer} function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender via LSP1**. + * + * @param tokenId The token to burn. + * @param data Any additional data the caller wants included in the emitted event, and sent in the LSP1 hook on the token owner's address. + * + * @custom:hint In dApps, you can know which addresses are burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + * + * @custom:requirements + * - `tokenId` must exist. + * + * @custom:events {Transfer} event with `address(0)` as the `to` address. + */ + function _burn(bytes32 tokenId, bytes memory data) internal virtual { + address tokenOwner = tokenOwnerOf(tokenId); + + _beforeTokenTransfer(tokenOwner, address(0), tokenId, data); + + // Re-fetch and update `tokenOwner` in case `tokenId` + // was transferred inside the `_beforeTokenTransfer` hook + tokenOwner = tokenOwnerOf(tokenId); + + // token being burned + --_existingTokens; + + _clearOperators(tokenOwner, tokenId); + + _ownedTokens[tokenOwner].remove(tokenId); + delete _tokenOwners[tokenId]; + + emit Transfer(msg.sender, tokenOwner, address(0), tokenId, false, data); + + _afterTokenTransfer(tokenOwner, address(0), tokenId, data); + + bytes memory lsp1Data = abi.encode( + msg.sender, + tokenOwner, + address(0), + tokenId, + data + ); + + _notifyTokenSender(tokenOwner, lsp1Data); + } + + /** + * @dev Change the owner of the `tokenId` from `from` to `to`. + * + * Both the sender and recipient will be notified of the `tokenId` being transferred through their LSP1 {universalReceiver} + * function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive + * all the parameters in the calldata packed encoded. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances and ownership of `tokenId`s. + * - {_afterTokenTransfer} function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender/recipient via LSP1**. + * + * @param from The sender address. + * @param to The recipient address. + * @param tokenId The token to transfer. + * @param force When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. + * @param data Additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. + * + * @custom:requirements + * - `to` cannot be the zero address. + * - `tokenId` token must be owned by `from`. + * + * @custom:events {Transfer} event. + * + * @custom:danger This internal function does not check if the sender is authorized or not to operate on the `tokenId`. + */ + function _transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes memory data + ) internal virtual { + address tokenOwner = tokenOwnerOf(tokenId); + if (tokenOwner != from) { + revert LSP8NotTokenOwner(tokenOwner, tokenId, from); + } + + if (to == address(0)) { + revert LSP8CannotSendToAddressZero(); + } + + _beforeTokenTransfer(from, to, tokenId, data); + + // Check that `tokenId`'s owner was not changed inside the `_beforeTokenTransfer` hook + address currentTokenOwner = tokenOwnerOf(tokenId); + if (tokenOwner != currentTokenOwner) { + revert LSP8TokenOwnerChanged( + tokenId, + tokenOwner, + currentTokenOwner + ); + } + + _clearOperators(from, tokenId); + + _ownedTokens[from].remove(tokenId); + _ownedTokens[to].add(tokenId); + _tokenOwners[tokenId] = to; + + emit Transfer(msg.sender, from, to, tokenId, force, data); + + _afterTokenTransfer(from, to, tokenId, data); + + bytes memory lsp1Data = abi.encode(msg.sender, from, to, tokenId, data); + + _notifyTokenSender(from, lsp1Data); + _notifyTokenReceiver(to, force, lsp1Data); + } + + /** + * @dev Sets data for a specific `tokenId` and `dataKey` in the ERC725Y storage + * The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + * @param tokenId The unique identifier for a token. + * @param dataKey The key for the data to set. + * @param dataValue The value to set for the given data key. + * @custom:events {TokenIdDataChanged} event. + */ + function _setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes memory dataValue + ) internal virtual { + _store[keccak256(bytes.concat(tokenId, dataKey))] = dataValue; + emit TokenIdDataChanged(tokenId, dataKey, dataValue); + } + + /** + * @dev Retrieves data for a specific `tokenId` and `dataKey` from the ERC725Y storage + * The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + * @param tokenId The unique identifier for a token. + * @param dataKey The key for the data to retrieve. + * @return dataValues The data value associated with the given `tokenId` and `dataKey`. + */ + function _getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey + ) internal view virtual returns (bytes memory dataValues) { + return _store[keccak256(bytes.concat(tokenId, dataKey))]; + } + + /** + * @dev Hook that is called before any token transfer, including minting and burning. + * Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. + * + * @param from The sender address + * @param to The recipient address + * @param tokenId The tokenId to transfer + * @param data The data sent alongside the transfer + */ + function _beforeTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes memory data // solhint-disable-next-line no-empty-blocks + ) internal virtual {} + + /** + * @dev Hook that is called after any token transfer, including minting and burning. + * Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. + * + * @param from The sender address + * @param to The recipient address + * @param tokenId The tokenId to transfer + * @param data The data sent alongside the transfer + */ + function _afterTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes memory data // solhint-disable-next-line no-empty-blocks + ) internal virtual {} + + /** + * @dev Attempt to notify the operator `operator` about the `tokenId` being authorized. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP8_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. + * If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + + * @param operator The address to call the {universalReceiver} function on. + * @param lsp1Data the data to be sent to the `operator` address in the `universalReceiver` call. + */ + function _notifyTokenOperator( + address operator, + bytes memory lsp1Data + ) internal virtual { + LSP1Utils.notifyUniversalReceiver( + operator, + _TYPEID_LSP8_TOKENOPERATOR, + lsp1Data + ); + } + + /** + * @dev Attempt to notify the token sender `from` about the `tokenId` being transferred. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP8_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. + * If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + + * @param from The address to call the {universalReceiver} function on. + * @param lsp1Data the data to be sent to the `from` address in the `universalReceiver` call. + */ + function _notifyTokenSender( + address from, + bytes memory lsp1Data + ) internal virtual { + LSP1Utils.notifyUniversalReceiver( + from, + _TYPEID_LSP8_TOKENSSENDER, + lsp1Data + ); + } + + /** + * @dev Attempt to notify the token receiver `to` about the `tokenId` being received. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP8_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. + * + * If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + * - if `force` is set to `true`, nothing will happen and no notification will be sent. + * - if `force` is set to `false, the transaction will revert. + * + * @param to The address to call the {universalReceiver} function on. + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. + * @param lsp1Data The data to be sent to the `to` address in the `universalReceiver(...)` call. + */ + function _notifyTokenReceiver( + address to, + bool force, + bytes memory lsp1Data + ) internal virtual { + if ( + ERC165Checker.supportsERC165InterfaceUnchecked( + to, + _INTERFACEID_LSP1 + ) + ) { + ILSP1(to).universalReceiver(_TYPEID_LSP8_TOKENSRECIPIENT, lsp1Data); + } else if (!force) { + if (to.code.length != 0) { + revert LSP8NotifyTokenReceiverContractMissingLSP1Interface(to); + } else { + revert LSP8NotifyTokenReceiverIsEOA(to); + } + } + } } diff --git a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetCore.sol b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetCore.sol deleted file mode 100644 index 13176216e..000000000 --- a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetCore.sol +++ /dev/null @@ -1,809 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.12; - -// interfaces -import { - ILSP1UniversalReceiver as ILSP1 -} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; -import { - ILSP8IdentifiableDigitalAsset -} from "./ILSP8IdentifiableDigitalAsset.sol"; - -// modules - -import { - LSP4DigitalAssetMetadataCore -} from "@lukso/lsp4-contracts/contracts/LSP4DigitalAssetMetadataCore.sol"; - -// libraries -import { - EnumerableSet -} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -import { - ERC165Checker -} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; -import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; - -// errors -import { - LSP8NonExistentTokenId, - LSP8NotTokenOwner, - LSP8CannotUseAddressZeroAsOperator, - LSP8TokenOwnerCannotBeOperator, - LSP8OperatorAlreadyAuthorized, - LSP8NotTokenOperator, - LSP8InvalidTransferBatch, - LSP8NonExistingOperator, - LSP8CannotSendToAddressZero, - LSP8TokenIdAlreadyMinted, - LSP8NotifyTokenReceiverContractMissingLSP1Interface, - LSP8NotifyTokenReceiverIsEOA, - LSP8TokenIdsDataLengthMismatch, - LSP8TokenIdsDataEmptyArray, - LSP8BatchCallFailed, - LSP8TokenOwnerChanged, - LSP8RevokeOperatorNotAuthorized -} from "./LSP8Errors.sol"; - -// constants -import { - _INTERFACEID_LSP1 -} from "@lukso/lsp1-contracts/contracts/LSP1Constants.sol"; -import { - _TYPEID_LSP8_TOKENOPERATOR, - _TYPEID_LSP8_TOKENSSENDER, - _TYPEID_LSP8_TOKENSRECIPIENT -} from "./LSP8Constants.sol"; - -/** - * @title LSP8IdentifiableDigitalAsset contract - * @author Matthew Stevens - * @dev Core Implementation of a LSP8 compliant contract. - */ -abstract contract LSP8IdentifiableDigitalAssetCore is - LSP4DigitalAssetMetadataCore, - ILSP8IdentifiableDigitalAsset -{ - using EnumerableSet for EnumerableSet.AddressSet; - using EnumerableSet for EnumerableSet.Bytes32Set; - - // --- Storage - - uint256 internal _existingTokens; - - // Mapping from `tokenId` to `tokenOwner` - mapping(bytes32 => address) internal _tokenOwners; - - // Mapping `tokenOwner` to owned tokenIds - mapping(address => EnumerableSet.Bytes32Set) internal _ownedTokens; - - // Mapping a `tokenId` to its authorized operator addresses. - mapping(bytes32 => EnumerableSet.AddressSet) internal _operators; - - // Mapping from `tokenId` to `dataKey` to `dataValue` - mapping(bytes32 => mapping(bytes32 => bytes)) internal _tokenIdData; - - // --- Token queries - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function totalSupply() public view virtual override returns (uint256) { - return _existingTokens; - } - - // --- Token owner queries - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function balanceOf( - address tokenOwner - ) public view virtual override returns (uint256) { - return _ownedTokens[tokenOwner].length(); - } - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function tokenOwnerOf( - bytes32 tokenId - ) public view virtual override returns (address) { - address tokenOwner = _tokenOwners[tokenId]; - - if (tokenOwner == address(0)) { - revert LSP8NonExistentTokenId(tokenId); - } - - return tokenOwner; - } - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function tokenIdsOf( - address tokenOwner - ) public view virtual override returns (bytes32[] memory) { - return _ownedTokens[tokenOwner].values(); - } - - // --- TokenId Metadata functionality - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function getDataForTokenId( - bytes32 tokenId, - bytes32 dataKey - ) public view virtual override returns (bytes memory dataValue) { - return _getDataForTokenId(tokenId, dataKey); - } - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function getDataBatchForTokenIds( - bytes32[] memory tokenIds, - bytes32[] memory dataKeys - ) public view virtual override returns (bytes[] memory dataValues) { - if (tokenIds.length != dataKeys.length) { - revert LSP8TokenIdsDataLengthMismatch(); - } - - dataValues = new bytes[](tokenIds.length); - - for (uint256 i; i < tokenIds.length; ) { - dataValues[i] = _getDataForTokenId(tokenIds[i], dataKeys[i]); - - // Increment the iterator in unchecked block to save gas - unchecked { - ++i; - } - } - - return dataValues; - } - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function setDataForTokenId( - bytes32 tokenId, - bytes32 dataKey, - bytes memory dataValue - ) public virtual override onlyOwner { - _setDataForTokenId(tokenId, dataKey, dataValue); - } - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function setDataBatchForTokenIds( - bytes32[] memory tokenIds, - bytes32[] memory dataKeys, - bytes[] memory dataValues - ) public virtual override onlyOwner { - if ( - tokenIds.length != dataKeys.length || - dataKeys.length != dataValues.length - ) { - revert LSP8TokenIdsDataLengthMismatch(); - } - - if (tokenIds.length == 0) { - revert LSP8TokenIdsDataEmptyArray(); - } - - for (uint256 i; i < tokenIds.length; ) { - _setDataForTokenId(tokenIds[i], dataKeys[i], dataValues[i]); - - // Increment the iterator in unchecked block to save gas - unchecked { - ++i; - } - } - } - - // --- General functionality - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - * - * @custom:info It's not possible to send value along the functions call due to the use of `delegatecall`. - */ - function batchCalls( - bytes[] calldata data - ) public virtual override returns (bytes[] memory results) { - results = new bytes[](data.length); - for (uint256 i; i < data.length; ) { - (bool success, bytes memory result) = address(this).delegatecall( - data[i] - ); - - if (!success) { - // Look for revert reason and bubble it up if present - if (result.length != 0) { - // The easiest way to bubble the revert reason is using memory via assembly - // solhint-disable no-inline-assembly - /// @solidity memory-safe-assembly - assembly { - let returndata_size := mload(result) - revert(add(32, result), returndata_size) - } - } else { - revert LSP8BatchCallFailed({callIndex: i}); - } - } - - results[i] = result; - - unchecked { - ++i; - } - } - } - - // --- Operator functionality - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function authorizeOperator( - address operator, - bytes32 tokenId, - bytes memory operatorNotificationData - ) public virtual override { - address tokenOwner = tokenOwnerOf(tokenId); - - if (tokenOwner != msg.sender) { - revert LSP8NotTokenOwner(tokenOwner, tokenId, msg.sender); - } - - if (operator == address(0)) { - revert LSP8CannotUseAddressZeroAsOperator(); - } - - if (tokenOwner == operator) { - revert LSP8TokenOwnerCannotBeOperator(); - } - - bool isAdded = _operators[tokenId].add(operator); - if (!isAdded) revert LSP8OperatorAlreadyAuthorized(operator, tokenId); - - emit OperatorAuthorizationChanged( - operator, - tokenOwner, - tokenId, - operatorNotificationData - ); - - bytes memory lsp1Data = abi.encode( - msg.sender, - tokenId, - true, // authorized - operatorNotificationData - ); - - _notifyTokenOperator(operator, lsp1Data); - } - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function revokeOperator( - address operator, - bytes32 tokenId, - bool notify, - bytes memory operatorNotificationData - ) public virtual override { - address tokenOwner = tokenOwnerOf(tokenId); - - if (msg.sender != tokenOwner) { - if (operator != msg.sender) { - revert LSP8RevokeOperatorNotAuthorized( - msg.sender, - tokenOwner, - tokenId - ); - } - } - - if (operator == address(0)) { - revert LSP8CannotUseAddressZeroAsOperator(); - } - - if (tokenOwner == operator) { - revert LSP8TokenOwnerCannotBeOperator(); - } - - _revokeOperator( - operator, - tokenOwner, - tokenId, - notify, - operatorNotificationData - ); - - if (notify) { - bytes memory lsp1Data = abi.encode( - tokenOwner, - tokenId, - false, // unauthorized - operatorNotificationData - ); - - _notifyTokenOperator(operator, lsp1Data); - } - } - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function isOperatorFor( - address operator, - bytes32 tokenId - ) public view virtual override returns (bool) { - return _isOperatorOrOwner(operator, tokenId); - } - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function getOperatorsOf( - bytes32 tokenId - ) public view virtual override returns (address[] memory) { - _existsOrError(tokenId); - - return _operators[tokenId].values(); - } - - /** - * @dev verifies if the `caller` is operator or owner for the `tokenId` - * @return true if `caller` is either operator or owner - */ - function _isOperatorOrOwner( - address caller, - bytes32 tokenId - ) internal view virtual returns (bool) { - return (caller == tokenOwnerOf(tokenId) || - _operators[tokenId].contains(caller)); - } - - // --- Transfer functionality - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function transfer( - address from, - address to, - bytes32 tokenId, - bool force, - bytes memory data - ) public virtual override { - if (!_isOperatorOrOwner(msg.sender, tokenId)) { - revert LSP8NotTokenOperator(tokenId, msg.sender); - } - - _transfer(from, to, tokenId, force, data); - } - - /** - * @inheritdoc ILSP8IdentifiableDigitalAsset - */ - function transferBatch( - address[] memory from, - address[] memory to, - bytes32[] memory tokenId, - bool[] memory force, - bytes[] memory data - ) public virtual override { - uint256 fromLength = from.length; - if ( - fromLength != to.length || - fromLength != tokenId.length || - fromLength != force.length || - fromLength != data.length - ) { - revert LSP8InvalidTransferBatch(); - } - - for (uint256 i; i < fromLength; ) { - transfer(from[i], to[i], tokenId[i], force[i], data[i]); - - unchecked { - ++i; - } - } - } - - /** - * @dev removes `operator` from the list of operators for the `tokenId` - */ - function _revokeOperator( - address operator, - address tokenOwner, - bytes32 tokenId, - bool notified, - bytes memory operatorNotificationData - ) internal virtual { - bool isRemoved = _operators[tokenId].remove(operator); - if (!isRemoved) revert LSP8NonExistingOperator(operator, tokenId); - - emit OperatorRevoked( - operator, - tokenOwner, - tokenId, - notified, - operatorNotificationData - ); - } - - /** - * @dev revoke all the current operators for a specific `tokenId` token which belongs to `tokenOwner`. - * - * @param tokenOwner The address that is the owner of the `tokenId`. - * @param tokenId The token to remove the associated operators for. - */ - function _clearOperators( - address tokenOwner, - bytes32 tokenId - ) internal virtual { - // here is a good example of why having multiple operators will be expensive.. we - // need to clear them on token transfer - // - // NOTE: this may cause a tx to fail if there is too many operators to clear, in which case - // the tokenOwner needs to call `revokeOperator` until there is less operators to clear and - // the desired `transfer` or `burn` call can succeed. - EnumerableSet.AddressSet storage operatorsForTokenId = _operators[ - tokenId - ]; - - uint256 operatorListLength = operatorsForTokenId.length(); - address operator; - for (uint256 i; i < operatorListLength; ) { - // we are emptying the list, always remove from index 0 - operator = operatorsForTokenId.at(0); - _revokeOperator(operator, tokenOwner, tokenId, false, ""); - - unchecked { - ++i; - } - } - } - - /** - * @dev Returns whether `tokenId` exists. - * - * Tokens start existing when they are minted ({_mint}), and stop existing when they are burned ({_burn}). - */ - function _exists(bytes32 tokenId) internal view virtual returns (bool) { - return _tokenOwners[tokenId] != address(0); - } - - /** - * @dev When `tokenId` does not exist then revert with an error. - */ - function _existsOrError(bytes32 tokenId) internal view virtual { - if (!_exists(tokenId)) { - revert LSP8NonExistentTokenId(tokenId); - } - } - - /** - * @dev Create `tokenId` by minting it and transfers it to `to`. - * - * @custom:info Any logic in the: - * - {_beforeTokenTransfer} function will run before updating the balances and ownership of `tokenId`s. - * - {_afterTokenTransfer} function will run after updating the balances and ownership of `tokenId`s, **but before notifying the recipient via LSP1**. - * - * @param to The address that will receive the minted `tokenId`. - * @param tokenId The token ID to create (= mint). - * @param force When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. - * @param data Any additional data the caller wants included in the emitted event, and sent in the hook of the `to` address. - * - * @custom:requirements - * - `tokenId` must not exist and not have been already minted. - * - `to` cannot be the zero address. - - * @custom:events {Transfer} event with `address(0)` as `from` address. - */ - function _mint( - address to, - bytes32 tokenId, - bool force, - bytes memory data - ) internal virtual { - if (to == address(0)) { - revert LSP8CannotSendToAddressZero(); - } - - // Check that `tokenId` is not already minted - if (_exists(tokenId)) { - revert LSP8TokenIdAlreadyMinted(tokenId); - } - - _beforeTokenTransfer(address(0), to, tokenId, data); - - // Check that `tokenId` was not minted inside the `_beforeTokenTransfer` hook - if (_exists(tokenId)) { - revert LSP8TokenIdAlreadyMinted(tokenId); - } - - // token being minted - ++_existingTokens; - - _ownedTokens[to].add(tokenId); - _tokenOwners[tokenId] = to; - - emit Transfer(msg.sender, address(0), to, tokenId, force, data); - - _afterTokenTransfer(address(0), to, tokenId, data); - - bytes memory lsp1Data = abi.encode( - msg.sender, - address(0), - to, - tokenId, - data - ); - _notifyTokenReceiver(to, force, lsp1Data); - } - - /** - * @dev Burn a specific `tokenId`, removing the `tokenId` from the {tokenIdsOf} the caller and decreasing its {balanceOf} by -1. - * This will also clear all the operators allowed to transfer the `tokenId`. - * - * The owner of the `tokenId` will be notified about the `tokenId` being transferred through its LSP1 {universalReceiver} - * function, if it is a contract that supports the LSP1 interface. Its {universalReceiver} function will receive - * all the parameters in the calldata packed encoded. - * - * @custom:info Any logic in the: - * - {_beforeTokenTransfer} function will run before updating the balances and ownership of `tokenId`s. - * - {_afterTokenTransfer} function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender via LSP1**. - * - * @param tokenId The token to burn. - * @param data Any additional data the caller wants included in the emitted event, and sent in the LSP1 hook on the token owner's address. - * - * @custom:hint In dApps, you can know which addresses are burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. - * - * @custom:requirements - * - `tokenId` must exist. - * - * @custom:events {Transfer} event with `address(0)` as the `to` address. - */ - function _burn(bytes32 tokenId, bytes memory data) internal virtual { - address tokenOwner = tokenOwnerOf(tokenId); - - _beforeTokenTransfer(tokenOwner, address(0), tokenId, data); - - // Re-fetch and update `tokenOwner` in case `tokenId` - // was transferred inside the `_beforeTokenTransfer` hook - tokenOwner = tokenOwnerOf(tokenId); - - // token being burned - --_existingTokens; - - _clearOperators(tokenOwner, tokenId); - - _ownedTokens[tokenOwner].remove(tokenId); - delete _tokenOwners[tokenId]; - - emit Transfer(msg.sender, tokenOwner, address(0), tokenId, false, data); - - _afterTokenTransfer(tokenOwner, address(0), tokenId, data); - - bytes memory lsp1Data = abi.encode( - msg.sender, - tokenOwner, - address(0), - tokenId, - data - ); - - _notifyTokenSender(tokenOwner, lsp1Data); - } - - /** - * @dev Change the owner of the `tokenId` from `from` to `to`. - * - * Both the sender and recipient will be notified of the `tokenId` being transferred through their LSP1 {universalReceiver} - * function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive - * all the parameters in the calldata packed encoded. - * - * @custom:info Any logic in the: - * - {_beforeTokenTransfer} function will run before updating the balances and ownership of `tokenId`s. - * - {_afterTokenTransfer} function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender/recipient via LSP1**. - * - * @param from The sender address. - * @param to The recipient address. - * @param tokenId The token to transfer. - * @param force When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. - * @param data Additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. - * - * @custom:requirements - * - `to` cannot be the zero address. - * - `tokenId` token must be owned by `from`. - * - * @custom:events {Transfer} event. - * - * @custom:danger This internal function does not check if the sender is authorized or not to operate on the `tokenId`. - */ - function _transfer( - address from, - address to, - bytes32 tokenId, - bool force, - bytes memory data - ) internal virtual { - address tokenOwner = tokenOwnerOf(tokenId); - if (tokenOwner != from) { - revert LSP8NotTokenOwner(tokenOwner, tokenId, from); - } - - if (to == address(0)) { - revert LSP8CannotSendToAddressZero(); - } - - _beforeTokenTransfer(from, to, tokenId, data); - - // Check that `tokenId`'s owner was not changed inside the `_beforeTokenTransfer` hook - address currentTokenOwner = tokenOwnerOf(tokenId); - if (tokenOwner != currentTokenOwner) { - revert LSP8TokenOwnerChanged( - tokenId, - tokenOwner, - currentTokenOwner - ); - } - - _clearOperators(from, tokenId); - - _ownedTokens[from].remove(tokenId); - _ownedTokens[to].add(tokenId); - _tokenOwners[tokenId] = to; - - emit Transfer(msg.sender, from, to, tokenId, force, data); - - _afterTokenTransfer(from, to, tokenId, data); - - bytes memory lsp1Data = abi.encode(msg.sender, from, to, tokenId, data); - - _notifyTokenSender(from, lsp1Data); - _notifyTokenReceiver(to, force, lsp1Data); - } - - /** - * @dev Sets data for a specific `tokenId` and `dataKey` in the ERC725Y storage - * The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated - * @param tokenId The unique identifier for a token. - * @param dataKey The key for the data to set. - * @param dataValue The value to set for the given data key. - * @custom:events {TokenIdDataChanged} event. - */ - function _setDataForTokenId( - bytes32 tokenId, - bytes32 dataKey, - bytes memory dataValue - ) internal virtual { - _tokenIdData[tokenId][dataKey] = dataValue; - emit TokenIdDataChanged(tokenId, dataKey, dataValue); - } - - /** - * @dev Retrieves data for a specific `tokenId` and `dataKey` from the ERC725Y storage - * The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated - * @param tokenId The unique identifier for a token. - * @param dataKey The key for the data to retrieve. - * @return dataValues The data value associated with the given `tokenId` and `dataKey`. - */ - function _getDataForTokenId( - bytes32 tokenId, - bytes32 dataKey - ) internal view virtual returns (bytes memory dataValues) { - return _tokenIdData[tokenId][dataKey]; - } - - /** - * @dev Hook that is called before any token transfer, including minting and burning. - * Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. - * - * @param from The sender address - * @param to The recipient address - * @param tokenId The tokenId to transfer - * @param data The data sent alongside the transfer - */ - function _beforeTokenTransfer( - address from, - address to, - bytes32 tokenId, - bytes memory data // solhint-disable-next-line no-empty-blocks - ) internal virtual {} - - /** - * @dev Hook that is called after any token transfer, including minting and burning. - * Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. - * - * @param from The sender address - * @param to The recipient address - * @param tokenId The tokenId to transfer - * @param data The data sent alongside the transfer - */ - function _afterTokenTransfer( - address from, - address to, - bytes32 tokenId, - bytes memory data // solhint-disable-next-line no-empty-blocks - ) internal virtual {} - - /** - * @dev Attempt to notify the operator `operator` about the `tokenId` being authorized. - * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP8_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. - * If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. - - * @param operator The address to call the {universalReceiver} function on. - * @param lsp1Data the data to be sent to the `operator` address in the `universalReceiver` call. - */ - function _notifyTokenOperator( - address operator, - bytes memory lsp1Data - ) internal virtual { - LSP1Utils.notifyUniversalReceiver( - operator, - _TYPEID_LSP8_TOKENOPERATOR, - lsp1Data - ); - } - - /** - * @dev Attempt to notify the token sender `from` about the `tokenId` being transferred. - * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP8_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. - * If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. - - * @param from The address to call the {universalReceiver} function on. - * @param lsp1Data the data to be sent to the `from` address in the `universalReceiver` call. - */ - function _notifyTokenSender( - address from, - bytes memory lsp1Data - ) internal virtual { - LSP1Utils.notifyUniversalReceiver( - from, - _TYPEID_LSP8_TOKENSSENDER, - lsp1Data - ); - } - - /** - * @dev Attempt to notify the token receiver `to` about the `tokenId` being received. - * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP8_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. - * - * If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. - * - if `force` is set to `true`, nothing will happen and no notification will be sent. - * - if `force` is set to `false, the transaction will revert. - * - * @param to The address to call the {universalReceiver} function on. - * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. - * @param lsp1Data The data to be sent to the `to` address in the `universalReceiver(...)` call. - */ - function _notifyTokenReceiver( - address to, - bool force, - bytes memory lsp1Data - ) internal virtual { - if ( - ERC165Checker.supportsERC165InterfaceUnchecked( - to, - _INTERFACEID_LSP1 - ) - ) { - ILSP1(to).universalReceiver(_TYPEID_LSP8_TOKENSRECIPIENT, lsp1Data); - } else if (!force) { - if (to.code.length != 0) { - revert LSP8NotifyTokenReceiverContractMissingLSP1Interface(to); - } else { - revert LSP8NotifyTokenReceiverIsEOA(to); - } - } - } -} diff --git a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol index fa75a43c5..afb58ca4a 100644 --- a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol @@ -3,42 +3,75 @@ pragma solidity ^0.8.12; // interfaces import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; - -// modules -import {ERC725YCore} from "@erc725/smart-contracts/contracts/ERC725YCore.sol"; import { - LSP8IdentifiableDigitalAssetCore -} from "./LSP8IdentifiableDigitalAssetCore.sol"; + ILSP1UniversalReceiver as ILSP1 +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; import { - LSP4DigitalAssetMetadataInitAbstract -} from "@lukso/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol"; + ILSP8IdentifiableDigitalAsset +} from "./ILSP8IdentifiableDigitalAsset.sol"; +// modules import { - LSP4DigitalAssetMetadataCore -} from "@lukso/lsp4-contracts/contracts/LSP4DigitalAssetMetadataCore.sol"; + LSP4DigitalAssetMetadataInitAbstract, + ERC725YInitAbstract +} from "@lukso/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol"; import { - LSP17Extendable -} from "@lukso/lsp17contractextension-contracts/contracts/LSP17Extendable.sol"; + LSP17ExtendableInitAbstract +} from "@lukso/lsp17contractextension-contracts/contracts/LSP17ExtendableInitAbstract.sol"; // libraries +import { + EnumerableSet +} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import { + ERC165Checker +} from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; +import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; import {LSP2Utils} from "@lukso/lsp2-contracts/contracts/LSP2Utils.sol"; // constants -import {_INTERFACEID_LSP8, _LSP8_TOKENID_FORMAT_KEY} from "./LSP8Constants.sol"; - -// errors import { - LSP8TokenContractCannotHoldValue, - LSP8TokenIdFormatNotEditable -} from "./LSP8Errors.sol"; - + _INTERFACEID_LSP1 +} from "@lukso/lsp1-contracts/contracts/LSP1Constants.sol"; import { _LSP17_EXTENSION_PREFIX } from "@lukso/lsp17contractextension-contracts/contracts/LSP17Constants.sol"; +import { + _INTERFACEID_LSP8, + _LSP8_TOKENID_FORMAT_KEY, + _TYPEID_LSP8_TOKENOPERATOR, + _TYPEID_LSP8_TOKENSSENDER, + _TYPEID_LSP8_TOKENSRECIPIENT +} from "./LSP8Constants.sol"; // errors - +import { + NoExtensionFoundForFunctionSelector, + InvalidFunctionSelector, + InvalidExtensionAddress +} from "@lukso/lsp17contractextension-contracts/contracts/LSP17Errors.sol"; +import { + LSP8TokenContractCannotHoldValue, + LSP8TokenIdFormatNotEditable, + LSP8NonExistentTokenId, + LSP8NotTokenOwner, + LSP8CannotUseAddressZeroAsOperator, + LSP8TokenOwnerCannotBeOperator, + LSP8OperatorAlreadyAuthorized, + LSP8NotTokenOperator, + LSP8InvalidTransferBatch, + LSP8NonExistingOperator, + LSP8CannotSendToAddressZero, + LSP8TokenIdAlreadyMinted, + LSP8NotifyTokenReceiverContractMissingLSP1Interface, + LSP8NotifyTokenReceiverIsEOA, + LSP8TokenIdsDataLengthMismatch, + LSP8TokenIdsDataEmptyArray, + LSP8BatchCallFailed, + LSP8TokenOwnerChanged, + LSP8RevokeOperatorNotAuthorized +} from "./LSP8Errors.sol"; import { NoExtensionFoundForFunctionSelector, InvalidFunctionSelector, @@ -57,10 +90,26 @@ import { * For a generic mechanism, see {LSP7Mintable}. */ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is + ILSP8IdentifiableDigitalAsset, LSP4DigitalAssetMetadataInitAbstract, - LSP8IdentifiableDigitalAssetCore, - LSP17Extendable + LSP17ExtendableInitAbstract { + using EnumerableSet for EnumerableSet.AddressSet; + using EnumerableSet for EnumerableSet.Bytes32Set; + + // --- Storage + + uint256 internal _existingTokens; + + // Mapping from `tokenId` to `tokenOwner` + mapping(bytes32 => address) internal _tokenOwners; + + // Mapping `tokenOwner` to owned tokenIds + mapping(address => EnumerableSet.Bytes32Set) internal _ownedTokens; + + // Mapping a `tokenId` to its authorized operator addresses. + mapping(bytes32 => EnumerableSet.AddressSet) internal _operators; + /** * @dev Initialize a `LSP8IdentifiableDigitalAsset` contract and set the tokenId format inside the ERC725Y storage of the contract. * This will also set the token `name_` and `symbol_` under the ERC725Y data keys `LSP4TokenName` and `LSP4TokenSymbol`. @@ -94,7 +143,7 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is ); } - // fallback function + // fallback functions /** * @notice The `fallback` function was called with the following amount of native tokens: `msg.value`; and the following calldata: `callData`. @@ -197,9 +246,7 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is ); // Check if there is an extension stored under the generated data key - bytes memory extensionAddress = ERC725YCore._getData( - mappedExtensionDataKey - ); + bytes memory extensionAddress = _getData(mappedExtensionDataKey); if (extensionAddress.length != 20 && extensionAddress.length != 0) revert InvalidExtensionAddress(extensionAddress); @@ -215,13 +262,15 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is public view virtual - override(IERC165, ERC725YCore, LSP17Extendable) + override(ERC725YInitAbstract, LSP17ExtendableInitAbstract) returns (bool) { return interfaceId == _INTERFACEID_LSP8 || super.supportsInterface(interfaceId) || - LSP17Extendable._supportsInterfaceInERC165Extension(interfaceId); + LSP17ExtendableInitAbstract._supportsInterfaceInERC165Extension( + interfaceId + ); } /** @@ -232,17 +281,734 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is function _setData( bytes32 dataKey, bytes memory dataValue - ) - internal - virtual - override( - LSP4DigitalAssetMetadataInitAbstract, - LSP4DigitalAssetMetadataCore - ) - { + ) internal virtual override { if (dataKey == _LSP8_TOKENID_FORMAT_KEY) { revert LSP8TokenIdFormatNotEditable(); } LSP4DigitalAssetMetadataInitAbstract._setData(dataKey, dataValue); } + + // --- Token queries + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function totalSupply() public view virtual override returns (uint256) { + return _existingTokens; + } + + // --- Token owner queries + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function balanceOf( + address tokenOwner + ) public view virtual override returns (uint256) { + return _ownedTokens[tokenOwner].length(); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function tokenOwnerOf( + bytes32 tokenId + ) public view virtual override returns (address) { + address tokenOwner = _tokenOwners[tokenId]; + + if (tokenOwner == address(0)) { + revert LSP8NonExistentTokenId(tokenId); + } + + return tokenOwner; + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function tokenIdsOf( + address tokenOwner + ) public view virtual override returns (bytes32[] memory) { + return _ownedTokens[tokenOwner].values(); + } + + // --- TokenId Metadata functionality + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey + ) public view virtual override returns (bytes memory dataValue) { + return _getDataForTokenId(tokenId, dataKey); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function getDataBatchForTokenIds( + bytes32[] memory tokenIds, + bytes32[] memory dataKeys + ) public view virtual override returns (bytes[] memory dataValues) { + if (tokenIds.length != dataKeys.length) { + revert LSP8TokenIdsDataLengthMismatch(); + } + + dataValues = new bytes[](tokenIds.length); + + for (uint256 i; i < tokenIds.length; ) { + dataValues[i] = _getDataForTokenId(tokenIds[i], dataKeys[i]); + + // Increment the iterator in unchecked block to save gas + unchecked { + ++i; + } + } + + return dataValues; + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes memory dataValue + ) public virtual override onlyOwner { + _setDataForTokenId(tokenId, dataKey, dataValue); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function setDataBatchForTokenIds( + bytes32[] memory tokenIds, + bytes32[] memory dataKeys, + bytes[] memory dataValues + ) public virtual override onlyOwner { + if ( + tokenIds.length != dataKeys.length || + dataKeys.length != dataValues.length + ) { + revert LSP8TokenIdsDataLengthMismatch(); + } + + if (tokenIds.length == 0) { + revert LSP8TokenIdsDataEmptyArray(); + } + + for (uint256 i; i < tokenIds.length; ) { + _setDataForTokenId(tokenIds[i], dataKeys[i], dataValues[i]); + + // Increment the iterator in unchecked block to save gas + unchecked { + ++i; + } + } + } + + // --- General functionality + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + * + * @custom:info It's not possible to send value along the functions call due to the use of `delegatecall`. + */ + function batchCalls( + bytes[] calldata data + ) public virtual override returns (bytes[] memory results) { + results = new bytes[](data.length); + for (uint256 i; i < data.length; ) { + (bool success, bytes memory result) = address(this).delegatecall( + data[i] + ); + + if (!success) { + // Look for revert reason and bubble it up if present + if (result.length != 0) { + // The easiest way to bubble the revert reason is using memory via assembly + // solhint-disable no-inline-assembly + /// @solidity memory-safe-assembly + assembly { + let returndata_size := mload(result) + revert(add(32, result), returndata_size) + } + } else { + revert LSP8BatchCallFailed({callIndex: i}); + } + } + + results[i] = result; + + unchecked { + ++i; + } + } + } + + // --- Operator functionality + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function authorizeOperator( + address operator, + bytes32 tokenId, + bytes memory operatorNotificationData + ) public virtual override { + address tokenOwner = tokenOwnerOf(tokenId); + + if (tokenOwner != msg.sender) { + revert LSP8NotTokenOwner(tokenOwner, tokenId, msg.sender); + } + + if (operator == address(0)) { + revert LSP8CannotUseAddressZeroAsOperator(); + } + + if (tokenOwner == operator) { + revert LSP8TokenOwnerCannotBeOperator(); + } + + bool isAdded = _operators[tokenId].add(operator); + if (!isAdded) revert LSP8OperatorAlreadyAuthorized(operator, tokenId); + + emit OperatorAuthorizationChanged( + operator, + tokenOwner, + tokenId, + operatorNotificationData + ); + + bytes memory lsp1Data = abi.encode( + msg.sender, + tokenId, + true, // authorized + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function revokeOperator( + address operator, + bytes32 tokenId, + bool notify, + bytes memory operatorNotificationData + ) public virtual override { + address tokenOwner = tokenOwnerOf(tokenId); + + if (msg.sender != tokenOwner) { + if (operator != msg.sender) { + revert LSP8RevokeOperatorNotAuthorized( + msg.sender, + tokenOwner, + tokenId + ); + } + } + + if (operator == address(0)) { + revert LSP8CannotUseAddressZeroAsOperator(); + } + + if (tokenOwner == operator) { + revert LSP8TokenOwnerCannotBeOperator(); + } + + _revokeOperator( + operator, + tokenOwner, + tokenId, + notify, + operatorNotificationData + ); + + if (notify) { + bytes memory lsp1Data = abi.encode( + tokenOwner, + tokenId, + false, // unauthorized + operatorNotificationData + ); + + _notifyTokenOperator(operator, lsp1Data); + } + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function isOperatorFor( + address operator, + bytes32 tokenId + ) public view virtual override returns (bool) { + return _isOperatorOrOwner(operator, tokenId); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function getOperatorsOf( + bytes32 tokenId + ) public view virtual override returns (address[] memory) { + _existsOrError(tokenId); + + return _operators[tokenId].values(); + } + + /** + * @dev verifies if the `caller` is operator or owner for the `tokenId` + * @return true if `caller` is either operator or owner + */ + function _isOperatorOrOwner( + address caller, + bytes32 tokenId + ) internal view virtual returns (bool) { + return (caller == tokenOwnerOf(tokenId) || + _operators[tokenId].contains(caller)); + } + + // --- Transfer functionality + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes memory data + ) public virtual override { + if (!_isOperatorOrOwner(msg.sender, tokenId)) { + revert LSP8NotTokenOperator(tokenId, msg.sender); + } + + _transfer(from, to, tokenId, force, data); + } + + /** + * @inheritdoc ILSP8IdentifiableDigitalAsset + */ + function transferBatch( + address[] memory from, + address[] memory to, + bytes32[] memory tokenId, + bool[] memory force, + bytes[] memory data + ) public virtual override { + uint256 fromLength = from.length; + if ( + fromLength != to.length || + fromLength != tokenId.length || + fromLength != force.length || + fromLength != data.length + ) { + revert LSP8InvalidTransferBatch(); + } + + for (uint256 i; i < fromLength; ) { + transfer(from[i], to[i], tokenId[i], force[i], data[i]); + + unchecked { + ++i; + } + } + } + + /** + * @dev removes `operator` from the list of operators for the `tokenId` + */ + function _revokeOperator( + address operator, + address tokenOwner, + bytes32 tokenId, + bool notified, + bytes memory operatorNotificationData + ) internal virtual { + bool isRemoved = _operators[tokenId].remove(operator); + if (!isRemoved) revert LSP8NonExistingOperator(operator, tokenId); + + emit OperatorRevoked( + operator, + tokenOwner, + tokenId, + notified, + operatorNotificationData + ); + } + + /** + * @dev revoke all the current operators for a specific `tokenId` token which belongs to `tokenOwner`. + * + * @param tokenOwner The address that is the owner of the `tokenId`. + * @param tokenId The token to remove the associated operators for. + */ + function _clearOperators( + address tokenOwner, + bytes32 tokenId + ) internal virtual { + // here is a good example of why having multiple operators will be expensive.. we + // need to clear them on token transfer + // + // NOTE: this may cause a tx to fail if there is too many operators to clear, in which case + // the tokenOwner needs to call `revokeOperator` until there is less operators to clear and + // the desired `transfer` or `burn` call can succeed. + EnumerableSet.AddressSet storage operatorsForTokenId = _operators[ + tokenId + ]; + + uint256 operatorListLength = operatorsForTokenId.length(); + address operator; + for (uint256 i; i < operatorListLength; ) { + // we are emptying the list, always remove from index 0 + operator = operatorsForTokenId.at(0); + _revokeOperator(operator, tokenOwner, tokenId, false, ""); + + unchecked { + ++i; + } + } + } + + /** + * @dev Returns whether `tokenId` exists. + * + * Tokens start existing when they are minted ({_mint}), and stop existing when they are burned ({_burn}). + */ + function _exists(bytes32 tokenId) internal view virtual returns (bool) { + return _tokenOwners[tokenId] != address(0); + } + + /** + * @dev When `tokenId` does not exist then revert with an error. + */ + function _existsOrError(bytes32 tokenId) internal view virtual { + if (!_exists(tokenId)) { + revert LSP8NonExistentTokenId(tokenId); + } + } + + /** + * @dev Create `tokenId` by minting it and transfers it to `to`. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances and ownership of `tokenId`s. + * - {_afterTokenTransfer} function will run after updating the balances and ownership of `tokenId`s, **but before notifying the recipient via LSP1**. + * + * @param to The address that will receive the minted `tokenId`. + * @param tokenId The token ID to create (= mint). + * @param force When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. + * @param data Any additional data the caller wants included in the emitted event, and sent in the hook of the `to` address. + * + * @custom:requirements + * - `tokenId` must not exist and not have been already minted. + * - `to` cannot be the zero address. + + * @custom:events {Transfer} event with `address(0)` as `from` address. + */ + function _mint( + address to, + bytes32 tokenId, + bool force, + bytes memory data + ) internal virtual { + if (to == address(0)) { + revert LSP8CannotSendToAddressZero(); + } + + // Check that `tokenId` is not already minted + if (_exists(tokenId)) { + revert LSP8TokenIdAlreadyMinted(tokenId); + } + + _beforeTokenTransfer(address(0), to, tokenId, data); + + // Check that `tokenId` was not minted inside the `_beforeTokenTransfer` hook + if (_exists(tokenId)) { + revert LSP8TokenIdAlreadyMinted(tokenId); + } + + // token being minted + ++_existingTokens; + + _ownedTokens[to].add(tokenId); + _tokenOwners[tokenId] = to; + + emit Transfer(msg.sender, address(0), to, tokenId, force, data); + + _afterTokenTransfer(address(0), to, tokenId, data); + + bytes memory lsp1Data = abi.encode( + msg.sender, + address(0), + to, + tokenId, + data + ); + _notifyTokenReceiver(to, force, lsp1Data); + } + + /** + * @dev Burn a specific `tokenId`, removing the `tokenId` from the {tokenIdsOf} the caller and decreasing its {balanceOf} by -1. + * This will also clear all the operators allowed to transfer the `tokenId`. + * + * The owner of the `tokenId` will be notified about the `tokenId` being transferred through its LSP1 {universalReceiver} + * function, if it is a contract that supports the LSP1 interface. Its {universalReceiver} function will receive + * all the parameters in the calldata packed encoded. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances and ownership of `tokenId`s. + * - {_afterTokenTransfer} function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender via LSP1**. + * + * @param tokenId The token to burn. + * @param data Any additional data the caller wants included in the emitted event, and sent in the LSP1 hook on the token owner's address. + * + * @custom:hint In dApps, you can know which addresses are burning tokens by listening for the `Transfer` event and filter with the zero address as `to`. + * + * @custom:requirements + * - `tokenId` must exist. + * + * @custom:events {Transfer} event with `address(0)` as the `to` address. + */ + function _burn(bytes32 tokenId, bytes memory data) internal virtual { + address tokenOwner = tokenOwnerOf(tokenId); + + _beforeTokenTransfer(tokenOwner, address(0), tokenId, data); + + // Re-fetch and update `tokenOwner` in case `tokenId` + // was transferred inside the `_beforeTokenTransfer` hook + tokenOwner = tokenOwnerOf(tokenId); + + // token being burned + --_existingTokens; + + _clearOperators(tokenOwner, tokenId); + + _ownedTokens[tokenOwner].remove(tokenId); + delete _tokenOwners[tokenId]; + + emit Transfer(msg.sender, tokenOwner, address(0), tokenId, false, data); + + _afterTokenTransfer(tokenOwner, address(0), tokenId, data); + + bytes memory lsp1Data = abi.encode( + msg.sender, + tokenOwner, + address(0), + tokenId, + data + ); + + _notifyTokenSender(tokenOwner, lsp1Data); + } + + /** + * @dev Change the owner of the `tokenId` from `from` to `to`. + * + * Both the sender and recipient will be notified of the `tokenId` being transferred through their LSP1 {universalReceiver} + * function, if they are contracts that support the LSP1 interface. Their `universalReceiver` function will receive + * all the parameters in the calldata packed encoded. + * + * @custom:info Any logic in the: + * - {_beforeTokenTransfer} function will run before updating the balances and ownership of `tokenId`s. + * - {_afterTokenTransfer} function will run after updating the balances and ownership of `tokenId`s, **but before notifying the sender/recipient via LSP1**. + * + * @param from The sender address. + * @param to The recipient address. + * @param tokenId The token to transfer. + * @param force When set to `true`, `to` may be any address. When set to `false`, `to` must be a contract that supports the LSP1 standard. + * @param data Additional data the caller wants included in the emitted event, and sent in the hooks to `from` and `to` addresses. + * + * @custom:requirements + * - `to` cannot be the zero address. + * - `tokenId` token must be owned by `from`. + * + * @custom:events {Transfer} event. + * + * @custom:danger This internal function does not check if the sender is authorized or not to operate on the `tokenId`. + */ + function _transfer( + address from, + address to, + bytes32 tokenId, + bool force, + bytes memory data + ) internal virtual { + address tokenOwner = tokenOwnerOf(tokenId); + if (tokenOwner != from) { + revert LSP8NotTokenOwner(tokenOwner, tokenId, from); + } + + if (to == address(0)) { + revert LSP8CannotSendToAddressZero(); + } + + _beforeTokenTransfer(from, to, tokenId, data); + + // Check that `tokenId`'s owner was not changed inside the `_beforeTokenTransfer` hook + address currentTokenOwner = tokenOwnerOf(tokenId); + if (tokenOwner != currentTokenOwner) { + revert LSP8TokenOwnerChanged( + tokenId, + tokenOwner, + currentTokenOwner + ); + } + + _clearOperators(from, tokenId); + + _ownedTokens[from].remove(tokenId); + _ownedTokens[to].add(tokenId); + _tokenOwners[tokenId] = to; + + emit Transfer(msg.sender, from, to, tokenId, force, data); + + _afterTokenTransfer(from, to, tokenId, data); + + bytes memory lsp1Data = abi.encode(msg.sender, from, to, tokenId, data); + + _notifyTokenSender(from, lsp1Data); + _notifyTokenReceiver(to, force, lsp1Data); + } + + /** + * @dev Sets data for a specific `tokenId` and `dataKey` in the ERC725Y storage + * The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + * @param tokenId The unique identifier for a token. + * @param dataKey The key for the data to set. + * @param dataValue The value to set for the given data key. + * @custom:events {TokenIdDataChanged} event. + */ + function _setDataForTokenId( + bytes32 tokenId, + bytes32 dataKey, + bytes memory dataValue + ) internal virtual { + _store[keccak256(bytes.concat(tokenId, dataKey))] = dataValue; + emit TokenIdDataChanged(tokenId, dataKey, dataValue); + } + + /** + * @dev Retrieves data for a specific `tokenId` and `dataKey` from the ERC725Y storage + * The ERC725Y data key is the hash of the `tokenId` and `dataKey` concatenated + * @param tokenId The unique identifier for a token. + * @param dataKey The key for the data to retrieve. + * @return dataValues The data value associated with the given `tokenId` and `dataKey`. + */ + function _getDataForTokenId( + bytes32 tokenId, + bytes32 dataKey + ) internal view virtual returns (bytes memory dataValues) { + return _store[keccak256(bytes.concat(tokenId, dataKey))]; + } + + /** + * @dev Hook that is called before any token transfer, including minting and burning. + * Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. + * + * @param from The sender address + * @param to The recipient address + * @param tokenId The tokenId to transfer + * @param data The data sent alongside the transfer + */ + function _beforeTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes memory data // solhint-disable-next-line no-empty-blocks + ) internal virtual {} + + /** + * @dev Hook that is called after any token transfer, including minting and burning. + * Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. + * + * @param from The sender address + * @param to The recipient address + * @param tokenId The tokenId to transfer + * @param data The data sent alongside the transfer + */ + function _afterTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes memory data // solhint-disable-next-line no-empty-blocks + ) internal virtual {} + + /** + * @dev Attempt to notify the operator `operator` about the `tokenId` being authorized. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP8_TOKENOPERATOR` as typeId, if `operator` is a contract that supports the LSP1 interface. + * If `operator` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + + * @param operator The address to call the {universalReceiver} function on. + * @param lsp1Data the data to be sent to the `operator` address in the `universalReceiver` call. + */ + function _notifyTokenOperator( + address operator, + bytes memory lsp1Data + ) internal virtual { + LSP1Utils.notifyUniversalReceiver( + operator, + _TYPEID_LSP8_TOKENOPERATOR, + lsp1Data + ); + } + + /** + * @dev Attempt to notify the token sender `from` about the `tokenId` being transferred. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP8_TOKENSSENDER` as typeId, if `from` is a contract that supports the LSP1 interface. + * If `from` is an EOA or a contract that does not support the LSP1 interface, nothing will happen and no notification will be sent. + + * @param from The address to call the {universalReceiver} function on. + * @param lsp1Data the data to be sent to the `from` address in the `universalReceiver` call. + */ + function _notifyTokenSender( + address from, + bytes memory lsp1Data + ) internal virtual { + LSP1Utils.notifyUniversalReceiver( + from, + _TYPEID_LSP8_TOKENSSENDER, + lsp1Data + ); + } + + /** + * @dev Attempt to notify the token receiver `to` about the `tokenId` being received. + * This is done by calling its {universalReceiver} function with the `_TYPEID_LSP8_TOKENSRECIPIENT` as typeId, if `to` is a contract that supports the LSP1 interface. + * + * If `to` is is an EOA or a contract that does not support the LSP1 interface, the behaviour will depend on the `force` boolean flag. + * - if `force` is set to `true`, nothing will happen and no notification will be sent. + * - if `force` is set to `false, the transaction will revert. + * + * @param to The address to call the {universalReceiver} function on. + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. + * @param lsp1Data The data to be sent to the `to` address in the `universalReceiver(...)` call. + */ + function _notifyTokenReceiver( + address to, + bool force, + bytes memory lsp1Data + ) internal virtual { + if ( + ERC165Checker.supportsERC165InterfaceUnchecked( + to, + _INTERFACEID_LSP1 + ) + ) { + ILSP1(to).universalReceiver(_TYPEID_LSP8_TOKENSRECIPIENT, lsp1Data); + } else if (!force) { + if (to.code.length != 0) { + revert LSP8NotifyTokenReceiverContractMissingLSP1Interface(to); + } else { + revert LSP8NotifyTokenReceiverIsEOA(to); + } + } + } } diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8Enumerable.sol b/packages/lsp8-contracts/contracts/extensions/LSP8Enumerable.sol index ebae4ea6c..92816a248 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8Enumerable.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8Enumerable.sol @@ -3,8 +3,7 @@ pragma solidity ^0.8.12; // modules import { - LSP8IdentifiableDigitalAsset, - LSP8IdentifiableDigitalAssetCore + LSP8IdentifiableDigitalAsset } from "../LSP8IdentifiableDigitalAsset.sol"; /** @@ -31,7 +30,7 @@ abstract contract LSP8Enumerable is LSP8IdentifiableDigitalAsset { } /** - * @inheritdoc LSP8IdentifiableDigitalAssetCore + * @inheritdoc LSP8IdentifiableDigitalAsset * * @param from The address sending the `tokenId` (`address(0)` when `tokenId` is being minted). * @param to The address receiving the `tokenId` (`address(0)` when `tokenId` is being burnt). @@ -43,7 +42,7 @@ abstract contract LSP8Enumerable is LSP8IdentifiableDigitalAsset { address to, bytes32 tokenId, bytes memory data - ) internal virtual override(LSP8IdentifiableDigitalAssetCore) { + ) internal virtual override { // `tokenId` being minted if (from == address(0)) { uint256 index = totalSupply(); diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8EnumerableInitAbstract.sol b/packages/lsp8-contracts/contracts/extensions/LSP8EnumerableInitAbstract.sol index 2d4a0914c..762a4d4c9 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8EnumerableInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8EnumerableInitAbstract.sol @@ -3,8 +3,7 @@ pragma solidity ^0.8.12; // modules import { - LSP8IdentifiableDigitalAssetInitAbstract, - LSP8IdentifiableDigitalAssetCore + LSP8IdentifiableDigitalAssetInitAbstract } from "../LSP8IdentifiableDigitalAssetInitAbstract.sol"; /** @@ -31,7 +30,7 @@ abstract contract LSP8EnumerableInitAbstract is } /** - * @inheritdoc LSP8IdentifiableDigitalAssetCore + * @inheritdoc LSP8IdentifiableDigitalAssetInitAbstract * * @param from The address sending the `tokenId` (`address(0)` when `tokenId` is being minted). * @param to The address receiving the `tokenId` (`address(0)` when `tokenId` is being burnt). @@ -43,7 +42,7 @@ abstract contract LSP8EnumerableInitAbstract is address to, bytes32 tokenId, bytes memory data - ) internal virtual override(LSP8IdentifiableDigitalAssetCore) { + ) internal virtual override { if (from == address(0)) { uint256 index = totalSupply(); _indexToken[index] = tokenId; diff --git a/packages/lsp8-contracts/package.json b/packages/lsp8-contracts/package.json index 51925f188..6d339b4db 100644 --- a/packages/lsp8-contracts/package.json +++ b/packages/lsp8-contracts/package.json @@ -47,11 +47,11 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3", + "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0-1.tgz", + "@openzeppelin/contracts": "^4.9.6", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0" + "@lukso/lsp4-contracts": "*", + "@lukso/lsp17contractextension-contracts": "*" } } diff --git a/template/package.json b/template/package.json index d9439ca23..6c6368add 100644 --- a/template/package.json +++ b/template/package.json @@ -51,6 +51,6 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } } From 03dbbded2fdd52aab9372e164a148055f335dfd1 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Tue, 3 Sep 2024 11:34:34 +0900 Subject: [PATCH 43/94] build: add local tarball build for unreleased `@erc725/smart-contracts` --- .gitignore | 1 - .../erc725-smart-contracts-8.0.0-1.tgz | Bin 0 -> 14324 bytes .../erc725-smart-contracts-8.0.0-1.tgz | Bin 0 -> 14324 bytes .../erc725-smart-contracts-8.0.0-1.tgz | Bin 0 -> 14324 bytes 4 files changed, 1 deletion(-) create mode 100644 packages/lsp4-contracts/erc725-smart-contracts-8.0.0-1.tgz create mode 100644 packages/lsp7-contracts/erc725-smart-contracts-8.0.0-1.tgz create mode 100644 packages/lsp8-contracts/erc725-smart-contracts-8.0.0-1.tgz diff --git a/.gitignore b/.gitignore index 2db63206f..c7e6d7392 100644 --- a/.gitignore +++ b/.gitignore @@ -66,7 +66,6 @@ packages/**/typechain-types/ # Output of 'npm pack' package/ -*.tgz # Yarn Integrity file .yarn-integrity diff --git a/packages/lsp4-contracts/erc725-smart-contracts-8.0.0-1.tgz b/packages/lsp4-contracts/erc725-smart-contracts-8.0.0-1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..75eeaea1deb9dee45dc539fd5706c54cbebe231a GIT binary patch literal 14324 zcmcI~Q*b2?>~3whTU%S(wr%&+-P(3f?QZREZEbBETidqXp8NaX`*P>L-#mTEHy0I ztQ@T(QUq_@e0;aA4DZXXwz`#CJ6l)Q$O6yZ_`CgILHWdcj@0T|pA`$Jn6R}#(Rj`yUv6#~N!)^)&!WT5)>bnO z$^yoCIZ;KSxi6$pmr&>DcQm1KPV#RYoU)UZ6K1B`u~ufL@v5pOn05hQ@3;NOC3pb` zK-I!S)y3q4qftNRWx)n{ncbLKo(uZqa(K9<`mFWuG1fS8HWLo&vy7w^Doj~x!eo)5 z!uMz-NioZ0PMLwyC^#!{0f*Dt0{bzGtlNI1JWM)SIPu0rq~pVA=*r(rvZGNMaU+L` zkz}%?2FWT=P4F=b0tV!?VAzpo0((Wyazlnw7~~iO`zd9vVpeB5l%K*pdDmr^F>VU# z15|ia97^5-15)^?#9($36fWV0I6)c1ETX_XbbJ6aOf(NAN3xLb{Ko*>#AW`i*k33GKJX%S@35fBd#{in~$(M?;oz>gmY*zm( zy|%zCBbSX^St{F)r$WZK2SU?=^_xB2z{o9VM9wh2@3&Wz3AHP=UJ{Zd`rl^P&92C`EVV z%PL_jafY)c9px~Ye;m6o?=$5(1TRx<@kCW>J>)iRk+mW352VU=4_x{c%hP_ehx9HN z*(>Y@dnqUn!33U2D^G18w|Uz(i-o@1h}E*5nn4A=0d=2s=()~eBA!Ocpy3!1dFRP8 zBmwjrgN)X&z|I&I?ijA zgv5^O>=+!Nm49Vad}E{tLTk_50cVloMR~k*S4Mz^xdl(H_hL;pg){5BRvwbLqr*i= zN3`B^m-QSPk8(UP0+xDU%wYPSJliSI^p20`J=8pk^@n zmm?t%5D`gmi~Az0@Uz+hJ9m^;KAfXZ{Lfx)5_Sc20T{mm(pF_Y82yTs-&yp@ufF7J z?mWo?Y97}#J)VN5sjOXMlx9j(9}EQU*Hjs7h@IO=a_CxSQ+&yA`^h!HfcmsR>}GH$ zBAN6p2koxN*eIfDn68Duby^;FPXUAhUPQ!~5Wox{ISQ8v+i02pYP>Xeq4Zil_a%)n zhRg&Vab99bz`BnP$r|`^$`pKKiX~*(Fd_s_cbhar_yGiXMUX}D`b zaEtANH$|Cu&$AEpR)S3tC=q`WPyM`2O2)6m8azP#Ds&T(o%muGAD9G`!=)JYL+?b0?-O*0ysZrztwO^AT0=aQ-wv z;Ws*slBrUW+cqI}EGL{Yh6g!lwbfrLQhalL98 zdM@|oZ(8|9Rr<%OWhpXy1)HYN-tb0Ljs z2uaf!ncxVE_?fC_Zur3+wENbz^+;Xvq1X~B%Eb;BiViH=xv#6ue(aXuzmus6D_k>f zz05iAN2b?KFas2q;o~Hx9;0w0$Ad<-Do1DUNiyJRk+t(%D(1wDuz3WBh#10nFZ2%m z;4U29$ujS;p8p!Aq$FU$xk>DCvhmimt!xHcSX@ZRtVsa-IUrae-(#Cv&B%p!{szX>0(XY z8;P1PkPiN?jpc*4E0j?1Li&*Sl`v00tdp}fKliiznnD6b{mWb$r7HjtG1S7E8>{G2?KvRuSpBohB<3 z&~H6YzG7Aq1`eY8v!?HeMVvxsALqw$pQ4?p(zt8AE*8%@yLx=pAUcTlog371a3fQP z1KBY$$ComvvYIY1Wkd)gV) zjor=#5ee0DI{vRvWG0g?X`>SzV(0>qld31f7KsnMGc(n??|e8}zy9nZpPbAGwQ9t2 z0Y8#p=Dc`m5%_fzd$B>mGglIMCo@WwJFcOy>w{mg$BLU70z`dO(53dZ<#opT1jqOBKCNI9Uk{ygSeO^z!re_H*_R z@Q^ezcwf0^?x7mR;Xcei!6`!?XzKtEKwVZnvm8jO1LkEes-msSR_v*}x|FGeA*iaE zH<-%Q&erAUbB+zi#2mj3x2B)q?Bx0fdN^;9?&KTheSW>}zrSWboSdw1w}tfx_V(~} zs$D~lb|j>armvj*tji-YPEN05GVW>PQ!lIOV2s_hBr|cLGabKM26wbf(aP9ja^q7R z;@Bh2I{-$QhqtJ02F4%wJgZsQr?_y58V=XnG9@+1qdQem)0fuX=>EgMF#e03s@wd6 zqIcLXN$dBRvjCoOd;dwOWHjJlasxqFnV^#h7nggM5oLazsW+vlMVGwDjW=Y6b%!1U zspYu3aV<5HV#_E@|Kh6%j{sOmcm;#zgK~g+hVyka30LTc6y3k_;`OJw&g2#9`!7=& z_Ic`C;CAQd;fXBlUvHb8;hko{T_$!NwmSWf$>3Vf>A<0IEf&HMdABO|<^Zlmq6o+5 z5?h&rv<|a2ZJaao9g)+SN385mz)>Go!Jcz{BpdmgA!H4fE17a+ehl)igCs|OKWTHi zQgs9^u|#-Fu-C+U>$LKPNU1^HOCW&&l)QlGE;blfT>>g6%kL+cYjL!>hj5;)2+q=l z+q46!GnGz9nQ=~xSl7^NBh@~W7(!SlYA|f1ldzsmaQw%B+gneZ>PXta4AfDMMa1WBfrkJ5b3-Y zO^W_{pNGi3rZ%I&K3T~VJrnziV725o)3peuT4k{$?*78X>NKjL-u_r8asyjy54I>p zZ2(g2VuLCWhl?#8u*w{8JXcnSSR^$HCe8m&%b9WSoI303l0ukm@b+%Pu^K> zF^fu)pF{76UK}=jph_hbeQ8e3_+bVF(V#IKgmhMj7f*-sI>hIe|z&~nrVAe?_ zc!fzoM7kxt4OwKI(H5H>nJA1ZwN90(oUFlBgBp|!SKWRBHOMF+Dt8&Y^dRT$t|AY8 zBX|D#8+4z!hKnyr9jn!~VU70)9Y#_NKngi?9PUAOl`iUA| zFqgK|AHPSOra~0*!c{jA!4TIU3OAUq=kMEQ4Nap|XHj+J!LKjVpk=l!*0szy z1@)#a?e-iS?o-RUrGDk*q&b{%;`I}|!B#cPTZ=wO9GJR(a`;b*VMhutiuGFD$shn1 zZ#1Vkabo015grjM8%8Tb)I*;Cy59bwyKauQ?Sb;r&dE3T(l^N3B{chRx%a5(9pw4k z^5W|a0$pz_)!l;vV}%VoT>_l_J>IVF#@99;)bC?IyF|y^bgm!s(dw3(|oL@anPqGV6 zjo&?-NEbsA^98hlgC*?V$CfAqTnNGi&&anbJpR_wAn!$8!It;Ce=_3e~}Vi5w!>0d;zFbP9_< zy-J&o1(dZ$!iBxwFC4l0HMi9B4-vxAbcKa%m zD&wt6sy!C~!aEk!L|Xazw?emP*zEEsV@s!M%epjNCf3ZeW|*f1Kb&zx;8d!ZVF}ES z0_ffgVhYC4*s=G+-hwi%nw1QvNzE5zrk<{ZuK~J2z3iu#H-v;JY5jG=Lc`Z0=ig}| zA44uO)7tn5Sj!QwhT!4-qTFz(1A|m725<{I+z%h7mE z)U)OT8`~v1j7Z$Mt5kmKA{a7@Z0!Zect%8Y+CsKqZ#!JaaYI?Qb#oVdY<$QE(X#a% z0nBxYd>&}saDNv}-Suvo`jm047S_!zc)~zw`1rN9wqP;nuRGXVtK9Y1TW%f z->`yQ=f6ZoMG4(@@;uoEIQ50(0=QR^Q93$vy9c+g_Z;eLaH@m674LLY>S7+q=hgqw zT*;8}eV|zN9+=?!pTt#o`P*&KGDtos5l0Xrwbjq!P%`9>hzL0#-GL1>5K=dnhMObi0rXz? z*@F0k``4k~?gPoEU?)@Zr^yolf!X`77cx3K1EBMR-#7Ov)ad8sC2GiEzlrB+QN%_! zc*&lVRh_5E87VH|++NT%;q}eU)iX-yHOkh7hX+jePvV%2NGI$DY+qCl=RpF$Tltvz4@D=FWxj}mh>g3-@{RZI%ipXXIPPYWevjfd! z>vuNnC*c+6OH(hogMnP`UHE@D9NqPZo)+1E4H66w8_cn<5@tTVE(pdA0}EL{BJDy1 zwTPQHY|Qa#^_g)kG&g{XVZgDGw^Eb1?1J!tR*F0aI;B=#dGg*?bmh?|QF^rBEg`2m zp4EXZUCK*wwfF#b)VjTy?9-=CZ;5TYHfxtYMPJ*h?xkdMwyl4ZN8(Q~QR4!j34bj#dYr{7||FnJVCFv1F@EO?*2xxsor>(&4xMQ9CD zzg5Cc%wFs981`8`1}Q&d{(hcFt4Rm|p}?ih)uXME81t|i?tz~#f#Ro1SuSabmh8Aq zyN18S7dpYW!NPjGJ*B~Mi>I#}5-+S^GSQ2iOTmTa969SAb}ml;lzNxwQzQA=G+403 zWUD=iqq$17hT;98z)>71CBtaKGsT}?dT~K&EfAHDpO$w|hq@7f>VE>KU~ILcGsn>L zmxs+6IfP|3O;XUsY5;y(M52PQr?+MQMe8DXx(8|&7cq10s=Kp8w&I7|kkw}ni(2k{ zDk|uHl5piVMvmG`e@mM`81vT*F6RaNi4Gpy@j>7))g%89X5%l7+81|CyNBz%{)?hV z#J!Wam6s-t69bPLZi*ctlVjiQF|844O}c#$*{xN!)CBm`T}c#6yRvK7+Od`{gQ?g& zxN#mh{fmRZc~cOyZhuAG((z1C_cK(k*kIK!DQmj7Mc-P&!#c}i#3Q1n_JW+< zrDe;Z>f|XsJ{w%_rQ1@Z2!Q=h!#+OHU4Lu2_E(u|k?Q(K?-kCyI&*0e67uLOk?bYHGmYdz2IK1Dx)+)w>Ke=S=MLLAP) zrlN!{;Wr7UiZ3SEOu=BGr5WMU5QDG4k)@Hy2q-yFMrOr4CdpZAm``1Ft=^cpxLR7~ zXxC-n(e6=%B>ASY{aii#H$_@uA8p}i_;v%Do0}Vw-jpJ6O-QA*_`-bg867VG`UC%- zGF5p;y@=f6)luRp!pYEfyBFUB2~JK^B`D1f<7fVj)%|&E#+33XfZ>9PSmnotHVq-F zG=nP~n1aMT=gpNw$M4Ss#%ej00FGIgd1~N(%HBBd*S>9A+uEtEs*eUw zHE1EU<|eiVDCxm};G$zPS3@4wjG+QyI7D)x;TVLrBN>@JM(>|A4B!!VNQHRs)JF{f11OT2~%cermn|`2s?&QLpe*EpX?Cj;!(IFv+;-S1 zc?~85%&x2Sacld)9?|w2xL;^a&X;^vEZ?_a6$ic#XOBXAjryPNFyjFejmIiZ@Y~Ke z;*7^sAIQFCS}0ud1JIGCrN*Sczr@~WGK-Z1$aYLvtcu?{WwZd|54Eu1gKf3103Ko{ z_1iNYFe#H!A4{4hN0Zr!XHtyNXW&E%Ri@%*7SJ6!{H`6GrS`AU;Z>%3+PMU9x82iJ z_k=lmy;cJ26=#w5C~0%`m40o#L&Wo6Q4OQOqFHItdhj@mzZrxak}ZHNN+L+rgKGrr z_lp8G2a5jTbh}Mi6A56owC5GEPX*%Si=kzvCH%J)WH8Zy82VV+FDRx+nPUcrosiVs z`kKQ1yRq~18fU(!^XMWTv%>ohSP$}1hG;k)0*wM-WJ* zt>a6R3oD9OOC96kGd2fM!;>*|YJqkn*9%xBY<h~tJ^9kc?oS3n4I_E`?rcwDJ z-Wikq>H@Owe}K`x{cE|sG1AP+=lCyn z0CohLCMxq{Gp;U338@!hjqwe}x4{k)igwUIjg`%02CWURsjI{?l%`$-BDjdZlH9B| zhKoHN3cQIC>3BIeE4gO|PPgi%-)@;?o(6wzm*|u0o*HS%BOEaf-1e{6R=o($XV`Zs z#eh;x0#n>1r$Oog+O>T_()0Ma8IvY{caTn9PYgHvuPIi%Dk4OdN*Ho1`ybw@U?cchzR~h`yzkFL{*ipyF?}mqCY*q9M zCPDQQxW#|jYL)l|k>SQUvkOPs|F$#TQJG8S6jg{b8%{f_abINkzCY9vgt;HxWl#wq zO9DD3f{rwP{19QN={PO;+vEB^?QIPh>dH7wYvOmA{EdZ~zuic=M^<(8VnEcGGmRlr zB#cI0sUN8J$G99wRYOj?-M0=|)6w-Ybr{$@a>A-iA_t@6{C$Ic1iH%oI{yTP%m%Is zjzUK9(*=%v+)O0+y62Hj`ejDGxVrS5ZeNg5LHPcK2J|3<2NwKyKRDsQ7and^ zQAtLHjKNyDtWql2mm6R<)*>8cL6_5=XLoDGLeVqn&tS^z0RvHLh@xwkA+En`xCOY5 z@tV{^KoHnlv8&|`oh&nXgR>PxB3SRzd5%zrAJ1Pul}-F5EPzo2%sl8q7$ zoU}wpEMI1}z#Y{-x#S4P0*(`o;jMUfZ*)bPk`wi}pP)FK>0`Sr4@p<#_w9o)9G;g6 zm?>ubd;ZKcKJ1*#=g)zBt?JM~-5Xm~pMgE*UxArmw;d7?V{6c9{sHQAB7Zd*vLO$L ziH<+``%l~G)4q+<;E3kk8ItG>N6!~rOb!ib4KL*XyVaNg@pX$N=o(ximH0Fp;qkX) zrtTfEEO6XwOBjL;WYhkcUH|Z1wTQ3UdG_n{0;fg3#*HRPMj^{D_*dmVK)?>GW1$20 zvsh({bK@o9M;qYMcQ3Uq?1PGDy5q@w8+Y|`NL-4Xbw7Cgc+z66z<|^0=2zl5P&KjO z)LHql^@V?)+rY)K+2Rt?zing3+f3RrFzrflg}a!l=}+2t^br)a5GCHPAOYXw;e`*j z61IZPMoOxxwRCi@RCAMIHFd^=Fxq!*rl@KYg9)^Kal9-$NGee={Ce19kSO$X z!^Sxz+phBmyrmY0N2dHET`d-XYgxTdz}890U39$X2JiG;3C|Z<6FiIhPqk>dOTj_# z6YZBs6>IcTAn)6#(oG%meL4Z3$=wSBp6lzAVi|=x45-6r^ylLZN4te<**e}B+xU7n z)(p+-f_dKpl*q;_Nd-8;hWPJU=mZtMYt%$TQn6u7HJ-x}>2c4&_S2ZsY;CmYGWiy=z6hrdN5(Xh9s~-54swU=E zH;VVAKC?WoC~ebxMojz6arS6JWraK>gGuS6scEhpjSY4fg4}G6Vk#^Di)6+07bjBP zi??{EC}$+^_O*p);FmS`Lmh}k`@ur5urn4E_sH)0M>sKWd27R;kR(Wx`x}qY+YpjX z-X9e3M)ff6?^bWY!#nFERlRDV{Xg61w~7gRA(b2z=n|TT@a>xz54K;Xvb6J~t3f@+ zqFqT;IXA|JhV+oxj0<5}*nFbIkWbcjN%Eraw3Ly`ALm{`d?M;7%H_v7R!5g`wtXjT z$p;1rnUFQY1i(LM7p?ro_YME*?70^z2CtrlI_}F@1`RsN23b=$fb}9W?wMDS{@m6@ zPfac4!9T8V;FPjldSQ09GD)C2xLYx4g9Rn*E{)0i1+WV;qNtbhj+~~4KYAD zpGUh!>S?M%QfQ&LO;DassNL@@aSC#$h($lFWkK`L9Qmwk|Pn->BY94Rqy%EsL0qSwlYJ-CN`ogq&dp$YQJ1 zYPd71R&1txdY<0$_5Enowo1jMHd`q)|Egweu?Q7DSpKjlE%$N46*5k^QIPKJ{)%MI z*OlYY`ZRR3VRb5D*Vf48HXbiOB*j>`x38M&<_rUqrLob}NB8g|nl&;UtsMGP$1SeB z7BTs&f~ZK3UMY>U!eZ9vx9^@`eGn&-mz8h>0Np9}J#tlJ*k*vDnDsDr}`(}7mq zG&1pFgutg*w`Gz3%GlEj1wHkMm(0SXqwN0H+K!We-y{jl%rneAA9TMf3FBqu#AKc` zBQvLH35?sTsjcejm=pf%&GaH0A?OODc@;8v1Ev-?YKRj9)%H;8YQ@*j2JeO;5XaN|>%Mhm;ZR~NPX#*I{O&Q&=u6(cfjjY{AIu$h8(>qYpT(M`D zV>gWzK~2pCXkGeQ09HO(n^G)2K1;P!^gL?vVX_OVuX+r6l@`2ktR`z*HVcBg7*r8w zN_D%LN7eA?A6QAvi-8zfW7NC7u$tyV28uYmDsoi}<}3~IXu%MVVzgp)u*Ya1H*#nM zDf*-6S#^K`nSaVeSp5at2RWjTyp=2HJQI9LU_7(brhUa&a3QhtxgFM6P`&SBC*B4J z7js4F&bY&by*M*-y$QocpR+hWxW}z+lkO}el} zzR)oKaR#Z%Fm))w12Rvc@;eGT_S`lP$`{qAkst{~?9v%3u%P5es%NA?h|oUNxc*3VDLxbBe4NjbvQ=d$K%7p*?(%_=Ar zC*(1Lv&CU?Tj$yCw?`&kar1FMzzlo6bL zREH&Xn1cuUw{Np>vq=yaD-1jJF-5dK&+tNtn_ zqBXr4a!VVFVr;+ENot?_*cT!ZiGfTHVvQ{J0u!-JTRvzv;^F7~jzL=KaRCAP49Uw~tR z)kK1Bo)F$ZEiXR&nx88;7@#K+S}-9F__+&Mr0a4q&Vaf?{IyS+I$<8s`3pMn`2#B% zpRZHeWFu|fWMU@i`3q)2*?AHc(7^?)0$8)ackjv??PB1@*0t8X@edG)KNiF-y13Q7 zrCqCcK7v5{HBl)K@zG7}ig_pADD1XrrxdcUqbU?jm*0nzs0{c5I%uK<%dz@94ZEpU zcCA>n-$!?~s0IX;k8-u$#VBXL=u#!oXFWaO?F1ayL450eIz>VI@fJ?7svO~#yC7-s z!c-DMYQ_iCjf$k275x7--@^Xq|I6R|E|5Dx6V%$dvUZ)i2)fd`3(WWZ+?lC-?aj9M zkCXp%NL)T}C62Ylm|#Qi%-#Do=hT>;Ty-jSELc7QGIx!NO9QGN=?7SH>N;YNs28@M z5oNcgj=|L;U$#cqbm-#hQ|X?EX&nLb)beCf^S}*w`>s5YX6VU$2$NHkGvIAPGKzRK z=jq(4&ALYN~cJ!@)2k^Q7y=+$Eq2H|;r|up{wK_WE2yC@UyToTp zSN-u(*Hr!L)==g2?KbcxXu$HasVP_lMlWnLSJOJ0ev>(tusKLt>IhB@DpH>K6j}Xt zj|_%9{C=2tE<_;>w7LE@lQf9rjfxY$`BU-)nLEQ{cZ>{+IB>fM%K?U@{uvb`xyABy zczHQY29HS-?gbS@`AAkYeT*IA2pg^N8a35*Osc6l!1Y3lh_^1@IvfGinCyOAQ{pVq#~d-3AdF27 z|Jcq~tr&Dv6Xny_PxH=49XFU7Bhox(bQiKZ$%w#hSs)bPdwPFk`V+U=s+Yn-S;n6Y zhXexml*^dEugAJ)xBJATiaqU1gvPOQfo{@w(R~gzjQNl-GEYE_al0DGY!FVB9sl0D z)v~1R+GAbai4Iv7?4pl;-=~eXv+wsQM0JR|MX}vK)=~1fAfA@b)m=)uLkF%pw5Bc+ zAZ$|Og9^Te3Z-5EN@85ay9`0#mQq6_QLglH!UE3pSh^Cg$s_ap@$zoft=bsnxL>~0aE`h*Zf-@h>%@OyB~#rOq!9dd>lt)Ryj=6u6z|h1xo}4AT~jGBYF(o z3Z_i5_pct-o($<2cbXDD@BHJ|rU&e|pV_|;kn&;CeyCdKc+c#?sDw$)%F3Nxtm$KQ z@=V}RK2)rfE#*rQhG2Yh_KoruGvB}IsH?mTXDa(8ABot(eBlTX@ zJJt@Q+0|NfPB2}iceKwLH28V`LOOa*yYTzB9Kt^M_*R&GLF`AuWaSjbq7dT4I$d1X zu0?VbDoOAX46Ge!E=Z4L@6;Y=f4N(@r25U>>pQOc%>;V}`I>hyZF}iqimDtaj4QR{ zxW{+WyLbQ6A58?9hQtS!he%^A5DMl>jy&@`PDB`)rFb>%|A8PhDr|b3!JT|ierK6)IcwSn=<4b@`Yo`}WK&50m(FBKWlMh&E7ZDK?pG*p4R!3jeqN@$y`Np!z&2h!)!1x8t&&Dp-UIQ^Xfh_Yu2s zBJJWz6xu-wDeA{uy0;A4W}^!nItKd}&Gr|1Y%};*2A#HtFXF$MD~o4D^+Am^+o48W^ETaxF>4f2L&%)PPkVKop$c;^Nu3kth`e3Ta zgxW3zR7~sWGY>BM%Y!qGWaa*OAf^_dBI^1sCP?5oqmqrsQD(u;i)fZDLP)2tWvY0j zp_Be?LRN8$P%SVIqmwu2an_&7B978>+bHBYlvppLEq-7TQGLm+u;lWK771Y}3x6Eh ztxqgF@)8m%CPuVstBf9TKNs+JO_%+J-`tB`)b|_NWzGU+n~HP~932y8vGiRBaje>K z4}1k~?h8dx1^Z*Y-fM^IwnlO?4bbd-Ty)n9mger%yIIhL%T|%l5!*l4S7`0;50z@X zTJsb3P^of$4(KO)X%{ope%~*j_fA@S0(dUD07)uet>iC)dYe{g-$5@eo^)TJ)@6{g z65sSS`BAUB(>@I2v;#56v!%u@w8O@EIhri}iTKxl#kRR}(>Axfh6lRAKt*0A^>JE~ zZOMyJqDcjv6RWa@K-)$e0~hKh5j6rS4wVKFNtVe%yQc*=c}`sMkwQkKXTHEfe^rjZUTF)ULTBdf!y z$w1AAb7gO8$%mz5o9Lj}lAf2oLDgiR##o^;4_SqO0Y}=4V~&A_^nRTW)!ABJ^5kZq zF`9HPgefx^*A+3F*U_f-TSbg5*|vpTsul=_Jv_(4n`6=4yu$6YE2w>Fh|W{B!}eQv-o<$QeW zjwYmg&2vfZea%wetEQY z8h#4)zm*Msob|OBv(=p78mj$-hAcQ2cOzF06El-5FPI=b zlBzCF8RJaUhC>20*-|)zU^O|L(=!u22c#xrOV)w@h@QL&qV|>hmRY9#ChcC~xJ)ky zC)A=O7MGt|FpG!Uq(8A)s|_K)P`t_28;cA%ZD##`3NKYVAh$X#7&55qOQE&!Y>lc7 z_{%L`w|&)#8b`pep^wQ&73?L(Il3-_o$^ln8^W&^F!KnqcagY_ZD|VKDQ(oJ>E|Kb?Ff2PvXsf$eQIcTu5TqCHXc88z zFvs14n0~6fJ9JC8qh?u1ncZqforJmm&BS@#Z+FCVeO6~EU(kSd7u#XQmGkhShMh&b zLRR~mA-Y2YVO!V?6-M7-sFD3ZAazQ_=vp|lnl&C&;;CRvVDf7QN_Onq{QPsyJcE9A zZRc!7m2jr^5F#R5Ecj_&KW#)DXVmhhnLGZ@g6V11Ae39tQgxyX{oxVZ>TdFZwmn02 zTuq5;vQ;2UeS%AX;UXyRtY$fH4nwNMDhPUa!8CI|_tStJ z^X~mI!)nKA_FJ9e1RUhnn;1GU%YYj8)0=6X*`kOIGE6_MOMp~3RU{F*?}RgJIIU@s z?PsT*HrV&U-Eu_jMHQCnY8#2}F}G`2wiVb6By%SxBH<9{;znUZ8+~)Ny#LpsPwa4j zM&SF#yJ(FWsPir5xp(F|z_ZL6v{7*%=>PWIi^}}*7%^U=QlGlT(2`n6PBT?#h>dJX zaXe){>0gyFM@Awfr=yL10Zd~@hTTQDvO!p#-)_1iYC#Z` z@aVJbAaJd(vr$zVJ+bg>n=InFtiig(F-z4_IxPjUZLOl}juAN6!G(qlqnhjd^+2Pw ztj(S<#k$lW`d*CcPwBc^_FsbVADxGutc^E9Y=qaItTjeY^sPk;_bP$6YMlxjse#+S zU*W)%h#)VAP(0{vGkTe>03=vGCK~Uq_XUWsh@nehOP?d@t=6h#hAe5Ou|8bi zW{D|$mtm|%ykNQLbW(NAWq`QIm4&+#(WOeOvHOJ|H5}txBCfokmM1Te*GcMk6sluq zIb0_aQ3&NWN+VAm(6J9J2dq@YtlNk!GNoe!`VT-A{vU=n;RlX1o+=?8avuS%oU%B=b^f znX`_K{!5bV&-EtS1^37{Xx}&sTR>2EC&b*vPnUAV?z@!8VP3m z;*%J(>35ONAcNg4!y&QIyDW?%^fO=A(B+iASAAFZetdleYQ6sJ J1#~3whTU%S(wr%&+-P(3f?QZREZEbBETidqXp8NaX`*P>L-#mTEHy0I ztQ@T(QUq_@e0;aA4DZXXwz`#CJ6l)Q$O6yZ_`CgILHWdcj@0T|pA`$Jn6R}#(Rj`yUv6#~N!)^)&!WT5)>bnO z$^yoCIZ;KSxi6$pmr&>DcQm1KPV#RYoU)UZ6K1B`u~ufL@v5pOn05hQ@3;NOC3pb` zK-I!S)y3q4qftNRWx)n{ncbLKo(uZqa(K9<`mFWuG1fS8HWLo&vy7w^Doj~x!eo)5 z!uMz-NioZ0PMLwyC^#!{0f*Dt0{bzGtlNI1JWM)SIPu0rq~pVA=*r(rvZGNMaU+L` zkz}%?2FWT=P4F=b0tV!?VAzpo0((Wyazlnw7~~iO`zd9vVpeB5l%K*pdDmr^F>VU# z15|ia97^5-15)^?#9($36fWV0I6)c1ETX_XbbJ6aOf(NAN3xLb{Ko*>#AW`i*k33GKJX%S@35fBd#{in~$(M?;oz>gmY*zm( zy|%zCBbSX^St{F)r$WZK2SU?=^_xB2z{o9VM9wh2@3&Wz3AHP=UJ{Zd`rl^P&92C`EVV z%PL_jafY)c9px~Ye;m6o?=$5(1TRx<@kCW>J>)iRk+mW352VU=4_x{c%hP_ehx9HN z*(>Y@dnqUn!33U2D^G18w|Uz(i-o@1h}E*5nn4A=0d=2s=()~eBA!Ocpy3!1dFRP8 zBmwjrgN)X&z|I&I?ijA zgv5^O>=+!Nm49Vad}E{tLTk_50cVloMR~k*S4Mz^xdl(H_hL;pg){5BRvwbLqr*i= zN3`B^m-QSPk8(UP0+xDU%wYPSJliSI^p20`J=8pk^@n zmm?t%5D`gmi~Az0@Uz+hJ9m^;KAfXZ{Lfx)5_Sc20T{mm(pF_Y82yTs-&yp@ufF7J z?mWo?Y97}#J)VN5sjOXMlx9j(9}EQU*Hjs7h@IO=a_CxSQ+&yA`^h!HfcmsR>}GH$ zBAN6p2koxN*eIfDn68Duby^;FPXUAhUPQ!~5Wox{ISQ8v+i02pYP>Xeq4Zil_a%)n zhRg&Vab99bz`BnP$r|`^$`pKKiX~*(Fd_s_cbhar_yGiXMUX}D`b zaEtANH$|Cu&$AEpR)S3tC=q`WPyM`2O2)6m8azP#Ds&T(o%muGAD9G`!=)JYL+?b0?-O*0ysZrztwO^AT0=aQ-wv z;Ws*slBrUW+cqI}EGL{Yh6g!lwbfrLQhalL98 zdM@|oZ(8|9Rr<%OWhpXy1)HYN-tb0Ljs z2uaf!ncxVE_?fC_Zur3+wENbz^+;Xvq1X~B%Eb;BiViH=xv#6ue(aXuzmus6D_k>f zz05iAN2b?KFas2q;o~Hx9;0w0$Ad<-Do1DUNiyJRk+t(%D(1wDuz3WBh#10nFZ2%m z;4U29$ujS;p8p!Aq$FU$xk>DCvhmimt!xHcSX@ZRtVsa-IUrae-(#Cv&B%p!{szX>0(XY z8;P1PkPiN?jpc*4E0j?1Li&*Sl`v00tdp}fKliiznnD6b{mWb$r7HjtG1S7E8>{G2?KvRuSpBohB<3 z&~H6YzG7Aq1`eY8v!?HeMVvxsALqw$pQ4?p(zt8AE*8%@yLx=pAUcTlog371a3fQP z1KBY$$ComvvYIY1Wkd)gV) zjor=#5ee0DI{vRvWG0g?X`>SzV(0>qld31f7KsnMGc(n??|e8}zy9nZpPbAGwQ9t2 z0Y8#p=Dc`m5%_fzd$B>mGglIMCo@WwJFcOy>w{mg$BLU70z`dO(53dZ<#opT1jqOBKCNI9Uk{ygSeO^z!re_H*_R z@Q^ezcwf0^?x7mR;Xcei!6`!?XzKtEKwVZnvm8jO1LkEes-msSR_v*}x|FGeA*iaE zH<-%Q&erAUbB+zi#2mj3x2B)q?Bx0fdN^;9?&KTheSW>}zrSWboSdw1w}tfx_V(~} zs$D~lb|j>armvj*tji-YPEN05GVW>PQ!lIOV2s_hBr|cLGabKM26wbf(aP9ja^q7R z;@Bh2I{-$QhqtJ02F4%wJgZsQr?_y58V=XnG9@+1qdQem)0fuX=>EgMF#e03s@wd6 zqIcLXN$dBRvjCoOd;dwOWHjJlasxqFnV^#h7nggM5oLazsW+vlMVGwDjW=Y6b%!1U zspYu3aV<5HV#_E@|Kh6%j{sOmcm;#zgK~g+hVyka30LTc6y3k_;`OJw&g2#9`!7=& z_Ic`C;CAQd;fXBlUvHb8;hko{T_$!NwmSWf$>3Vf>A<0IEf&HMdABO|<^Zlmq6o+5 z5?h&rv<|a2ZJaao9g)+SN385mz)>Go!Jcz{BpdmgA!H4fE17a+ehl)igCs|OKWTHi zQgs9^u|#-Fu-C+U>$LKPNU1^HOCW&&l)QlGE;blfT>>g6%kL+cYjL!>hj5;)2+q=l z+q46!GnGz9nQ=~xSl7^NBh@~W7(!SlYA|f1ldzsmaQw%B+gneZ>PXta4AfDMMa1WBfrkJ5b3-Y zO^W_{pNGi3rZ%I&K3T~VJrnziV725o)3peuT4k{$?*78X>NKjL-u_r8asyjy54I>p zZ2(g2VuLCWhl?#8u*w{8JXcnSSR^$HCe8m&%b9WSoI303l0ukm@b+%Pu^K> zF^fu)pF{76UK}=jph_hbeQ8e3_+bVF(V#IKgmhMj7f*-sI>hIe|z&~nrVAe?_ zc!fzoM7kxt4OwKI(H5H>nJA1ZwN90(oUFlBgBp|!SKWRBHOMF+Dt8&Y^dRT$t|AY8 zBX|D#8+4z!hKnyr9jn!~VU70)9Y#_NKngi?9PUAOl`iUA| zFqgK|AHPSOra~0*!c{jA!4TIU3OAUq=kMEQ4Nap|XHj+J!LKjVpk=l!*0szy z1@)#a?e-iS?o-RUrGDk*q&b{%;`I}|!B#cPTZ=wO9GJR(a`;b*VMhutiuGFD$shn1 zZ#1Vkabo015grjM8%8Tb)I*;Cy59bwyKauQ?Sb;r&dE3T(l^N3B{chRx%a5(9pw4k z^5W|a0$pz_)!l;vV}%VoT>_l_J>IVF#@99;)bC?IyF|y^bgm!s(dw3(|oL@anPqGV6 zjo&?-NEbsA^98hlgC*?V$CfAqTnNGi&&anbJpR_wAn!$8!It;Ce=_3e~}Vi5w!>0d;zFbP9_< zy-J&o1(dZ$!iBxwFC4l0HMi9B4-vxAbcKa%m zD&wt6sy!C~!aEk!L|Xazw?emP*zEEsV@s!M%epjNCf3ZeW|*f1Kb&zx;8d!ZVF}ES z0_ffgVhYC4*s=G+-hwi%nw1QvNzE5zrk<{ZuK~J2z3iu#H-v;JY5jG=Lc`Z0=ig}| zA44uO)7tn5Sj!QwhT!4-qTFz(1A|m725<{I+z%h7mE z)U)OT8`~v1j7Z$Mt5kmKA{a7@Z0!Zect%8Y+CsKqZ#!JaaYI?Qb#oVdY<$QE(X#a% z0nBxYd>&}saDNv}-Suvo`jm047S_!zc)~zw`1rN9wqP;nuRGXVtK9Y1TW%f z->`yQ=f6ZoMG4(@@;uoEIQ50(0=QR^Q93$vy9c+g_Z;eLaH@m674LLY>S7+q=hgqw zT*;8}eV|zN9+=?!pTt#o`P*&KGDtos5l0Xrwbjq!P%`9>hzL0#-GL1>5K=dnhMObi0rXz? z*@F0k``4k~?gPoEU?)@Zr^yolf!X`77cx3K1EBMR-#7Ov)ad8sC2GiEzlrB+QN%_! zc*&lVRh_5E87VH|++NT%;q}eU)iX-yHOkh7hX+jePvV%2NGI$DY+qCl=RpF$Tltvz4@D=FWxj}mh>g3-@{RZI%ipXXIPPYWevjfd! z>vuNnC*c+6OH(hogMnP`UHE@D9NqPZo)+1E4H66w8_cn<5@tTVE(pdA0}EL{BJDy1 zwTPQHY|Qa#^_g)kG&g{XVZgDGw^Eb1?1J!tR*F0aI;B=#dGg*?bmh?|QF^rBEg`2m zp4EXZUCK*wwfF#b)VjTy?9-=CZ;5TYHfxtYMPJ*h?xkdMwyl4ZN8(Q~QR4!j34bj#dYr{7||FnJVCFv1F@EO?*2xxsor>(&4xMQ9CD zzg5Cc%wFs981`8`1}Q&d{(hcFt4Rm|p}?ih)uXME81t|i?tz~#f#Ro1SuSabmh8Aq zyN18S7dpYW!NPjGJ*B~Mi>I#}5-+S^GSQ2iOTmTa969SAb}ml;lzNxwQzQA=G+403 zWUD=iqq$17hT;98z)>71CBtaKGsT}?dT~K&EfAHDpO$w|hq@7f>VE>KU~ILcGsn>L zmxs+6IfP|3O;XUsY5;y(M52PQr?+MQMe8DXx(8|&7cq10s=Kp8w&I7|kkw}ni(2k{ zDk|uHl5piVMvmG`e@mM`81vT*F6RaNi4Gpy@j>7))g%89X5%l7+81|CyNBz%{)?hV z#J!Wam6s-t69bPLZi*ctlVjiQF|844O}c#$*{xN!)CBm`T}c#6yRvK7+Od`{gQ?g& zxN#mh{fmRZc~cOyZhuAG((z1C_cK(k*kIK!DQmj7Mc-P&!#c}i#3Q1n_JW+< zrDe;Z>f|XsJ{w%_rQ1@Z2!Q=h!#+OHU4Lu2_E(u|k?Q(K?-kCyI&*0e67uLOk?bYHGmYdz2IK1Dx)+)w>Ke=S=MLLAP) zrlN!{;Wr7UiZ3SEOu=BGr5WMU5QDG4k)@Hy2q-yFMrOr4CdpZAm``1Ft=^cpxLR7~ zXxC-n(e6=%B>ASY{aii#H$_@uA8p}i_;v%Do0}Vw-jpJ6O-QA*_`-bg867VG`UC%- zGF5p;y@=f6)luRp!pYEfyBFUB2~JK^B`D1f<7fVj)%|&E#+33XfZ>9PSmnotHVq-F zG=nP~n1aMT=gpNw$M4Ss#%ej00FGIgd1~N(%HBBd*S>9A+uEtEs*eUw zHE1EU<|eiVDCxm};G$zPS3@4wjG+QyI7D)x;TVLrBN>@JM(>|A4B!!VNQHRs)JF{f11OT2~%cermn|`2s?&QLpe*EpX?Cj;!(IFv+;-S1 zc?~85%&x2Sacld)9?|w2xL;^a&X;^vEZ?_a6$ic#XOBXAjryPNFyjFejmIiZ@Y~Ke z;*7^sAIQFCS}0ud1JIGCrN*Sczr@~WGK-Z1$aYLvtcu?{WwZd|54Eu1gKf3103Ko{ z_1iNYFe#H!A4{4hN0Zr!XHtyNXW&E%Ri@%*7SJ6!{H`6GrS`AU;Z>%3+PMU9x82iJ z_k=lmy;cJ26=#w5C~0%`m40o#L&Wo6Q4OQOqFHItdhj@mzZrxak}ZHNN+L+rgKGrr z_lp8G2a5jTbh}Mi6A56owC5GEPX*%Si=kzvCH%J)WH8Zy82VV+FDRx+nPUcrosiVs z`kKQ1yRq~18fU(!^XMWTv%>ohSP$}1hG;k)0*wM-WJ* zt>a6R3oD9OOC96kGd2fM!;>*|YJqkn*9%xBY<h~tJ^9kc?oS3n4I_E`?rcwDJ z-Wikq>H@Owe}K`x{cE|sG1AP+=lCyn z0CohLCMxq{Gp;U338@!hjqwe}x4{k)igwUIjg`%02CWURsjI{?l%`$-BDjdZlH9B| zhKoHN3cQIC>3BIeE4gO|PPgi%-)@;?o(6wzm*|u0o*HS%BOEaf-1e{6R=o($XV`Zs z#eh;x0#n>1r$Oog+O>T_()0Ma8IvY{caTn9PYgHvuPIi%Dk4OdN*Ho1`ybw@U?cchzR~h`yzkFL{*ipyF?}mqCY*q9M zCPDQQxW#|jYL)l|k>SQUvkOPs|F$#TQJG8S6jg{b8%{f_abINkzCY9vgt;HxWl#wq zO9DD3f{rwP{19QN={PO;+vEB^?QIPh>dH7wYvOmA{EdZ~zuic=M^<(8VnEcGGmRlr zB#cI0sUN8J$G99wRYOj?-M0=|)6w-Ybr{$@a>A-iA_t@6{C$Ic1iH%oI{yTP%m%Is zjzUK9(*=%v+)O0+y62Hj`ejDGxVrS5ZeNg5LHPcK2J|3<2NwKyKRDsQ7and^ zQAtLHjKNyDtWql2mm6R<)*>8cL6_5=XLoDGLeVqn&tS^z0RvHLh@xwkA+En`xCOY5 z@tV{^KoHnlv8&|`oh&nXgR>PxB3SRzd5%zrAJ1Pul}-F5EPzo2%sl8q7$ zoU}wpEMI1}z#Y{-x#S4P0*(`o;jMUfZ*)bPk`wi}pP)FK>0`Sr4@p<#_w9o)9G;g6 zm?>ubd;ZKcKJ1*#=g)zBt?JM~-5Xm~pMgE*UxArmw;d7?V{6c9{sHQAB7Zd*vLO$L ziH<+``%l~G)4q+<;E3kk8ItG>N6!~rOb!ib4KL*XyVaNg@pX$N=o(ximH0Fp;qkX) zrtTfEEO6XwOBjL;WYhkcUH|Z1wTQ3UdG_n{0;fg3#*HRPMj^{D_*dmVK)?>GW1$20 zvsh({bK@o9M;qYMcQ3Uq?1PGDy5q@w8+Y|`NL-4Xbw7Cgc+z66z<|^0=2zl5P&KjO z)LHql^@V?)+rY)K+2Rt?zing3+f3RrFzrflg}a!l=}+2t^br)a5GCHPAOYXw;e`*j z61IZPMoOxxwRCi@RCAMIHFd^=Fxq!*rl@KYg9)^Kal9-$NGee={Ce19kSO$X z!^Sxz+phBmyrmY0N2dHET`d-XYgxTdz}890U39$X2JiG;3C|Z<6FiIhPqk>dOTj_# z6YZBs6>IcTAn)6#(oG%meL4Z3$=wSBp6lzAVi|=x45-6r^ylLZN4te<**e}B+xU7n z)(p+-f_dKpl*q;_Nd-8;hWPJU=mZtMYt%$TQn6u7HJ-x}>2c4&_S2ZsY;CmYGWiy=z6hrdN5(Xh9s~-54swU=E zH;VVAKC?WoC~ebxMojz6arS6JWraK>gGuS6scEhpjSY4fg4}G6Vk#^Di)6+07bjBP zi??{EC}$+^_O*p);FmS`Lmh}k`@ur5urn4E_sH)0M>sKWd27R;kR(Wx`x}qY+YpjX z-X9e3M)ff6?^bWY!#nFERlRDV{Xg61w~7gRA(b2z=n|TT@a>xz54K;Xvb6J~t3f@+ zqFqT;IXA|JhV+oxj0<5}*nFbIkWbcjN%Eraw3Ly`ALm{`d?M;7%H_v7R!5g`wtXjT z$p;1rnUFQY1i(LM7p?ro_YME*?70^z2CtrlI_}F@1`RsN23b=$fb}9W?wMDS{@m6@ zPfac4!9T8V;FPjldSQ09GD)C2xLYx4g9Rn*E{)0i1+WV;qNtbhj+~~4KYAD zpGUh!>S?M%QfQ&LO;DassNL@@aSC#$h($lFWkK`L9Qmwk|Pn->BY94Rqy%EsL0qSwlYJ-CN`ogq&dp$YQJ1 zYPd71R&1txdY<0$_5Enowo1jMHd`q)|Egweu?Q7DSpKjlE%$N46*5k^QIPKJ{)%MI z*OlYY`ZRR3VRb5D*Vf48HXbiOB*j>`x38M&<_rUqrLob}NB8g|nl&;UtsMGP$1SeB z7BTs&f~ZK3UMY>U!eZ9vx9^@`eGn&-mz8h>0Np9}J#tlJ*k*vDnDsDr}`(}7mq zG&1pFgutg*w`Gz3%GlEj1wHkMm(0SXqwN0H+K!We-y{jl%rneAA9TMf3FBqu#AKc` zBQvLH35?sTsjcejm=pf%&GaH0A?OODc@;8v1Ev-?YKRj9)%H;8YQ@*j2JeO;5XaN|>%Mhm;ZR~NPX#*I{O&Q&=u6(cfjjY{AIu$h8(>qYpT(M`D zV>gWzK~2pCXkGeQ09HO(n^G)2K1;P!^gL?vVX_OVuX+r6l@`2ktR`z*HVcBg7*r8w zN_D%LN7eA?A6QAvi-8zfW7NC7u$tyV28uYmDsoi}<}3~IXu%MVVzgp)u*Ya1H*#nM zDf*-6S#^K`nSaVeSp5at2RWjTyp=2HJQI9LU_7(brhUa&a3QhtxgFM6P`&SBC*B4J z7js4F&bY&by*M*-y$QocpR+hWxW}z+lkO}el} zzR)oKaR#Z%Fm))w12Rvc@;eGT_S`lP$`{qAkst{~?9v%3u%P5es%NA?h|oUNxc*3VDLxbBe4NjbvQ=d$K%7p*?(%_=Ar zC*(1Lv&CU?Tj$yCw?`&kar1FMzzlo6bL zREH&Xn1cuUw{Np>vq=yaD-1jJF-5dK&+tNtn_ zqBXr4a!VVFVr;+ENot?_*cT!ZiGfTHVvQ{J0u!-JTRvzv;^F7~jzL=KaRCAP49Uw~tR z)kK1Bo)F$ZEiXR&nx88;7@#K+S}-9F__+&Mr0a4q&Vaf?{IyS+I$<8s`3pMn`2#B% zpRZHeWFu|fWMU@i`3q)2*?AHc(7^?)0$8)ackjv??PB1@*0t8X@edG)KNiF-y13Q7 zrCqCcK7v5{HBl)K@zG7}ig_pADD1XrrxdcUqbU?jm*0nzs0{c5I%uK<%dz@94ZEpU zcCA>n-$!?~s0IX;k8-u$#VBXL=u#!oXFWaO?F1ayL450eIz>VI@fJ?7svO~#yC7-s z!c-DMYQ_iCjf$k275x7--@^Xq|I6R|E|5Dx6V%$dvUZ)i2)fd`3(WWZ+?lC-?aj9M zkCXp%NL)T}C62Ylm|#Qi%-#Do=hT>;Ty-jSELc7QGIx!NO9QGN=?7SH>N;YNs28@M z5oNcgj=|L;U$#cqbm-#hQ|X?EX&nLb)beCf^S}*w`>s5YX6VU$2$NHkGvIAPGKzRK z=jq(4&ALYN~cJ!@)2k^Q7y=+$Eq2H|;r|up{wK_WE2yC@UyToTp zSN-u(*Hr!L)==g2?KbcxXu$HasVP_lMlWnLSJOJ0ev>(tusKLt>IhB@DpH>K6j}Xt zj|_%9{C=2tE<_;>w7LE@lQf9rjfxY$`BU-)nLEQ{cZ>{+IB>fM%K?U@{uvb`xyABy zczHQY29HS-?gbS@`AAkYeT*IA2pg^N8a35*Osc6l!1Y3lh_^1@IvfGinCyOAQ{pVq#~d-3AdF27 z|Jcq~tr&Dv6Xny_PxH=49XFU7Bhox(bQiKZ$%w#hSs)bPdwPFk`V+U=s+Yn-S;n6Y zhXexml*^dEugAJ)xBJATiaqU1gvPOQfo{@w(R~gzjQNl-GEYE_al0DGY!FVB9sl0D z)v~1R+GAbai4Iv7?4pl;-=~eXv+wsQM0JR|MX}vK)=~1fAfA@b)m=)uLkF%pw5Bc+ zAZ$|Og9^Te3Z-5EN@85ay9`0#mQq6_QLglH!UE3pSh^Cg$s_ap@$zoft=bsnxL>~0aE`h*Zf-@h>%@OyB~#rOq!9dd>lt)Ryj=6u6z|h1xo}4AT~jGBYF(o z3Z_i5_pct-o($<2cbXDD@BHJ|rU&e|pV_|;kn&;CeyCdKc+c#?sDw$)%F3Nxtm$KQ z@=V}RK2)rfE#*rQhG2Yh_KoruGvB}IsH?mTXDa(8ABot(eBlTX@ zJJt@Q+0|NfPB2}iceKwLH28V`LOOa*yYTzB9Kt^M_*R&GLF`AuWaSjbq7dT4I$d1X zu0?VbDoOAX46Ge!E=Z4L@6;Y=f4N(@r25U>>pQOc%>;V}`I>hyZF}iqimDtaj4QR{ zxW{+WyLbQ6A58?9hQtS!he%^A5DMl>jy&@`PDB`)rFb>%|A8PhDr|b3!JT|ierK6)IcwSn=<4b@`Yo`}WK&50m(FBKWlMh&E7ZDK?pG*p4R!3jeqN@$y`Np!z&2h!)!1x8t&&Dp-UIQ^Xfh_Yu2s zBJJWz6xu-wDeA{uy0;A4W}^!nItKd}&Gr|1Y%};*2A#HtFXF$MD~o4D^+Am^+o48W^ETaxF>4f2L&%)PPkVKop$c;^Nu3kth`e3Ta zgxW3zR7~sWGY>BM%Y!qGWaa*OAf^_dBI^1sCP?5oqmqrsQD(u;i)fZDLP)2tWvY0j zp_Be?LRN8$P%SVIqmwu2an_&7B978>+bHBYlvppLEq-7TQGLm+u;lWK771Y}3x6Eh ztxqgF@)8m%CPuVstBf9TKNs+JO_%+J-`tB`)b|_NWzGU+n~HP~932y8vGiRBaje>K z4}1k~?h8dx1^Z*Y-fM^IwnlO?4bbd-Ty)n9mger%yIIhL%T|%l5!*l4S7`0;50z@X zTJsb3P^of$4(KO)X%{ope%~*j_fA@S0(dUD07)uet>iC)dYe{g-$5@eo^)TJ)@6{g z65sSS`BAUB(>@I2v;#56v!%u@w8O@EIhri}iTKxl#kRR}(>Axfh6lRAKt*0A^>JE~ zZOMyJqDcjv6RWa@K-)$e0~hKh5j6rS4wVKFNtVe%yQc*=c}`sMkwQkKXTHEfe^rjZUTF)ULTBdf!y z$w1AAb7gO8$%mz5o9Lj}lAf2oLDgiR##o^;4_SqO0Y}=4V~&A_^nRTW)!ABJ^5kZq zF`9HPgefx^*A+3F*U_f-TSbg5*|vpTsul=_Jv_(4n`6=4yu$6YE2w>Fh|W{B!}eQv-o<$QeW zjwYmg&2vfZea%wetEQY z8h#4)zm*Msob|OBv(=p78mj$-hAcQ2cOzF06El-5FPI=b zlBzCF8RJaUhC>20*-|)zU^O|L(=!u22c#xrOV)w@h@QL&qV|>hmRY9#ChcC~xJ)ky zC)A=O7MGt|FpG!Uq(8A)s|_K)P`t_28;cA%ZD##`3NKYVAh$X#7&55qOQE&!Y>lc7 z_{%L`w|&)#8b`pep^wQ&73?L(Il3-_o$^ln8^W&^F!KnqcagY_ZD|VKDQ(oJ>E|Kb?Ff2PvXsf$eQIcTu5TqCHXc88z zFvs14n0~6fJ9JC8qh?u1ncZqforJmm&BS@#Z+FCVeO6~EU(kSd7u#XQmGkhShMh&b zLRR~mA-Y2YVO!V?6-M7-sFD3ZAazQ_=vp|lnl&C&;;CRvVDf7QN_Onq{QPsyJcE9A zZRc!7m2jr^5F#R5Ecj_&KW#)DXVmhhnLGZ@g6V11Ae39tQgxyX{oxVZ>TdFZwmn02 zTuq5;vQ;2UeS%AX;UXyRtY$fH4nwNMDhPUa!8CI|_tStJ z^X~mI!)nKA_FJ9e1RUhnn;1GU%YYj8)0=6X*`kOIGE6_MOMp~3RU{F*?}RgJIIU@s z?PsT*HrV&U-Eu_jMHQCnY8#2}F}G`2wiVb6By%SxBH<9{;znUZ8+~)Ny#LpsPwa4j zM&SF#yJ(FWsPir5xp(F|z_ZL6v{7*%=>PWIi^}}*7%^U=QlGlT(2`n6PBT?#h>dJX zaXe){>0gyFM@Awfr=yL10Zd~@hTTQDvO!p#-)_1iYC#Z` z@aVJbAaJd(vr$zVJ+bg>n=InFtiig(F-z4_IxPjUZLOl}juAN6!G(qlqnhjd^+2Pw ztj(S<#k$lW`d*CcPwBc^_FsbVADxGutc^E9Y=qaItTjeY^sPk;_bP$6YMlxjse#+S zU*W)%h#)VAP(0{vGkTe>03=vGCK~Uq_XUWsh@nehOP?d@t=6h#hAe5Ou|8bi zW{D|$mtm|%ykNQLbW(NAWq`QIm4&+#(WOeOvHOJ|H5}txBCfokmM1Te*GcMk6sluq zIb0_aQ3&NWN+VAm(6J9J2dq@YtlNk!GNoe!`VT-A{vU=n;RlX1o+=?8avuS%oU%B=b^f znX`_K{!5bV&-EtS1^37{Xx}&sTR>2EC&b*vPnUAV?z@!8VP3m z;*%J(>35ONAcNg4!y&QIyDW?%^fO=A(B+iASAAFZetdleYQ6sJ J1#~3whTU%S(wr%&+-P(3f?QZREZEbBETidqXp8NaX`*P>L-#mTEHy0I ztQ@T(QUq_@e0;aA4DZXXwz`#CJ6l)Q$O6yZ_`CgILHWdcj@0T|pA`$Jn6R}#(Rj`yUv6#~N!)^)&!WT5)>bnO z$^yoCIZ;KSxi6$pmr&>DcQm1KPV#RYoU)UZ6K1B`u~ufL@v5pOn05hQ@3;NOC3pb` zK-I!S)y3q4qftNRWx)n{ncbLKo(uZqa(K9<`mFWuG1fS8HWLo&vy7w^Doj~x!eo)5 z!uMz-NioZ0PMLwyC^#!{0f*Dt0{bzGtlNI1JWM)SIPu0rq~pVA=*r(rvZGNMaU+L` zkz}%?2FWT=P4F=b0tV!?VAzpo0((Wyazlnw7~~iO`zd9vVpeB5l%K*pdDmr^F>VU# z15|ia97^5-15)^?#9($36fWV0I6)c1ETX_XbbJ6aOf(NAN3xLb{Ko*>#AW`i*k33GKJX%S@35fBd#{in~$(M?;oz>gmY*zm( zy|%zCBbSX^St{F)r$WZK2SU?=^_xB2z{o9VM9wh2@3&Wz3AHP=UJ{Zd`rl^P&92C`EVV z%PL_jafY)c9px~Ye;m6o?=$5(1TRx<@kCW>J>)iRk+mW352VU=4_x{c%hP_ehx9HN z*(>Y@dnqUn!33U2D^G18w|Uz(i-o@1h}E*5nn4A=0d=2s=()~eBA!Ocpy3!1dFRP8 zBmwjrgN)X&z|I&I?ijA zgv5^O>=+!Nm49Vad}E{tLTk_50cVloMR~k*S4Mz^xdl(H_hL;pg){5BRvwbLqr*i= zN3`B^m-QSPk8(UP0+xDU%wYPSJliSI^p20`J=8pk^@n zmm?t%5D`gmi~Az0@Uz+hJ9m^;KAfXZ{Lfx)5_Sc20T{mm(pF_Y82yTs-&yp@ufF7J z?mWo?Y97}#J)VN5sjOXMlx9j(9}EQU*Hjs7h@IO=a_CxSQ+&yA`^h!HfcmsR>}GH$ zBAN6p2koxN*eIfDn68Duby^;FPXUAhUPQ!~5Wox{ISQ8v+i02pYP>Xeq4Zil_a%)n zhRg&Vab99bz`BnP$r|`^$`pKKiX~*(Fd_s_cbhar_yGiXMUX}D`b zaEtANH$|Cu&$AEpR)S3tC=q`WPyM`2O2)6m8azP#Ds&T(o%muGAD9G`!=)JYL+?b0?-O*0ysZrztwO^AT0=aQ-wv z;Ws*slBrUW+cqI}EGL{Yh6g!lwbfrLQhalL98 zdM@|oZ(8|9Rr<%OWhpXy1)HYN-tb0Ljs z2uaf!ncxVE_?fC_Zur3+wENbz^+;Xvq1X~B%Eb;BiViH=xv#6ue(aXuzmus6D_k>f zz05iAN2b?KFas2q;o~Hx9;0w0$Ad<-Do1DUNiyJRk+t(%D(1wDuz3WBh#10nFZ2%m z;4U29$ujS;p8p!Aq$FU$xk>DCvhmimt!xHcSX@ZRtVsa-IUrae-(#Cv&B%p!{szX>0(XY z8;P1PkPiN?jpc*4E0j?1Li&*Sl`v00tdp}fKliiznnD6b{mWb$r7HjtG1S7E8>{G2?KvRuSpBohB<3 z&~H6YzG7Aq1`eY8v!?HeMVvxsALqw$pQ4?p(zt8AE*8%@yLx=pAUcTlog371a3fQP z1KBY$$ComvvYIY1Wkd)gV) zjor=#5ee0DI{vRvWG0g?X`>SzV(0>qld31f7KsnMGc(n??|e8}zy9nZpPbAGwQ9t2 z0Y8#p=Dc`m5%_fzd$B>mGglIMCo@WwJFcOy>w{mg$BLU70z`dO(53dZ<#opT1jqOBKCNI9Uk{ygSeO^z!re_H*_R z@Q^ezcwf0^?x7mR;Xcei!6`!?XzKtEKwVZnvm8jO1LkEes-msSR_v*}x|FGeA*iaE zH<-%Q&erAUbB+zi#2mj3x2B)q?Bx0fdN^;9?&KTheSW>}zrSWboSdw1w}tfx_V(~} zs$D~lb|j>armvj*tji-YPEN05GVW>PQ!lIOV2s_hBr|cLGabKM26wbf(aP9ja^q7R z;@Bh2I{-$QhqtJ02F4%wJgZsQr?_y58V=XnG9@+1qdQem)0fuX=>EgMF#e03s@wd6 zqIcLXN$dBRvjCoOd;dwOWHjJlasxqFnV^#h7nggM5oLazsW+vlMVGwDjW=Y6b%!1U zspYu3aV<5HV#_E@|Kh6%j{sOmcm;#zgK~g+hVyka30LTc6y3k_;`OJw&g2#9`!7=& z_Ic`C;CAQd;fXBlUvHb8;hko{T_$!NwmSWf$>3Vf>A<0IEf&HMdABO|<^Zlmq6o+5 z5?h&rv<|a2ZJaao9g)+SN385mz)>Go!Jcz{BpdmgA!H4fE17a+ehl)igCs|OKWTHi zQgs9^u|#-Fu-C+U>$LKPNU1^HOCW&&l)QlGE;blfT>>g6%kL+cYjL!>hj5;)2+q=l z+q46!GnGz9nQ=~xSl7^NBh@~W7(!SlYA|f1ldzsmaQw%B+gneZ>PXta4AfDMMa1WBfrkJ5b3-Y zO^W_{pNGi3rZ%I&K3T~VJrnziV725o)3peuT4k{$?*78X>NKjL-u_r8asyjy54I>p zZ2(g2VuLCWhl?#8u*w{8JXcnSSR^$HCe8m&%b9WSoI303l0ukm@b+%Pu^K> zF^fu)pF{76UK}=jph_hbeQ8e3_+bVF(V#IKgmhMj7f*-sI>hIe|z&~nrVAe?_ zc!fzoM7kxt4OwKI(H5H>nJA1ZwN90(oUFlBgBp|!SKWRBHOMF+Dt8&Y^dRT$t|AY8 zBX|D#8+4z!hKnyr9jn!~VU70)9Y#_NKngi?9PUAOl`iUA| zFqgK|AHPSOra~0*!c{jA!4TIU3OAUq=kMEQ4Nap|XHj+J!LKjVpk=l!*0szy z1@)#a?e-iS?o-RUrGDk*q&b{%;`I}|!B#cPTZ=wO9GJR(a`;b*VMhutiuGFD$shn1 zZ#1Vkabo015grjM8%8Tb)I*;Cy59bwyKauQ?Sb;r&dE3T(l^N3B{chRx%a5(9pw4k z^5W|a0$pz_)!l;vV}%VoT>_l_J>IVF#@99;)bC?IyF|y^bgm!s(dw3(|oL@anPqGV6 zjo&?-NEbsA^98hlgC*?V$CfAqTnNGi&&anbJpR_wAn!$8!It;Ce=_3e~}Vi5w!>0d;zFbP9_< zy-J&o1(dZ$!iBxwFC4l0HMi9B4-vxAbcKa%m zD&wt6sy!C~!aEk!L|Xazw?emP*zEEsV@s!M%epjNCf3ZeW|*f1Kb&zx;8d!ZVF}ES z0_ffgVhYC4*s=G+-hwi%nw1QvNzE5zrk<{ZuK~J2z3iu#H-v;JY5jG=Lc`Z0=ig}| zA44uO)7tn5Sj!QwhT!4-qTFz(1A|m725<{I+z%h7mE z)U)OT8`~v1j7Z$Mt5kmKA{a7@Z0!Zect%8Y+CsKqZ#!JaaYI?Qb#oVdY<$QE(X#a% z0nBxYd>&}saDNv}-Suvo`jm047S_!zc)~zw`1rN9wqP;nuRGXVtK9Y1TW%f z->`yQ=f6ZoMG4(@@;uoEIQ50(0=QR^Q93$vy9c+g_Z;eLaH@m674LLY>S7+q=hgqw zT*;8}eV|zN9+=?!pTt#o`P*&KGDtos5l0Xrwbjq!P%`9>hzL0#-GL1>5K=dnhMObi0rXz? z*@F0k``4k~?gPoEU?)@Zr^yolf!X`77cx3K1EBMR-#7Ov)ad8sC2GiEzlrB+QN%_! zc*&lVRh_5E87VH|++NT%;q}eU)iX-yHOkh7hX+jePvV%2NGI$DY+qCl=RpF$Tltvz4@D=FWxj}mh>g3-@{RZI%ipXXIPPYWevjfd! z>vuNnC*c+6OH(hogMnP`UHE@D9NqPZo)+1E4H66w8_cn<5@tTVE(pdA0}EL{BJDy1 zwTPQHY|Qa#^_g)kG&g{XVZgDGw^Eb1?1J!tR*F0aI;B=#dGg*?bmh?|QF^rBEg`2m zp4EXZUCK*wwfF#b)VjTy?9-=CZ;5TYHfxtYMPJ*h?xkdMwyl4ZN8(Q~QR4!j34bj#dYr{7||FnJVCFv1F@EO?*2xxsor>(&4xMQ9CD zzg5Cc%wFs981`8`1}Q&d{(hcFt4Rm|p}?ih)uXME81t|i?tz~#f#Ro1SuSabmh8Aq zyN18S7dpYW!NPjGJ*B~Mi>I#}5-+S^GSQ2iOTmTa969SAb}ml;lzNxwQzQA=G+403 zWUD=iqq$17hT;98z)>71CBtaKGsT}?dT~K&EfAHDpO$w|hq@7f>VE>KU~ILcGsn>L zmxs+6IfP|3O;XUsY5;y(M52PQr?+MQMe8DXx(8|&7cq10s=Kp8w&I7|kkw}ni(2k{ zDk|uHl5piVMvmG`e@mM`81vT*F6RaNi4Gpy@j>7))g%89X5%l7+81|CyNBz%{)?hV z#J!Wam6s-t69bPLZi*ctlVjiQF|844O}c#$*{xN!)CBm`T}c#6yRvK7+Od`{gQ?g& zxN#mh{fmRZc~cOyZhuAG((z1C_cK(k*kIK!DQmj7Mc-P&!#c}i#3Q1n_JW+< zrDe;Z>f|XsJ{w%_rQ1@Z2!Q=h!#+OHU4Lu2_E(u|k?Q(K?-kCyI&*0e67uLOk?bYHGmYdz2IK1Dx)+)w>Ke=S=MLLAP) zrlN!{;Wr7UiZ3SEOu=BGr5WMU5QDG4k)@Hy2q-yFMrOr4CdpZAm``1Ft=^cpxLR7~ zXxC-n(e6=%B>ASY{aii#H$_@uA8p}i_;v%Do0}Vw-jpJ6O-QA*_`-bg867VG`UC%- zGF5p;y@=f6)luRp!pYEfyBFUB2~JK^B`D1f<7fVj)%|&E#+33XfZ>9PSmnotHVq-F zG=nP~n1aMT=gpNw$M4Ss#%ej00FGIgd1~N(%HBBd*S>9A+uEtEs*eUw zHE1EU<|eiVDCxm};G$zPS3@4wjG+QyI7D)x;TVLrBN>@JM(>|A4B!!VNQHRs)JF{f11OT2~%cermn|`2s?&QLpe*EpX?Cj;!(IFv+;-S1 zc?~85%&x2Sacld)9?|w2xL;^a&X;^vEZ?_a6$ic#XOBXAjryPNFyjFejmIiZ@Y~Ke z;*7^sAIQFCS}0ud1JIGCrN*Sczr@~WGK-Z1$aYLvtcu?{WwZd|54Eu1gKf3103Ko{ z_1iNYFe#H!A4{4hN0Zr!XHtyNXW&E%Ri@%*7SJ6!{H`6GrS`AU;Z>%3+PMU9x82iJ z_k=lmy;cJ26=#w5C~0%`m40o#L&Wo6Q4OQOqFHItdhj@mzZrxak}ZHNN+L+rgKGrr z_lp8G2a5jTbh}Mi6A56owC5GEPX*%Si=kzvCH%J)WH8Zy82VV+FDRx+nPUcrosiVs z`kKQ1yRq~18fU(!^XMWTv%>ohSP$}1hG;k)0*wM-WJ* zt>a6R3oD9OOC96kGd2fM!;>*|YJqkn*9%xBY<h~tJ^9kc?oS3n4I_E`?rcwDJ z-Wikq>H@Owe}K`x{cE|sG1AP+=lCyn z0CohLCMxq{Gp;U338@!hjqwe}x4{k)igwUIjg`%02CWURsjI{?l%`$-BDjdZlH9B| zhKoHN3cQIC>3BIeE4gO|PPgi%-)@;?o(6wzm*|u0o*HS%BOEaf-1e{6R=o($XV`Zs z#eh;x0#n>1r$Oog+O>T_()0Ma8IvY{caTn9PYgHvuPIi%Dk4OdN*Ho1`ybw@U?cchzR~h`yzkFL{*ipyF?}mqCY*q9M zCPDQQxW#|jYL)l|k>SQUvkOPs|F$#TQJG8S6jg{b8%{f_abINkzCY9vgt;HxWl#wq zO9DD3f{rwP{19QN={PO;+vEB^?QIPh>dH7wYvOmA{EdZ~zuic=M^<(8VnEcGGmRlr zB#cI0sUN8J$G99wRYOj?-M0=|)6w-Ybr{$@a>A-iA_t@6{C$Ic1iH%oI{yTP%m%Is zjzUK9(*=%v+)O0+y62Hj`ejDGxVrS5ZeNg5LHPcK2J|3<2NwKyKRDsQ7and^ zQAtLHjKNyDtWql2mm6R<)*>8cL6_5=XLoDGLeVqn&tS^z0RvHLh@xwkA+En`xCOY5 z@tV{^KoHnlv8&|`oh&nXgR>PxB3SRzd5%zrAJ1Pul}-F5EPzo2%sl8q7$ zoU}wpEMI1}z#Y{-x#S4P0*(`o;jMUfZ*)bPk`wi}pP)FK>0`Sr4@p<#_w9o)9G;g6 zm?>ubd;ZKcKJ1*#=g)zBt?JM~-5Xm~pMgE*UxArmw;d7?V{6c9{sHQAB7Zd*vLO$L ziH<+``%l~G)4q+<;E3kk8ItG>N6!~rOb!ib4KL*XyVaNg@pX$N=o(ximH0Fp;qkX) zrtTfEEO6XwOBjL;WYhkcUH|Z1wTQ3UdG_n{0;fg3#*HRPMj^{D_*dmVK)?>GW1$20 zvsh({bK@o9M;qYMcQ3Uq?1PGDy5q@w8+Y|`NL-4Xbw7Cgc+z66z<|^0=2zl5P&KjO z)LHql^@V?)+rY)K+2Rt?zing3+f3RrFzrflg}a!l=}+2t^br)a5GCHPAOYXw;e`*j z61IZPMoOxxwRCi@RCAMIHFd^=Fxq!*rl@KYg9)^Kal9-$NGee={Ce19kSO$X z!^Sxz+phBmyrmY0N2dHET`d-XYgxTdz}890U39$X2JiG;3C|Z<6FiIhPqk>dOTj_# z6YZBs6>IcTAn)6#(oG%meL4Z3$=wSBp6lzAVi|=x45-6r^ylLZN4te<**e}B+xU7n z)(p+-f_dKpl*q;_Nd-8;hWPJU=mZtMYt%$TQn6u7HJ-x}>2c4&_S2ZsY;CmYGWiy=z6hrdN5(Xh9s~-54swU=E zH;VVAKC?WoC~ebxMojz6arS6JWraK>gGuS6scEhpjSY4fg4}G6Vk#^Di)6+07bjBP zi??{EC}$+^_O*p);FmS`Lmh}k`@ur5urn4E_sH)0M>sKWd27R;kR(Wx`x}qY+YpjX z-X9e3M)ff6?^bWY!#nFERlRDV{Xg61w~7gRA(b2z=n|TT@a>xz54K;Xvb6J~t3f@+ zqFqT;IXA|JhV+oxj0<5}*nFbIkWbcjN%Eraw3Ly`ALm{`d?M;7%H_v7R!5g`wtXjT z$p;1rnUFQY1i(LM7p?ro_YME*?70^z2CtrlI_}F@1`RsN23b=$fb}9W?wMDS{@m6@ zPfac4!9T8V;FPjldSQ09GD)C2xLYx4g9Rn*E{)0i1+WV;qNtbhj+~~4KYAD zpGUh!>S?M%QfQ&LO;DassNL@@aSC#$h($lFWkK`L9Qmwk|Pn->BY94Rqy%EsL0qSwlYJ-CN`ogq&dp$YQJ1 zYPd71R&1txdY<0$_5Enowo1jMHd`q)|Egweu?Q7DSpKjlE%$N46*5k^QIPKJ{)%MI z*OlYY`ZRR3VRb5D*Vf48HXbiOB*j>`x38M&<_rUqrLob}NB8g|nl&;UtsMGP$1SeB z7BTs&f~ZK3UMY>U!eZ9vx9^@`eGn&-mz8h>0Np9}J#tlJ*k*vDnDsDr}`(}7mq zG&1pFgutg*w`Gz3%GlEj1wHkMm(0SXqwN0H+K!We-y{jl%rneAA9TMf3FBqu#AKc` zBQvLH35?sTsjcejm=pf%&GaH0A?OODc@;8v1Ev-?YKRj9)%H;8YQ@*j2JeO;5XaN|>%Mhm;ZR~NPX#*I{O&Q&=u6(cfjjY{AIu$h8(>qYpT(M`D zV>gWzK~2pCXkGeQ09HO(n^G)2K1;P!^gL?vVX_OVuX+r6l@`2ktR`z*HVcBg7*r8w zN_D%LN7eA?A6QAvi-8zfW7NC7u$tyV28uYmDsoi}<}3~IXu%MVVzgp)u*Ya1H*#nM zDf*-6S#^K`nSaVeSp5at2RWjTyp=2HJQI9LU_7(brhUa&a3QhtxgFM6P`&SBC*B4J z7js4F&bY&by*M*-y$QocpR+hWxW}z+lkO}el} zzR)oKaR#Z%Fm))w12Rvc@;eGT_S`lP$`{qAkst{~?9v%3u%P5es%NA?h|oUNxc*3VDLxbBe4NjbvQ=d$K%7p*?(%_=Ar zC*(1Lv&CU?Tj$yCw?`&kar1FMzzlo6bL zREH&Xn1cuUw{Np>vq=yaD-1jJF-5dK&+tNtn_ zqBXr4a!VVFVr;+ENot?_*cT!ZiGfTHVvQ{J0u!-JTRvzv;^F7~jzL=KaRCAP49Uw~tR z)kK1Bo)F$ZEiXR&nx88;7@#K+S}-9F__+&Mr0a4q&Vaf?{IyS+I$<8s`3pMn`2#B% zpRZHeWFu|fWMU@i`3q)2*?AHc(7^?)0$8)ackjv??PB1@*0t8X@edG)KNiF-y13Q7 zrCqCcK7v5{HBl)K@zG7}ig_pADD1XrrxdcUqbU?jm*0nzs0{c5I%uK<%dz@94ZEpU zcCA>n-$!?~s0IX;k8-u$#VBXL=u#!oXFWaO?F1ayL450eIz>VI@fJ?7svO~#yC7-s z!c-DMYQ_iCjf$k275x7--@^Xq|I6R|E|5Dx6V%$dvUZ)i2)fd`3(WWZ+?lC-?aj9M zkCXp%NL)T}C62Ylm|#Qi%-#Do=hT>;Ty-jSELc7QGIx!NO9QGN=?7SH>N;YNs28@M z5oNcgj=|L;U$#cqbm-#hQ|X?EX&nLb)beCf^S}*w`>s5YX6VU$2$NHkGvIAPGKzRK z=jq(4&ALYN~cJ!@)2k^Q7y=+$Eq2H|;r|up{wK_WE2yC@UyToTp zSN-u(*Hr!L)==g2?KbcxXu$HasVP_lMlWnLSJOJ0ev>(tusKLt>IhB@DpH>K6j}Xt zj|_%9{C=2tE<_;>w7LE@lQf9rjfxY$`BU-)nLEQ{cZ>{+IB>fM%K?U@{uvb`xyABy zczHQY29HS-?gbS@`AAkYeT*IA2pg^N8a35*Osc6l!1Y3lh_^1@IvfGinCyOAQ{pVq#~d-3AdF27 z|Jcq~tr&Dv6Xny_PxH=49XFU7Bhox(bQiKZ$%w#hSs)bPdwPFk`V+U=s+Yn-S;n6Y zhXexml*^dEugAJ)xBJATiaqU1gvPOQfo{@w(R~gzjQNl-GEYE_al0DGY!FVB9sl0D z)v~1R+GAbai4Iv7?4pl;-=~eXv+wsQM0JR|MX}vK)=~1fAfA@b)m=)uLkF%pw5Bc+ zAZ$|Og9^Te3Z-5EN@85ay9`0#mQq6_QLglH!UE3pSh^Cg$s_ap@$zoft=bsnxL>~0aE`h*Zf-@h>%@OyB~#rOq!9dd>lt)Ryj=6u6z|h1xo}4AT~jGBYF(o z3Z_i5_pct-o($<2cbXDD@BHJ|rU&e|pV_|;kn&;CeyCdKc+c#?sDw$)%F3Nxtm$KQ z@=V}RK2)rfE#*rQhG2Yh_KoruGvB}IsH?mTXDa(8ABot(eBlTX@ zJJt@Q+0|NfPB2}iceKwLH28V`LOOa*yYTzB9Kt^M_*R&GLF`AuWaSjbq7dT4I$d1X zu0?VbDoOAX46Ge!E=Z4L@6;Y=f4N(@r25U>>pQOc%>;V}`I>hyZF}iqimDtaj4QR{ zxW{+WyLbQ6A58?9hQtS!he%^A5DMl>jy&@`PDB`)rFb>%|A8PhDr|b3!JT|ierK6)IcwSn=<4b@`Yo`}WK&50m(FBKWlMh&E7ZDK?pG*p4R!3jeqN@$y`Np!z&2h!)!1x8t&&Dp-UIQ^Xfh_Yu2s zBJJWz6xu-wDeA{uy0;A4W}^!nItKd}&Gr|1Y%};*2A#HtFXF$MD~o4D^+Am^+o48W^ETaxF>4f2L&%)PPkVKop$c;^Nu3kth`e3Ta zgxW3zR7~sWGY>BM%Y!qGWaa*OAf^_dBI^1sCP?5oqmqrsQD(u;i)fZDLP)2tWvY0j zp_Be?LRN8$P%SVIqmwu2an_&7B978>+bHBYlvppLEq-7TQGLm+u;lWK771Y}3x6Eh ztxqgF@)8m%CPuVstBf9TKNs+JO_%+J-`tB`)b|_NWzGU+n~HP~932y8vGiRBaje>K z4}1k~?h8dx1^Z*Y-fM^IwnlO?4bbd-Ty)n9mger%yIIhL%T|%l5!*l4S7`0;50z@X zTJsb3P^of$4(KO)X%{ope%~*j_fA@S0(dUD07)uet>iC)dYe{g-$5@eo^)TJ)@6{g z65sSS`BAUB(>@I2v;#56v!%u@w8O@EIhri}iTKxl#kRR}(>Axfh6lRAKt*0A^>JE~ zZOMyJqDcjv6RWa@K-)$e0~hKh5j6rS4wVKFNtVe%yQc*=c}`sMkwQkKXTHEfe^rjZUTF)ULTBdf!y z$w1AAb7gO8$%mz5o9Lj}lAf2oLDgiR##o^;4_SqO0Y}=4V~&A_^nRTW)!ABJ^5kZq zF`9HPgefx^*A+3F*U_f-TSbg5*|vpTsul=_Jv_(4n`6=4yu$6YE2w>Fh|W{B!}eQv-o<$QeW zjwYmg&2vfZea%wetEQY z8h#4)zm*Msob|OBv(=p78mj$-hAcQ2cOzF06El-5FPI=b zlBzCF8RJaUhC>20*-|)zU^O|L(=!u22c#xrOV)w@h@QL&qV|>hmRY9#ChcC~xJ)ky zC)A=O7MGt|FpG!Uq(8A)s|_K)P`t_28;cA%ZD##`3NKYVAh$X#7&55qOQE&!Y>lc7 z_{%L`w|&)#8b`pep^wQ&73?L(Il3-_o$^ln8^W&^F!KnqcagY_ZD|VKDQ(oJ>E|Kb?Ff2PvXsf$eQIcTu5TqCHXc88z zFvs14n0~6fJ9JC8qh?u1ncZqforJmm&BS@#Z+FCVeO6~EU(kSd7u#XQmGkhShMh&b zLRR~mA-Y2YVO!V?6-M7-sFD3ZAazQ_=vp|lnl&C&;;CRvVDf7QN_Onq{QPsyJcE9A zZRc!7m2jr^5F#R5Ecj_&KW#)DXVmhhnLGZ@g6V11Ae39tQgxyX{oxVZ>TdFZwmn02 zTuq5;vQ;2UeS%AX;UXyRtY$fH4nwNMDhPUa!8CI|_tStJ z^X~mI!)nKA_FJ9e1RUhnn;1GU%YYj8)0=6X*`kOIGE6_MOMp~3RU{F*?}RgJIIU@s z?PsT*HrV&U-Eu_jMHQCnY8#2}F}G`2wiVb6By%SxBH<9{;znUZ8+~)Ny#LpsPwa4j zM&SF#yJ(FWsPir5xp(F|z_ZL6v{7*%=>PWIi^}}*7%^U=QlGlT(2`n6PBT?#h>dJX zaXe){>0gyFM@Awfr=yL10Zd~@hTTQDvO!p#-)_1iYC#Z` z@aVJbAaJd(vr$zVJ+bg>n=InFtiig(F-z4_IxPjUZLOl}juAN6!G(qlqnhjd^+2Pw ztj(S<#k$lW`d*CcPwBc^_FsbVADxGutc^E9Y=qaItTjeY^sPk;_bP$6YMlxjse#+S zU*W)%h#)VAP(0{vGkTe>03=vGCK~Uq_XUWsh@nehOP?d@t=6h#hAe5Ou|8bi zW{D|$mtm|%ykNQLbW(NAWq`QIm4&+#(WOeOvHOJ|H5}txBCfokmM1Te*GcMk6sluq zIb0_aQ3&NWN+VAm(6J9J2dq@YtlNk!GNoe!`VT-A{vU=n;RlX1o+=?8avuS%oU%B=b^f znX`_K{!5bV&-EtS1^37{Xx}&sTR>2EC&b*vPnUAV?z@!8VP3m z;*%J(>35ONAcNg4!y&QIyDW?%^fO=A(B+iASAAFZetdleYQ6sJ J1# Date: Tue, 3 Sep 2024 11:54:27 +0900 Subject: [PATCH 44/94] chore: fix Solidity linter errors --- packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol | 3 +-- .../contracts/LSP7DigitalAssetInitAbstract.sol | 6 +++--- .../contracts/LSP8IdentifiableDigitalAsset.sol | 1 - .../contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol | 1 - 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol index 6aefbda33..b6adb8d84 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.4; // interfaces -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import { ILSP1UniversalReceiver as ILSP1 } from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; @@ -231,7 +230,7 @@ abstract contract LSP7DigitalAsset is } /** - * @inheritdoc IERC165 + * @inheritdoc LSP17Extendable */ function supportsInterface( bytes4 interfaceId diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol index e180a41dc..1cd27ebee 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol @@ -7,13 +7,13 @@ import { } from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; import {ILSP7DigitalAsset} from "./ILSP7DigitalAsset.sol"; - // modules import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +// TODO: define if we inherit the upgradable version `ERC165CheckerUpgradeable` import { - ERC165Checker // TODO: define if we inherit the upgradable version + ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; import { LSP4DigitalAssetMetadataInitAbstract, @@ -68,7 +68,7 @@ import { /** * @title Proxy Implementation of the LSP7 Digital Asset standard, a contract that represents a fungible token. * @author Matthew Stevens - * + * * @dev This contract implement the core logic of the functions for the {ILSP7DigitalAsset} interface. * Minting and transferring are supplied with a `uint256` amount. * This implementation is agnostic to the way tokens are created. diff --git a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol index a60f65124..a47558230 100644 --- a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol +++ b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.12; // interfaces -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import { ILSP1UniversalReceiver as ILSP1 } from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; diff --git a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol index afb58ca4a..5b933cc4f 100644 --- a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol @@ -2,7 +2,6 @@ pragma solidity ^0.8.12; // interfaces -import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import { ILSP1UniversalReceiver as ILSP1 } from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; From a4468554252e642a5357ba18ed07737cb95a7bee Mon Sep 17 00:00:00 2001 From: CJ42 Date: Wed, 4 Sep 2024 18:24:01 +0900 Subject: [PATCH 45/94] build: update local dependencies for ERC725 v8 with local build --- package-lock.json | 25572 ++++++++-------- .../contracts/LSP4DigitalAssetMetadata.sol | 2 +- .../LSP4DigitalAssetMetadataInitAbstract.sol | 2 +- .../erc725-smart-contracts-8.0.0-1.tgz | Bin 14324 -> 0 bytes .../erc725-smart-contracts-v8-rc0.tgz | Bin 0 -> 14333 bytes packages/lsp4-contracts/package.json | 2 +- .../erc725-smart-contracts-8.0.0-1.tgz | Bin 14324 -> 0 bytes .../erc725-smart-contracts-v8-rc0.tgz | Bin 0 -> 14333 bytes packages/lsp7-contracts/package.json | 2 +- .../LSP8IdentifiableDigitalAsset.sol | 2 +- .../erc725-smart-contracts-8.0.0-1.tgz | Bin 14324 -> 0 bytes .../erc725-smart-contracts-v8-rc0.tgz | Bin 0 -> 14333 bytes packages/lsp8-contracts/package.json | 2 +- 13 files changed, 12006 insertions(+), 13578 deletions(-) delete mode 100644 packages/lsp4-contracts/erc725-smart-contracts-8.0.0-1.tgz create mode 100644 packages/lsp4-contracts/erc725-smart-contracts-v8-rc0.tgz delete mode 100644 packages/lsp7-contracts/erc725-smart-contracts-8.0.0-1.tgz create mode 100644 packages/lsp7-contracts/erc725-smart-contracts-v8-rc0.tgz delete mode 100644 packages/lsp8-contracts/erc725-smart-contracts-8.0.0-1.tgz create mode 100644 packages/lsp8-contracts/erc725-smart-contracts-v8-rc0.tgz diff --git a/package-lock.json b/package-lock.json index 750f06028..5619a2aa5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -130,8 +130,7 @@ }, "node_modules/@babel/compat-data": { "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -177,8 +176,7 @@ }, "node_modules/@babel/generator": { "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "license": "MIT", "dependencies": { "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", @@ -300,8 +298,7 @@ }, "node_modules/@babel/helpers": { "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "license": "MIT", "dependencies": { "@babel/template": "^7.25.0", "@babel/types": "^7.25.6" @@ -325,8 +322,7 @@ }, "node_modules/@babel/parser": { "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "license": "MIT", "dependencies": { "@babel/types": "^7.25.6" }, @@ -339,8 +335,7 @@ }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz", - "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==", + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.8", @@ -358,8 +353,7 @@ }, "node_modules/@babel/runtime": { "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -369,8 +363,6 @@ }, "node_modules/@babel/runtime-corejs3": { "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.25.6.tgz", - "integrity": "sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==", "dev": true, "license": "MIT", "dependencies": { @@ -383,8 +375,6 @@ }, "node_modules/@babel/standalone": { "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.25.6.tgz", - "integrity": "sha512-Kf2ZcZVqsKbtYhlA7sP0z5A3q5hmCVYMKMWRWNK/5OVwHIve3JY1djVRmIVAx8FMueLIfZGKQDIILK2w8zO4mg==", "dev": true, "license": "MIT", "engines": { @@ -416,8 +406,7 @@ }, "node_modules/@babel/traverse": { "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/generator": "^7.25.6", @@ -451,8 +440,7 @@ }, "node_modules/@babel/types": { "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", @@ -496,560 +484,381 @@ }, "node_modules/@erc725/smart-contracts": { "version": "7.0.0", - "resolved": "file:packages/lsp7-contracts/erc725-smart-contracts-8.0.0-1.tgz", - "integrity": "sha512-bqvxTz4xG4UUNVHrCaewSUTN7y9LBTHxeYM4Ojtw32Yq/JiwkdNTrxFrn4cMdfvYRC7BWBBq5iwBosn7KrusGw==", + "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.6", "@openzeppelin/contracts-upgradeable": "^4.9.6", "solidity-bytes-utils": "0.8.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", - "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" + "node_modules/@erc725/smart-contracts-v8": { + "version": "8.0.0-rc0", + "resolved": "file:packages/lsp4-contracts/erc725-smart-contracts-v8-rc0.tgz", + "integrity": "sha512-BMz9kaqyohqxu/84b5Dce3pATmoc8DwrDPsfmkbBANMVknwdfLk85u5qUa5D/vt+VSzwaXMgimBrdcglyijL0g==", + "dependencies": { + "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts-upgradeable": "^4.9.6", + "solidity-bytes-utils": "0.8.0" } }, - "node_modules/@esbuild/android-arm": { + "node_modules/@esbuild/darwin-arm64": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", "cpu": [ - "arm" + "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "android" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=12" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=12" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], + "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause" + }, + "node_modules/@ethereumjs/common": { + "version": "2.6.5", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, "engines": { - "node": ">=12" + "node": ">=14" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], + "node_modules/@ethereumjs/tx": { + "version": "3.5.2", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^2.6.4", + "ethereumjs-util": "^7.1.5" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, "engines": { - "node": ">=12" + "node": ">=14" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.4.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.4.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.2.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", - "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "engines": { - "node": ">=18" + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], + "node_modules/@ethersproject/basex": { + "version": "5.7.0", "dev": true, - "optional": true, - "os": [ - "sunos" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@ethersproject/bignumber": "^5.7.0" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.1", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/eslintrc/node_modules/sprintf-js": { - "version": "1.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/@ethereumjs/common": { - "version": "2.6.5", - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/rlp": { - "version": "4.0.1", - "dev": true, - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/util": { - "version": "8.1.0", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" - } - }, - "node_modules/@ethersproject/abi": { + "node_modules/@ethersproject/contracts": { "version": "5.7.0", + "dev": true, "funding": [ { "type": "individual", @@ -1062,18 +871,19 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "@ethersproject/transactions": "^5.7.0" } }, - "node_modules/@ethersproject/abstract-provider": { + "node_modules/@ethersproject/hash": { "version": "5.7.0", "funding": [ { @@ -1087,17 +897,20 @@ ], "license": "MIT", "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/abstract-signer": { + "node_modules/@ethersproject/hdnode": { "version": "5.7.0", + "dev": true, "funding": [ { "type": "individual", @@ -1110,15 +923,23 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" } }, - "node_modules/@ethersproject/address": { + "node_modules/@ethersproject/json-wallets": { "version": "5.7.0", + "dev": true, "funding": [ { "type": "individual", @@ -1131,14 +952,27 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, - "node_modules/@ethersproject/base64": { + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@ethersproject/keccak256": { "version": "5.7.0", "funding": [ { @@ -1152,12 +986,12 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0" + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" } }, - "node_modules/@ethersproject/basex": { + "node_modules/@ethersproject/logger": { "version": "5.7.0", - "dev": true, "funding": [ { "type": "individual", @@ -1168,14 +1002,10 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } + "license": "MIT" }, - "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", + "node_modules/@ethersproject/networks": { + "version": "5.7.1", "funding": [ { "type": "individual", @@ -1188,13 +1018,12 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/bytes": { + "node_modules/@ethersproject/pbkdf2": { "version": "5.7.0", + "dev": true, "funding": [ { "type": "individual", @@ -1207,10 +1036,11 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" } }, - "node_modules/@ethersproject/constants": { + "node_modules/@ethersproject/properties": { "version": "5.7.0", "funding": [ { @@ -1224,11 +1054,11 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/bignumber": "^5.7.0" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", + "node_modules/@ethersproject/providers": { + "version": "5.7.2", "dev": true, "funding": [ { @@ -1242,227 +1072,26 @@ ], "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", "@ethersproject/bignumber": "^5.7.0", "@ethersproject/bytes": "^5.7.0", "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT" - }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" } }, "node_modules/@ethersproject/providers/node_modules/ws": { @@ -1584,3349 +1213,2219 @@ "@ethersproject/keccak256": "^5.7.0", "@ethersproject/logger": "^5.7.0", "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "license": "BSD-3-Clause" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@lukso/eip191-signer.js": { - "version": "0.2.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "eth-lib": "^0.1.29", - "ethereumjs-account": "^3.0.0", - "ethereumjs-util": "^7.1.5", - "web3-utils": "^1.7.5" - } - }, - "node_modules/@lukso/lsp-smart-contracts": { - "resolved": "packages/lsp-smart-contracts", - "link": true - }, - "node_modules/@lukso/lsp0-contracts": { - "resolved": "packages/lsp0-contracts", - "link": true - }, - "node_modules/@lukso/lsp1-contracts": { - "resolved": "packages/lsp1-contracts", - "link": true - }, - "node_modules/@lukso/lsp10-contracts": { - "resolved": "packages/lsp10-contracts", - "link": true - }, - "node_modules/@lukso/lsp11-contracts": { - "resolved": "packages/lsp11-contracts", - "link": true - }, - "node_modules/@lukso/lsp12-contracts": { - "resolved": "packages/lsp12-contracts", - "link": true - }, - "node_modules/@lukso/lsp14-contracts": { - "resolved": "packages/lsp14-contracts", - "link": true - }, - "node_modules/@lukso/lsp16-contracts": { - "resolved": "packages/lsp16-contracts", - "link": true - }, - "node_modules/@lukso/lsp17-contracts": { - "resolved": "packages/lsp17-contracts", - "link": true - }, - "node_modules/@lukso/lsp17contractextension-contracts": { - "resolved": "packages/lsp17contractextension-contracts", - "link": true - }, - "node_modules/@lukso/lsp1delegate-contracts": { - "resolved": "packages/lsp1delegate-contracts", - "link": true - }, - "node_modules/@lukso/lsp2-contracts": { - "resolved": "packages/lsp2-contracts", - "link": true - }, - "node_modules/@lukso/lsp20-contracts": { - "resolved": "packages/lsp20-contracts", - "link": true - }, - "node_modules/@lukso/lsp23-contracts": { - "resolved": "packages/lsp23-contracts", - "link": true - }, - "node_modules/@lukso/lsp25-contracts": { - "resolved": "packages/lsp25-contracts", - "link": true - }, - "node_modules/@lukso/lsp26-contracts": { - "resolved": "packages/lsp26-contracts", - "link": true - }, - "node_modules/@lukso/lsp3-contracts": { - "resolved": "packages/lsp3-contracts", - "link": true - }, - "node_modules/@lukso/lsp4-contracts": { - "resolved": "packages/lsp4-contracts", - "link": true - }, - "node_modules/@lukso/lsp5-contracts": { - "resolved": "packages/lsp5-contracts", - "link": true - }, - "node_modules/@lukso/lsp6-contracts": { - "resolved": "packages/lsp6-contracts", - "link": true - }, - "node_modules/@lukso/lsp7-contracts": { - "resolved": "packages/lsp7-contracts", - "link": true - }, - "node_modules/@lukso/lsp8-contracts": { - "resolved": "packages/lsp8-contracts", - "link": true - }, - "node_modules/@lukso/lsp9-contracts": { - "resolved": "packages/lsp9-contracts", - "link": true - }, - "node_modules/@lukso/universalprofile-contracts": { - "resolved": "packages/universalprofile-contracts", - "link": true - }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.1", - "license": "ISC", - "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { - "version": "4.11.6", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { - "version": "6.2.1", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/@metamask/safe-event-emitter": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/secp256k1": { - "version": "1.6.3", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nomicfoundation/edr": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.5.2", - "@nomicfoundation/edr-darwin-x64": "0.5.2", - "@nomicfoundation/edr-linux-arm64-gnu": "0.5.2", - "@nomicfoundation/edr-linux-arm64-musl": "0.5.2", - "@nomicfoundation/edr-linux-x64-gnu": "0.5.2", - "@nomicfoundation/edr-linux-x64-musl": "0.5.2", - "@nomicfoundation/edr-win32-x64-msvc": "0.5.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.4" - } - }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.4", - "dev": true, - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.4", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.4", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "chai": "^4.2.0", - "ethers": "^6.1.0", - "hardhat": "^2.9.4" - } - }, - "node_modules/@nomicfoundation/hardhat-ethers": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz", - "integrity": "sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "debug": "^4.1.1", - "lodash.isequal": "^4.5.0" - }, - "peerDependencies": { - "ethers": "^6.1.0", - "hardhat": "^2.0.0" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.11", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ethereumjs-util": "^7.1.4" - }, - "peerDependencies": { - "hardhat": "^2.9.5" - } - }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "9.1.0", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=16.0.0", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.3.0", - "typescript": ">=4.5.0" - } - }, - "node_modules/@nomicfoundation/hardhat-verify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.10.tgz", - "integrity": "sha512-3zoTZGQhpeOm6piJDdsGb6euzZAd7N5Tk0zPQvGnfKQ0+AoxKz/7i4if12goi8IDTuUGElAUuZyQB8PMQoXA5g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "chalk": "^2.4.2", - "debug": "^4.1.1", - "lodash.clonedeep": "^4.5.0", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.4" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@nomiclabs/hardhat-web3": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/bignumber.js": "^5.0.0" - }, - "peerDependencies": { - "hardhat": "^2.0.0", - "web3": "^1.0.0-beta.36" - } - }, - "node_modules/@openzeppelin/contracts": { - "version": "4.9.6", - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.9.6", - "license": "MIT" - }, - "node_modules/@rollup/plugin-alias": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slash": "^4.0.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-alias/node_modules/slash": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "25.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "commondir": "^1.0.1", - "estree-walker": "^2.0.2", - "glob": "^8.0.3", - "is-reference": "1.2.1", - "magic-string": "^0.30.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.68.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/glob": { - "version": "8.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { - "version": "5.1.6", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@rollup/plugin-json": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.1.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "15.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "@types/resolve": "1.20.2", - "deepmerge": "^4.2.2", - "is-builtin-module": "^3.2.1", - "is-module": "^1.0.0", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^2.78.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { - "version": "1.22.8", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "5.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "magic-string": "^0.30.3" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", - "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", - "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", - "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", - "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", - "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", - "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", - "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", - "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", - "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", - "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", - "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", - "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", - "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", - "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", - "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", - "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true - }, - "node_modules/@scure/base": { - "version": "1.1.8", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.4.0", - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@scure/bip39": { - "version": "1.3.0", - "dev": true, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@noble/hashes": "~1.4.0", - "@scure/base": "~1.1.6" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.4.0", - "dev": true, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" } }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", + "node_modules/@ethersproject/units": { + "version": "5.7.0", "dev": true, - "license": "BSD-3-Clause", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", "dev": true, - "license": "BSD-3-Clause", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" } }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@sentry/tracing/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sentry/types": { - "version": "5.30.0", + "node_modules/@fastify/busboy": { + "version": "2.1.1", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "license": "Apache-2.0", "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "node": ">=10.10.0" } }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "dev": true, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", "license": "MIT", "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "license": "MIT", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", "dependencies": { - "defer-to-connect": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=14.16" + "node": "*" } }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "dev": true, - "license": "MIT" + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "license": "BSD-3-Clause" }, - "node_modules/@truffle/hdwallet": { - "version": "0.1.4", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", "license": "MIT", "dependencies": { - "ethereum-cryptography": "1.1.2", - "keccak": "3.0.2", - "secp256k1": "4.0.3" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": "^16.20 || ^18.16 || >=20" + "node": ">=6.0.0" } }, - "node_modules/@truffle/hdwallet-provider": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.15.tgz", - "integrity": "sha512-I5cSS+5LygA3WFzru9aC5+yDXVowEEbLCx0ckl/RqJ2/SCiYXkzYlR5/DjjDJuCtYhivhrn2RP9AheeFlRF+qw==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "license": "MIT", "dependencies": { - "@ethereumjs/common": "^2.4.0", - "@ethereumjs/tx": "^3.3.0", - "@metamask/eth-sig-util": "4.0.1", - "@truffle/hdwallet": "^0.1.4", - "@types/ethereum-protocol": "^1.0.0", - "@types/web3": "1.0.20", - "@types/web3-provider-engine": "^14.0.0", - "ethereum-cryptography": "1.1.2", - "ethereum-protocol": "^1.0.1", - "ethereumjs-util": "^7.1.5", - "web3": "1.10.0", - "web3-provider-engine": "16.0.3" - }, - "engines": { - "node": "^16.20 || ^18.16 || >=20" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/common": { - "version": "2.5.0", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/tx": { - "version": "3.3.2", - "license": "MPL-2.0", - "dependencies": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@noble/hashes": { - "version": "1.1.2", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", "license": "MIT" }, - "node_modules/@truffle/hdwallet-provider/node_modules/@scure/bip32": { - "version": "1.1.0", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "dev": true, "license": "MIT", "dependencies": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@scure/bip39": { - "version": "1.1.0", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", + "node_modules/@lukso/eip191-signer.js": { + "version": "0.2.2", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" + "eth-lib": "^0.1.29", + "ethereumjs-account": "^3.0.0", + "ethereumjs-util": "^7.1.5", + "web3-utils": "^1.7.5" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/@types/node": { - "version": "12.20.55", - "license": "MIT" + "node_modules/@lukso/lsp-smart-contracts": { + "resolved": "packages/lsp-smart-contracts", + "link": true }, - "node_modules/@truffle/hdwallet-provider/node_modules/cross-fetch": { - "version": "3.1.8", - "license": "MIT", + "node_modules/@lukso/lsp0-contracts": { + "resolved": "packages/lsp0-contracts", + "link": true + }, + "node_modules/@lukso/lsp1-contracts": { + "resolved": "packages/lsp1-contracts", + "link": true + }, + "node_modules/@lukso/lsp10-contracts": { + "resolved": "packages/lsp10-contracts", + "link": true + }, + "node_modules/@lukso/lsp11-contracts": { + "resolved": "packages/lsp11-contracts", + "link": true + }, + "node_modules/@lukso/lsp12-contracts": { + "resolved": "packages/lsp12-contracts", + "link": true + }, + "node_modules/@lukso/lsp14-contracts": { + "resolved": "packages/lsp14-contracts", + "link": true + }, + "node_modules/@lukso/lsp16-contracts": { + "resolved": "packages/lsp16-contracts", + "link": true + }, + "node_modules/@lukso/lsp17-contracts": { + "resolved": "packages/lsp17-contracts", + "link": true + }, + "node_modules/@lukso/lsp17contractextension-contracts": { + "resolved": "packages/lsp17contractextension-contracts", + "link": true + }, + "node_modules/@lukso/lsp1delegate-contracts": { + "resolved": "packages/lsp1delegate-contracts", + "link": true + }, + "node_modules/@lukso/lsp2-contracts": { + "resolved": "packages/lsp2-contracts", + "link": true + }, + "node_modules/@lukso/lsp20-contracts": { + "resolved": "packages/lsp20-contracts", + "link": true + }, + "node_modules/@lukso/lsp23-contracts": { + "resolved": "packages/lsp23-contracts", + "link": true + }, + "node_modules/@lukso/lsp25-contracts": { + "resolved": "packages/lsp25-contracts", + "link": true + }, + "node_modules/@lukso/lsp26-contracts": { + "resolved": "packages/lsp26-contracts", + "link": true + }, + "node_modules/@lukso/lsp3-contracts": { + "resolved": "packages/lsp3-contracts", + "link": true + }, + "node_modules/@lukso/lsp4-contracts": { + "resolved": "packages/lsp4-contracts", + "link": true + }, + "node_modules/@lukso/lsp5-contracts": { + "resolved": "packages/lsp5-contracts", + "link": true + }, + "node_modules/@lukso/lsp6-contracts": { + "resolved": "packages/lsp6-contracts", + "link": true + }, + "node_modules/@lukso/lsp7-contracts": { + "resolved": "packages/lsp7-contracts", + "link": true + }, + "node_modules/@lukso/lsp8-contracts": { + "resolved": "packages/lsp8-contracts", + "link": true + }, + "node_modules/@lukso/lsp9-contracts": { + "resolved": "packages/lsp9-contracts", + "link": true + }, + "node_modules/@lukso/universalprofile-contracts": { + "resolved": "packages/universalprofile-contracts", + "link": true + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "license": "ISC", "dependencies": { - "node-fetch": "^2.6.12" + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/eth-lib": { - "version": "0.2.8", + "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { + "version": "4.11.6", "license": "MIT", "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "@types/node": "*" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "version": "6.2.1", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" + "node_modules/@metamask/safe-event-emitter": { + "version": "2.0.0", + "license": "ISC" }, - "node_modules/@truffle/hdwallet-provider/node_modules/ethereum-cryptography": { - "version": "1.1.2", + "node_modules/@noble/curves": { + "version": "1.2.0", + "dev": true, "license": "MIT", "dependencies": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/uuid": { - "version": "9.0.1", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "node_modules/@noble/hashes": { + "version": "1.3.2", + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3": { - "version": "1.10.0", - "hasInstallScript": true, - "license": "LGPL-3.0", - "dependencies": { - "web3-bzz": "1.10.0", - "web3-core": "1.10.0", - "web3-eth": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-shh": "1.10.0", - "web3-utils": "1.10.0" - }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-bzz": { - "version": "1.10.0", - "hasInstallScript": true, - "license": "LGPL-3.0", - "dependencies": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" + "node": ">= 16" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@noble/secp256k1": { + "version": "1.6.3", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", "dependencies": { - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-requestmanager": "1.10.0", - "web3-utils": "1.10.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=8.0.0" + "node": ">= 8" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-helpers": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "web3-eth-iban": "1.10.0", - "web3-utils": "1.10.0" - }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 8" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-method": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-utils": "1.10.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 8" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-promievent": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@nomicfoundation/edr": { + "version": "0.5.2", + "dev": true, + "license": "MIT", "dependencies": { - "eventemitter3": "4.0.4" + "@nomicfoundation/edr-darwin-arm64": "0.5.2", + "@nomicfoundation/edr-darwin-x64": "0.5.2", + "@nomicfoundation/edr-linux-arm64-gnu": "0.5.2", + "@nomicfoundation/edr-linux-arm64-musl": "0.5.2", + "@nomicfoundation/edr-linux-x64-gnu": "0.5.2", + "@nomicfoundation/edr-linux-x64-musl": "0.5.2", + "@nomicfoundation/edr-win32-x64-msvc": "0.5.2" }, "engines": { - "node": ">=8.0.0" + "node": ">= 18" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-requestmanager": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "util": "^0.12.5", - "web3-core-helpers": "1.10.0", - "web3-providers-http": "1.10.0", - "web3-providers-ipc": "1.10.0", - "web3-providers-ws": "1.10.0" - }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.5.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 18" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-subscriptions": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0" - }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.5.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 18" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-accounts": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-eth-ens": "1.10.0", - "web3-eth-iban": "1.10.0", - "web3-eth-personal": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" - }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.5.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 18" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-abi": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.0" - }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.5.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 18" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-accounts": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "@ethereumjs/common": "2.5.0", - "@ethereumjs/tx": "3.3.2", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.1.5", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" - }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.5.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 18" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-contract": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-utils": "1.10.0" - }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.5.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 18" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-ens": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-promievent": "1.10.0", - "web3-eth-abi": "1.10.0", - "web3-eth-contract": "1.10.0", - "web3-utils": "1.10.0" - }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.5.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 18" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-iban": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.0" - }, - "engines": { - "node": ">=8.0.0" + "@nomicfoundation/ethereumjs-util": "9.0.4" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-personal": { - "version": "1.10.0", - "license": "LGPL-3.0", - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.10.0", - "web3-core-helpers": "1.10.0", - "web3-core-method": "1.10.0", - "web3-net": "1.10.0", - "web3-utils": "1.10.0" + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" }, "engines": { - "node": ">=8.0.0" + "node": ">=18" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-net": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", + "dev": true, + "license": "MPL-2.0", "dependencies": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-utils": "1.10.0" + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-http": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", + "dev": true, + "license": "MPL-2.0", "dependencies": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.0" + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" }, "engines": { - "node": ">=8.0.0" + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-ipc": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.10.0" + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" }, - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "chai": "^4.2.0", + "ethers": "^6.1.0", + "hardhat": "^2.9.4" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-ws": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.8", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.0", - "websocket": "^1.0.32" + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" }, - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-shh": { - "version": "1.10.0", - "hasInstallScript": true, - "license": "LGPL-3.0", + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.0.11", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "web3-core": "1.10.0", - "web3-core-method": "1.10.0", - "web3-core-subscriptions": "1.10.0", - "web3-net": "1.10.0" + "ethereumjs-util": "^7.1.4" }, - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "hardhat": "^2.9.5" } }, - "node_modules/@truffle/hdwallet-provider/node_modules/web3-utils": { - "version": "1.10.0", - "license": "LGPL-3.0", + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "9.1.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=16.0.0", + "chai": "^4.2.0", + "ethers": "^6.4.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.0.10", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2" } }, - "node_modules/@truffle/hdwallet/node_modules/@noble/hashes": { - "version": "1.1.2", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } }, - "node_modules/@truffle/hdwallet/node_modules/@scure/bip32": { - "version": "1.1.0", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.2", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" + "optional": true, + "engines": { + "node": ">= 12" } }, - "node_modules/@truffle/hdwallet/node_modules/@scure/bip39": { - "version": "1.1.0", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.2", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" + "optional": true, + "engines": { + "node": ">= 12" } }, - "node_modules/@truffle/hdwallet/node_modules/ethereum-cryptography": { - "version": "1.1.2", + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.2", + "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" + "optional": true, + "engines": { + "node": ">= 12" } }, - "node_modules/@truffle/hdwallet/node_modules/keccak": { - "version": "3.0.2", - "hasInstallScript": true, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.2", + "dev": true, "license": "MIT", - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, + "optional": true, "engines": { - "node": ">=10.0.0" + "node": ">= 12" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.2", "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, "engines": { - "node": ">=10.13.0" + "node": ">= 12" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.2", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", + "node_modules/@nomiclabs/hardhat-web3": { + "version": "2.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@types/bignumber.js": "^5.0.0" + }, + "peerDependencies": { + "hardhat": "^2.0.0", + "web3": "^1.0.0-beta.36" + } }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "dev": true, + "node_modules/@openzeppelin/contracts": { + "version": "4.9.6", "license": "MIT" }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "dev": true, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.9.6", "license": "MIT" }, - "node_modules/@turbo/gen": { - "version": "1.13.4", + "node_modules/@rollup/plugin-alias": { + "version": "5.1.0", "dev": true, - "license": "MPL-2.0", + "license": "MIT", "dependencies": { - "@turbo/workspaces": "1.13.4", - "chalk": "2.4.2", - "commander": "^10.0.0", - "fs-extra": "^10.1.0", - "inquirer": "^8.2.4", - "minimatch": "^9.0.0", - "node-plop": "^0.26.3", - "proxy-agent": "^6.2.2", - "ts-node": "^10.9.1", - "update-check": "^1.5.4", - "validate-npm-package-name": "^5.0.0" + "slash": "^4.0.0" }, - "bin": { - "gen": "dist/cli.js" + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@turbo/workspaces": { - "version": "1.13.4", + "node_modules/@rollup/plugin-alias/node_modules/slash": { + "version": "4.0.0", "dev": true, - "license": "MPL-2.0", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.8", + "dev": true, + "license": "MIT", "dependencies": { - "chalk": "2.4.2", - "commander": "^10.0.0", - "execa": "5.1.1", - "fast-glob": "^3.2.12", - "fs-extra": "^10.1.0", - "gradient-string": "^2.0.0", - "inquirer": "^8.0.0", - "js-yaml": "^4.1.0", - "ora": "4.1.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "update-check": "^1.5.4" + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" }, - "bin": { - "workspaces": "dist/cli.js" + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@turbo/workspaces/node_modules/semver": { - "version": "7.6.3", + "node_modules/@rollup/plugin-commonjs/node_modules/glob": { + "version": "8.1.0", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typechain/ethers-v6": { - "version": "0.5.1", + "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": { + "version": "5.1.6", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" + "brace-expansion": "^2.0.1" }, - "peerDependencies": { - "ethers": "6.x", - "typechain": "^8.3.2", - "typescript": ">=4.7.0" + "engines": { + "node": ">=10" } }, - "node_modules/@typechain/hardhat": { - "version": "9.1.0", + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", "dev": true, "license": "MIT", "dependencies": { - "fs-extra": "^9.1.0" + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" }, "peerDependencies": { - "@typechain/ethers-v6": "^0.5.1", - "ethers": "^6.1.0", - "hardhat": "^2.9.9", - "typechain": "^8.3.2" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.3", "dev": true, "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@types/bignumber.js": { - "version": "5.0.0", + "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { + "version": "1.22.8", "dev": true, "license": "MIT", "dependencies": { - "bignumber.js": "*" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/bn.js": { - "version": "5.1.5", + "node_modules/@rollup/plugin-replace": { + "version": "5.0.7", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "dev": true, "license": "MIT", "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/@types/chai": { - "version": "4.3.19", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.19.tgz", - "integrity": "sha512-2hHHvQBVE2FiSK4eN0Br6snX9MtolHaTo/batnLjlGRhoQzlCL61iVpxoqO7SfFyOw+P/pwv+0zNHzKoGWz9Cw==", + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.21.2", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "peer": true }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "dev": true, + "node_modules/@scure/base": { + "version": "1.1.8", "license": "MIT", - "peer": true, - "dependencies": { - "@types/chai": "*" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", + "node_modules/@scure/bip32": { + "version": "1.4.0", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@types/estree": { - "version": "1.0.5", + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", "dev": true, - "license": "MIT" - }, - "node_modules/@types/ethereum-protocol": { - "version": "1.0.5", "license": "MIT", "dependencies": { - "bignumber.js": "7.2.1" + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@types/ethereum-protocol/node_modules/bignumber.js": { - "version": "7.2.1", + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "dev": true, "license": "MIT", "engines": { - "node": "*" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@types/form-data": { - "version": "0.0.33", + "node_modules/@scure/bip39": { + "version": "1.3.0", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@types/fs-extra": { - "version": "11.0.4", + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", "dev": true, "license": "MIT", - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@types/glob": { - "version": "7.2.0", + "node_modules/@sentry/core": { + "version": "5.30.0", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "license": "MIT" - }, - "node_modules/@types/inquirer": { - "version": "6.5.0", + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "license": "MIT", - "dependencies": { - "@types/through": "*", - "rxjs": "^6.4.0" - } + "license": "0BSD" }, - "node_modules/@types/inquirer/node_modules/rxjs": { - "version": "6.6.7", + "node_modules/@sentry/hub": { + "version": "5.30.0", "dev": true, - "license": "Apache-2.0", + "license": "BSD-3-Clause", "dependencies": { - "tslib": "^1.9.0" + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "npm": ">=2.0.0" + "node": ">=6" } }, - "node_modules/@types/inquirer/node_modules/tslib": { + "node_modules/@sentry/hub/node_modules/tslib": { "version": "1.14.1", "dev": true, "license": "0BSD" }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "license": "MIT" - }, - "node_modules/@types/jsonfile": { - "version": "6.1.4", + "node_modules/@sentry/minimal": { + "version": "5.30.0", "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@types/node": "*" + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/@types/mocha": { - "version": "10.0.7", + "node_modules/@sentry/node": { + "version": "5.30.0", "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@types/node": { - "version": "22.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz", - "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@types/node": "*" + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ps-tree": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/resolve": { - "version": "1.20.2", + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "license": "MIT" - }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/secp256k1": { - "version": "4.0.6", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "license": "MIT" - }, - "node_modules/@types/through": { - "version": "0.0.33", + "license": "0BSD" + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@types/tinycolor2": { - "version": "1.4.6", + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "license": "MIT" - }, - "node_modules/@types/underscore": { - "version": "1.11.15", - "license": "MIT" + "license": "0BSD" }, - "node_modules/@types/web3": { - "version": "1.0.20", - "license": "MIT", - "dependencies": { - "@types/bn.js": "*", - "@types/underscore": "*" + "node_modules/@sentry/types": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6" } }, - "node_modules/@types/web3-provider-engine": { - "version": "14.0.4", - "license": "MIT", + "node_modules/@sentry/utils": { + "version": "5.30.0", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@types/ethereum-protocol": "*" + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@types/which": { - "version": "3.0.4", + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", + "node_modules/@sindresorhus/is": { + "version": "4.6.0", "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "engines": { - "node": ">= 4" + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=14.16" } }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "license": "BSD-2-Clause", + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@truffle/hdwallet": { + "version": "0.1.4", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" + "ethereum-cryptography": "1.1.2", + "keccak": "3.0.2", + "secp256k1": "4.0.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "license": "MIT", + "node_modules/@truffle/hdwallet-provider": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/@truffle/hdwallet-provider/-/hdwallet-provider-2.1.15.tgz", + "integrity": "sha512-I5cSS+5LygA3WFzru9aC5+yDXVowEEbLCx0ckl/RqJ2/SCiYXkzYlR5/DjjDJuCtYhivhrn2RP9AheeFlRF+qw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@ethereumjs/common": "^2.4.0", + "@ethereumjs/tx": "^3.3.0", + "@metamask/eth-sig-util": "4.0.1", + "@truffle/hdwallet": "^0.1.4", + "@types/ethereum-protocol": "^1.0.0", + "@types/web3": "1.0.20", + "@types/web3-provider-engine": "^14.0.0", + "ethereum-cryptography": "1.1.2", + "ethereum-protocol": "^1.0.1", + "ethereumjs-util": "^7.1.5", + "web3": "1.10.0", + "web3-provider-engine": "16.0.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": "^16.20 || ^18.16 || >=20" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", + "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/common": { + "version": "2.5.0", "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node_modules/@truffle/hdwallet-provider/node_modules/@ethereumjs/tx": { + "version": "3.3.2", + "license": "MPL-2.0", + "dependencies": { + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "license": "BSD-2-Clause", + "node_modules/@truffle/hdwallet-provider/node_modules/@noble/hashes": { + "version": "1.1.2", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@truffle/hdwallet-provider/node_modules/@scure/bip32": { + "version": "1.1.0", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@truffle/hdwallet-provider/node_modules/@scure/bip39": { + "version": "1.1.0", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", + "node_modules/@truffle/hdwallet-provider/node_modules/@types/node": { + "version": "12.20.55", + "license": "MIT" + }, + "node_modules/@truffle/hdwallet-provider/node_modules/cross-fetch": { + "version": "3.1.8", "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node-fetch": "^2.6.12" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "engines": { - "node": ">= 4" + "node_modules/@truffle/hdwallet-provider/node_modules/eth-lib": { + "version": "0.2.8", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "license": "ISC", + "node_modules/@truffle/hdwallet-provider/node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/@truffle/hdwallet-provider/node_modules/ethereum-cryptography": { + "version": "1.1.2", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "license": "ISC", + "node_modules/@truffle/hdwallet-provider/node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "uuid": "dist/bin/uuid" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3": { + "version": "1.10.0", + "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" + "web3-bzz": "1.10.0", + "web3-core": "1.10.0", + "web3-eth": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-shh": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "node": ">=8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-bzz": { + "version": "1.10.0", + "hasInstallScript": true, + "license": "LGPL-3.0", + "dependencies": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-requestmanager": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8.0.0" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-helpers": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "web3-eth-iban": "1.10.0", + "web3-utils": "1.10.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli": { - "version": "2.1.16", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-method": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "abitype": "^1.0.4", - "bundle-require": "^4.0.2", - "cac": "^6.7.14", - "change-case": "^5.4.4", - "chokidar": "^3.5.3", - "dedent": "^0.7.0", - "dotenv": "^16.3.1", - "dotenv-expand": "^10.0.0", - "esbuild": "^0.19.0", - "execa": "^8.0.1", - "fdir": "^6.1.1", - "find-up": "^6.3.0", - "fs-extra": "^11.2.0", - "ora": "^6.3.1", - "pathe": "^1.1.2", - "picocolors": "^1.0.0", - "picomatch": "^3.0.0", - "prettier": "^3.0.3", - "viem": "2.x", - "zod": "^3.22.2" - }, - "bin": { - "wagmi": "dist/esm/cli.js" - }, - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4" + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-utils": "1.10.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@wagmi/cli/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/ansi-regex": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-promievent": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "eventemitter3": "4.0.4" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@wagmi/cli/node_modules/chalk": { - "version": "5.3.0", - "dev": true, - "license": "MIT", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/change-case": { - "version": "5.4.4", - "dev": true, - "license": "MIT" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-requestmanager": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "util": "^0.12.5", + "web3-core-helpers": "1.10.0", + "web3-providers-http": "1.10.0", + "web3-providers-ipc": "1.10.0", + "web3-providers-ws": "1.10.0" + }, + "engines": { + "node": ">=8.0.0" + } }, - "node_modules/@wagmi/cli/node_modules/cli-cursor": { - "version": "4.0.0", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-core-subscriptions": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "restore-cursor": "^4.0.0" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/esbuild": { - "version": "0.19.12", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-accounts": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-eth-ens": "1.10.0", + "web3-eth-iban": "1.10.0", + "web3-eth-personal": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/execa": { - "version": "8.0.1", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-abi": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.0" }, "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/fdir": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-accounts": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/common": "2.5.0", + "@ethereumjs/tx": "3.3.2", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.1.5", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/find-up": { - "version": "6.3.0", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-contract": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/fs-extra": { - "version": "11.2.0", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-ens": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-promievent": "1.10.0", + "web3-eth-abi": "1.10.0", + "web3-eth-contract": "1.10.0", + "web3-utils": "1.10.0" }, "engines": { - "node": ">=14.14" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/get-stream": { - "version": "8.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-iban": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/human-signals": { - "version": "5.0.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-eth-personal": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.10.0", + "web3-core-helpers": "1.10.0", + "web3-core-method": "1.10.0", + "web3-net": "1.10.0", + "web3-utils": "1.10.0" + }, "engines": { - "node": ">=16.17.0" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/is-interactive": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-net": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-utils": "1.10.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/is-stream": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-http": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/is-unicode-supported": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-ipc": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.10.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/locate-path": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-providers-ws": { + "version": "1.10.0", + "license": "LGPL-3.0", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.0", + "websocket": "^1.0.32" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@truffle/hdwallet-provider/node_modules/web3-shh": { + "version": "1.10.0", + "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { - "p-locate": "^6.0.0" + "web3-core": "1.10.0", + "web3-core-method": "1.10.0", + "web3-core-subscriptions": "1.10.0", + "web3-net": "1.10.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/log-symbols": { - "version": "5.1.0", - "dev": true, - "license": "MIT", + "node_modules/@truffle/hdwallet-provider/node_modules/web3-utils": { + "version": "1.10.0", + "license": "LGPL-3.0", "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.0.0" } }, - "node_modules/@wagmi/cli/node_modules/mimic-fn": { - "version": "4.0.0", - "dev": true, + "node_modules/@truffle/hdwallet/node_modules/@noble/hashes": { + "version": "1.1.2", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@truffle/hdwallet/node_modules/@scure/bip32": { + "version": "1.1.0", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" } }, - "node_modules/@wagmi/cli/node_modules/npm-run-path": { - "version": "5.3.0", - "dev": true, + "node_modules/@truffle/hdwallet/node_modules/@scure/bip39": { + "version": "1.1.0", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" } }, - "node_modules/@wagmi/cli/node_modules/onetime": { - "version": "6.0.0", - "dev": true, + "node_modules/@truffle/hdwallet/node_modules/ethereum-cryptography": { + "version": "1.1.2", "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" } }, - "node_modules/@wagmi/cli/node_modules/ora": { - "version": "6.3.1", - "dev": true, + "node_modules/@truffle/hdwallet/node_modules/keccak": { + "version": "3.0.2", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.0.0" } }, - "node_modules/@wagmi/cli/node_modules/p-limit": { - "version": "4.0.0", + "node_modules/@trysound/sax": { + "version": "0.2.0", "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, + "license": "ISC", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "node_modules/@wagmi/cli/node_modules/p-locate": { - "version": "6.0.0", + "node_modules/@tsconfig/node10": { + "version": "1.0.11", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@turbo/gen": { + "version": "1.13.4", + "dev": true, + "license": "MPL-2.0", "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "@turbo/workspaces": "1.13.4", + "chalk": "2.4.2", + "commander": "^10.0.0", + "fs-extra": "^10.1.0", + "inquirer": "^8.2.4", + "minimatch": "^9.0.0", + "node-plop": "^0.26.3", + "proxy-agent": "^6.2.2", + "ts-node": "^10.9.1", + "update-check": "^1.5.4", + "validate-npm-package-name": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "gen": "dist/cli.js" } }, - "node_modules/@wagmi/cli/node_modules/path-exists": { - "version": "5.0.0", + "node_modules/@turbo/workspaces": { + "version": "1.13.4", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "license": "MPL-2.0", + "dependencies": { + "chalk": "2.4.2", + "commander": "^10.0.0", + "execa": "5.1.1", + "fast-glob": "^3.2.12", + "fs-extra": "^10.1.0", + "gradient-string": "^2.0.0", + "inquirer": "^8.0.0", + "js-yaml": "^4.1.0", + "ora": "4.1.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "update-check": "^1.5.4" + }, + "bin": { + "workspaces": "dist/cli.js" } }, - "node_modules/@wagmi/cli/node_modules/path-key": { - "version": "4.0.0", + "node_modules/@turbo/workspaces/node_modules/semver": { + "version": "7.6.3", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/@wagmi/cli/node_modules/picomatch": { - "version": "3.0.1", + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" } }, - "node_modules/@wagmi/cli/node_modules/prettier": { - "version": "3.3.3", + "node_modules/@typechain/hardhat": { + "version": "9.1.0", "dev": true, "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" + "dependencies": { + "fs-extra": "^9.1.0" }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "peerDependencies": { + "@typechain/ethers-v6": "^0.5.1", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.2" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor": { - "version": "4.0.0", + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", + "node_modules/@types/bignumber.js": { + "version": "5.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "bignumber.js": "*" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "dev": true, + "node_modules/@types/bn.js": { + "version": "5.1.5", "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/node": "*" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/chai": { + "version": "4.3.19", "dev": true, - "license": "ISC" + "license": "MIT", + "peer": true }, - "node_modules/@wagmi/cli/node_modules/signal-exit": { - "version": "4.1.0", + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "MIT", + "peer": true, + "dependencies": { + "@types/chai": "*" } }, - "node_modules/@wagmi/cli/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/@types/concat-stream": { + "version": "1.6.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "@types/node": "*" } }, - "node_modules/@wagmi/cli/node_modules/strip-final-newline": { - "version": "3.0.0", + "node_modules/@types/estree": { + "version": "1.0.5", "dev": true, + "license": "MIT" + }, + "node_modules/@types/ethereum-protocol": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "bignumber.js": "7.2.1" + } + }, + "node_modules/@types/ethereum-protocol/node_modules/bignumber.js": { + "version": "7.2.1", "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/@wagmi/cli/node_modules/yocto-queue": { - "version": "1.1.1", + "node_modules/@types/form-data": { + "version": "0.0.33", "dev": true, "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/node": "*" } }, - "node_modules/abbrev": { - "version": "1.0.9", + "node_modules/@types/fs-extra": { + "version": "11.0.4", "dev": true, - "license": "ISC", - "peer": true + "license": "MIT", + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } }, - "node_modules/abitype": { - "version": "1.0.6", + "node_modules/@types/glob": { + "version": "7.2.0", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.5", + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", "license": "MIT" }, - "node_modules/abstract-leveldown": { - "version": "2.6.3", + "node_modules/@types/inquirer": { + "version": "6.5.0", + "dev": true, "license": "MIT", "dependencies": { - "xtend": "~4.0.0" + "@types/through": "*", + "rxjs": "^6.4.0" } }, - "node_modules/accepts": { - "version": "1.3.8", - "license": "MIT", + "node_modules/@types/inquirer/node_modules/rxjs": { + "version": "6.6.7", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "tslib": "^1.9.0" }, "engines": { - "node": ">= 0.6" + "npm": ">=2.0.0" } }, - "node_modules/acorn": { - "version": "7.4.1", + "node_modules/@types/inquirer/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "license": "MIT" + }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "@types/node": "*" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", + "node_modules/@types/keyv": { + "version": "3.1.4", "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "dependencies": { + "@types/node": "*" } }, - "node_modules/acorn-walk": { - "version": "8.3.3", + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mocha": { + "version": "10.0.7", "dev": true, "license": "MIT", + "peer": true + }, + "node_modules/@types/node": { + "version": "22.5.3", + "license": "MIT", "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" + "undici-types": "~6.19.2" } }, - "node_modules/acorn-walk/node_modules/acorn": { - "version": "8.12.1", - "dev": true, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "@types/node": "*" } }, - "node_modules/add": { - "version": "2.0.6", + "node_modules/@types/prettier": { + "version": "2.7.3", "dev": true, "license": "MIT" }, - "node_modules/adm-zip": { - "version": "0.4.16", + "node_modules/@types/ps-tree": { + "version": "1.1.6", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.3.0" - } + "license": "MIT" }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", + "node_modules/@types/qs": { + "version": "6.9.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.20.2", "dev": true, "license": "MIT" }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, + "node_modules/@types/responselike": { + "version": "1.0.3", "license": "MIT", "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" + "@types/node": "*" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, + "node_modules/@types/secp256k1": { + "version": "4.0.6", "license": "MIT", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@types/node": "*" } }, - "node_modules/ajv": { - "version": "6.12.6", + "node_modules/@types/semver": { + "version": "7.5.8", + "license": "MIT" + }, + "node_modules/@types/through": { + "version": "0.0.33", + "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "@types/node": "*" } }, - "node_modules/all-contributors-cli": { - "version": "6.26.1", + "node_modules/@types/tinycolor2": { + "version": "1.4.6", "dev": true, + "license": "MIT" + }, + "node_modules/@types/underscore": { + "version": "1.11.15", + "license": "MIT" + }, + "node_modules/@types/web3": { + "version": "1.0.20", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.7.6", - "async": "^3.1.0", - "chalk": "^4.0.0", - "didyoumean": "^1.2.1", - "inquirer": "^7.3.3", - "json-fixer": "^1.6.8", - "lodash": "^4.11.2", - "node-fetch": "^2.6.0", - "pify": "^5.0.0", - "yargs": "^15.0.1" - }, - "bin": { - "all-contributors": "dist/cli.js" - }, - "engines": { - "node": ">=4" - }, - "optionalDependencies": { - "prettier": "^2" + "@types/bn.js": "*", + "@types/underscore": "*" } }, - "node_modules/all-contributors-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/@types/web3-provider-engine": { + "version": "14.0.4", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "@types/ethereum-protocol": "*" } }, - "node_modules/all-contributors-cli/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@types/which": { + "version": "3.0.4", "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=10" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/all-contributors-cli/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, - "engines": { - "node": ">=7.0.0" + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/all-contributors-cli/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/all-contributors-cli/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.3.2", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/all-contributors-cli/node_modules/inquirer": { - "version": "7.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.3", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/all-contributors-cli/node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "license": "BSD-2-Clause", "dependencies": { - "tslib": "^1.9.0" + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" }, "engines": { - "npm": ">=2.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/all-contributors-cli/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/all-contributors-cli/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/amdefine": { - "version": "1.0.1", - "dev": true, - "license": "BSD-3-Clause OR MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.2" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "dev": true, - "license": "ISC", + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "license": "MIT", "dependencies": { - "string-width": "^4.1.0" + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/ansi-colors": { - "version": "4.1.3", + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", "license": "MIT", "engines": { - "node": ">=6" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "license": "BSD-2-Clause", "dependencies": { - "type-fest": "^0.21.3" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=8" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { "node": ">=10" }, @@ -4934,1780 +3433,1695 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": { + "version": "5.3.2", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "license": "ISC", "dependencies": { - "color-convert": "^1.9.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/antlr4": { - "version": "4.13.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=16" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-back": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "dev": true, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" }, "engines": { - "node": ">= 0.4" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "dev": true, - "license": "MIT", + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.3", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "dev": true, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">= 0.4" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/asn1": { - "version": "0.2.6", - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.8" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "peer": true, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "license": "Apache-2.0", "engines": { - "node": "*" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/ast-parents": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ast-types": { - "version": "0.13.4", + "node_modules/@wagmi/cli": { + "version": "2.1.16", "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.0.1" + "abitype": "^1.0.4", + "bundle-require": "^4.0.2", + "cac": "^6.7.14", + "change-case": "^5.4.4", + "chokidar": "^3.5.3", + "dedent": "^0.7.0", + "dotenv": "^16.3.1", + "dotenv-expand": "^10.0.0", + "esbuild": "^0.19.0", + "execa": "^8.0.1", + "fdir": "^6.1.1", + "find-up": "^6.3.0", + "fs-extra": "^11.2.0", + "ora": "^6.3.1", + "pathe": "^1.1.2", + "picocolors": "^1.0.0", + "picomatch": "^3.0.0", + "prettier": "^3.0.3", + "viem": "2.x", + "zod": "^3.22.2" }, - "engines": { - "node": ">=4" + "bin": { + "wagmi": "dist/esm/cli.js" + }, + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/astral-regex": { - "version": "2.0.0", + "node_modules/@wagmi/cli/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", + "node_modules/@wagmi/cli/node_modules/ansi-regex": { + "version": "6.1.0", + "dev": true, "license": "MIT", - "dependencies": { - "async": "^2.4.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/async-eventemitter/node_modules/async": { - "version": "2.6.4", + "node_modules/@wagmi/cli/node_modules/chalk": { + "version": "5.3.0", + "dev": true, "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/async-limiter": { - "version": "1.0.1", + "node_modules/@wagmi/cli/node_modules/change-case": { + "version": "5.4.4", + "dev": true, "license": "MIT" }, - "node_modules/async-mutex": { - "version": "0.2.6", + "node_modules/@wagmi/cli/node_modules/cli-cursor": { + "version": "4.0.0", + "dev": true, "license": "MIT", "dependencies": { - "tslib": "^2.0.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "dev": true, - "license": "ISC", + "restore-cursor": "^4.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/autoprefixer": { - "version": "10.4.20", + "node_modules/@wagmi/cli/node_modules/esbuild": { + "version": "0.19.12", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, "bin": { - "autoprefixer": "bin/autoprefixer" + "esbuild": "bin/esbuild" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=12" }, - "peerDependencies": { - "postcss": "^8.1.0" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", + "node_modules/@wagmi/cli/node_modules/execa": { + "version": "8.0.1", + "dev": true, "license": "MIT", "dependencies": { - "possible-typed-array-names": "^1.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=16.17" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "license": "Apache-2.0", - "engines": { - "node": "*" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/aws4": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==" - }, - "node_modules/axios": { - "version": "0.21.4", + "node_modules/@wagmi/cli/node_modules/fdir": { + "version": "6.4.2", "dev": true, "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "picomatch": "^3 || ^4" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", + "node_modules/@wagmi/cli/node_modules/find-up": { + "version": "6.3.0", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/backoff": { - "version": "2.5.0", + "node_modules/@wagmi/cli/node_modules/fs-extra": { + "version": "11.2.0", + "dev": true, "license": "MIT", "dependencies": { - "precond": "0.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base-x": { - "version": "3.0.10", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" + "node": ">=14.14" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/basic-ftp": { - "version": "5.0.5", + "node_modules/@wagmi/cli/node_modules/get-stream": { + "version": "8.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "license": "Unlicense" - }, - "node_modules/bech32": { - "version": "1.1.4", + "node_modules/@wagmi/cli/node_modules/human-signals": { + "version": "5.0.0", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } }, - "node_modules/bignumber.js": { - "version": "9.1.2", + "node_modules/@wagmi/cli/node_modules/is-interactive": { + "version": "2.0.0", + "dev": true, "license": "MIT", "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", + "node_modules/@wagmi/cli/node_modules/is-stream": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bl": { - "version": "4.1.0", + "node_modules/@wagmi/cli/node_modules/is-unicode-supported": { + "version": "1.3.0", "dev": true, "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/blakejs": { - "version": "1.2.1", - "license": "MIT" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.2", + "node_modules/@wagmi/cli/node_modules/locate-path": { + "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", + "node_modules/@wagmi/cli/node_modules/log-symbols": { + "version": "5.1.0", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" }, "engines": { - "node": ">=0.6" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/boxen": { - "version": "5.1.2", + "node_modules/@wagmi/cli/node_modules/mimic-fn": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/@wagmi/cli/node_modules/npm-run-path": { + "version": "5.3.0", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "4.1.2", + "node_modules/@wagmi/cli/node_modules/onetime": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/@wagmi/cli/node_modules/ora": { + "version": "6.3.1", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" }, "engines": { - "node": ">=7.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/boxen/node_modules/has-flag": { + "node_modules/@wagmi/cli/node_modules/p-limit": { "version": "4.0.0", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/@wagmi/cli/node_modules/p-locate": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/@wagmi/cli/node_modules/path-exists": { + "version": "5.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/braces": { - "version": "3.0.3", + "node_modules/@wagmi/cli/node_modules/path-key": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/brorand": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", + "node_modules/@wagmi/cli/node_modules/picomatch": { + "version": "3.0.1", "dev": true, - "license": "ISC" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", "license": "MIT", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/browserslist": { - "version": "4.23.3", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, + "node_modules/@wagmi/cli/node_modules/prettier": { + "version": "3.3.3", + "dev": true, + "license": "MIT", "bin": { - "browserslist": "cli.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/bs58": { - "version": "4.0.1", + "node_modules/@wagmi/cli/node_modules/restore-cursor": { + "version": "4.0.0", + "dev": true, "license": "MIT", "dependencies": { - "base-x": "^3.0.2" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bs58check": { - "version": "2.1.2", + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, "license": "MIT", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "license": "(MIT OR Apache-2.0)", - "bin": { - "btoa": "bin/btoa.js" - }, "engines": { - "node": ">= 0.4.0" + "node": ">=6" } }, - "node_modules/buffer": { - "version": "5.7.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "dev": true, "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/buffer-from": { - "version": "1.1.2", + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", "dev": true, - "license": "MIT" - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "license": "MIT" + "license": "ISC" }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "license": "MIT" + "node_modules/@wagmi/cli/node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/bufferutil": { - "version": "4.0.8", - "hasInstallScript": true, + "node_modules/@wagmi/cli/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, "license": "MIT", "dependencies": { - "node-gyp-build": "^4.3.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=6.14.2" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", + "node_modules/@wagmi/cli/node_modules/strip-final-newline": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bundle-require": { - "version": "4.2.1", + "node_modules/@wagmi/cli/node_modules/yocto-queue": { + "version": "1.1.1", "dev": true, "license": "MIT", - "dependencies": { - "load-tsconfig": "^0.2.3" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/abbrev": { + "version": "1.0.9", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/abitype": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" }, "peerDependencies": { - "esbuild": ">=0.17" + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } } }, - "node_modules/bytes": { - "version": "3.1.2", + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", + "license": "MIT" + }, + "node_modules/abstract-leveldown": { + "version": "2.6.3", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "xtend": "~4.0.0" } }, - "node_modules/cac": { - "version": "6.7.14", - "dev": true, + "node_modules/accepts": { + "version": "1.3.8", "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/cacheable-lookup": { - "version": "6.1.0", + "node_modules/acorn": { + "version": "7.4.1", "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=10.6.0" + "node": ">=0.4.0" } }, - "node_modules/cacheable-request": { - "version": "7.0.4", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "dev": true, "license": "MIT", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "acorn": "^8.11.0" }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", + "node_modules/acorn-walk/node_modules/acorn": { + "version": "8.12.1", + "dev": true, "license": "MIT", - "dependencies": { - "pump": "^3.0.0" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.0" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", + "node_modules/add": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.3.0" } }, - "node_modules/call-bind": { - "version": "1.0.7", + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/callsites": { - "version": "3.1.0", + "node_modules/all-contributors-cli": { + "version": "6.26.1", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.6", + "async": "^3.1.0", + "chalk": "^4.0.0", + "didyoumean": "^1.2.1", + "inquirer": "^7.3.3", + "json-fixer": "^1.6.8", + "lodash": "^4.11.2", + "node-fetch": "^2.6.0", + "pify": "^5.0.0", + "yargs": "^15.0.1" + }, + "bin": { + "all-contributors": "dist/cli.js" + }, "engines": { - "node": ">=6" + "node": ">=4" + }, + "optionalDependencies": { + "prettier": "^2" } }, - "node_modules/camel-case": { - "version": "3.0.0", + "node_modules/all-contributors-cli/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/camelcase": { - "version": "6.3.0", + "node_modules/all-contributors-cli/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", + "node_modules/all-contributors-cli/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001655", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", - "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/caseless": { - "version": "0.12.0", - "license": "Apache-2.0" + "node_modules/all-contributors-cli/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "node_modules/cbor": { - "version": "8.1.0", + "node_modules/all-contributors-cli/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, "engines": { - "node": ">=12.19" + "node": ">=8" } }, - "node_modules/chai": { - "version": "4.5.0", + "node_modules/all-contributors-cli/node_modules/inquirer": { + "version": "7.3.3", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/chai-as-promised": { - "version": "7.1.2", + "node_modules/all-contributors-cli/node_modules/rxjs": { + "version": "6.6.7", "dev": true, - "license": "WTFPL", - "peer": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "tslib": "^1.9.0" }, "engines": { - "node": ">=4" + "npm": ">=2.0.0" } }, - "node_modules/change-case": { - "version": "3.1.0", + "node_modules/all-contributors-cli/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "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" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/chardet": { - "version": "0.7.0", + "node_modules/all-contributors-cli/node_modules/tslib": { + "version": "1.14.1", "dev": true, - "license": "MIT" + "license": "0BSD" }, - "node_modules/charenc": { - "version": "0.0.2", + "node_modules/amdefine": { + "version": "1.0.1", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-3-Clause OR MIT", + "optional": true, + "peer": true, "engines": { - "node": "*" + "node": ">=0.4.2" } }, - "node_modules/check-error": { - "version": "1.0.3", + "node_modules/ansi-align": { + "version": "3.0.1", "dev": true, - "license": "MIT", - "peer": true, + "license": "ISC", "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" + "string-width": "^4.1.0" } }, - "node_modules/checkpoint-store": { - "version": "1.1.0", - "license": "ISC", - "dependencies": { - "functional-red-black-tree": "^1.0.1" + "node_modules/ansi-colors": { + "version": "4.1.3", + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/chokidar": { - "version": "3.6.0", + "node_modules/ansi-escapes": { + "version": "4.3.2", "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "type-fest": "^0.21.3" }, "engines": { - "node": ">= 8.10.0" + "node": ">=8" }, "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/chownr": { - "version": "1.1.4", - "license": "ISC" - }, - "node_modules/ci-info": { - "version": "2.0.0", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", "dev": true, - "license": "MIT" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/cids": { - "version": "0.7.5", + "node_modules/ansi-regex": { + "version": "5.0.1", "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" + "node": ">=8" } }, - "node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", + "node_modules/ansi-styles": { + "version": "3.2.1", "license": "MIT", "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/cipher-base": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "node_modules/antlr4": { + "version": "4.13.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=16" } }, - "node_modules/citty": { - "version": "0.1.6", + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "dev": true, + "license": "ISC", "dependencies": { - "consola": "^3.2.3" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/class-is": { - "version": "1.1.0", + "node_modules/arg": { + "version": "4.1.3", + "dev": true, "license": "MIT" }, - "node_modules/clean-stack": { - "version": "2.2.0", + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-back": { + "version": "3.1.0", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, + "node_modules/array-flatten": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, "engines": { "node": ">=8" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", + "node_modules/array-uniq": { + "version": "1.0.3", "dev": true, "license": "MIT", "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/cli-table3": { - "version": "0.6.5", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "string-width": "^4.2.0" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" }, "engines": { - "node": "10.* || >= 12.*" + "node": ">= 0.4" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cli-width": { - "version": "3.0.0", + "node_modules/asap": { + "version": "2.0.6", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=0.8" } }, - "node_modules/cliui": { - "version": "6.0.0", + "node_modules/assertion-error": { + "version": "1.1.0", "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "license": "MIT", + "peer": true, + "engines": { + "node": "*" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/ast-parents": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ast-types": { + "version": "0.13.4", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "tslib": "^2.0.1" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/async": { + "version": "3.2.6", "dev": true, + "license": "MIT" + }, + "node_modules/async-eventemitter": { + "version": "0.2.4", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "async": "^2.4.0" } }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "dev": true, + "node_modules/async-eventemitter/node_modules/async": { + "version": "2.6.4", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", "license": "MIT" }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, + "node_modules/async-mutex": { + "version": "0.2.6", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "tslib": "^2.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">= 4.0.0" } }, - "node_modules/clone": { - "version": "1.0.4", + "node_modules/autoprefixer": { + "version": "10.4.20", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, "engines": { - "node": ">=0.8" + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/clone-response": { - "version": "1.0.3", + "node_modules/available-typed-arrays": { + "version": "1.0.7", "license": "MIT", "dependencies": { - "mimic-response": "^1.0.0" + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "node_modules/aws-sign2": { + "version": "0.7.0", + "license": "Apache-2.0", + "engines": { + "node": "*" } }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "dev": true, + "node_modules/aws4": { + "version": "1.13.2", "license": "MIT" }, - "node_modules/colors": { - "version": "1.4.0", + "node_modules/axios": { + "version": "0.21.4", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.1.90" + "dependencies": { + "follow-redirects": "^1.14.0" } }, - "node_modules/combined-stream": { - "version": "1.0.8", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" }, - "engines": { - "node": ">= 0.8" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "dev": true, - "license": "MIT" - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "dev": true, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", "license": "MIT", "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, - "engines": { - "node": ">=4.0.0" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "dev": true, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", "license": "MIT", "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" + "@babel/helper-define-polyfill-provider": "^0.6.2" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/commander": { - "version": "10.0.1", - "dev": true, + "node_modules/backoff": { + "version": "2.5.0", "license": "MIT", + "dependencies": { + "precond": "0.2" + }, "engines": { - "node": ">=14" + "node": ">= 0.6" } }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", + "node_modules/balanced-match": { + "version": "1.0.2", "license": "MIT" }, - "node_modules/concat-stream": { - "version": "1.6.2", - "dev": true, - "engines": [ - "node >= 0.8" - ], + "node_modules/base-x": { + "version": "3.0.10", "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "safe-buffer": "^5.0.1" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "dev": true, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/basic-ftp": { + "version": "5.0.5", "dev": true, "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "license": "BSD-3-Clause", "dependencies": { - "safe-buffer": "~5.1.0" + "tweetnacl": "^0.14.3" } }, - "node_modules/confbox": { - "version": "0.1.7", + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" + }, + "node_modules/bech32": { + "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/consola": { - "version": "3.2.3", - "dev": true, + "node_modules/bignumber.js": { + "version": "9.1.2", "license": "MIT", "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": "*" } }, - "node_modules/constant-case": { - "version": "2.0.0", + "node_modules/binary-extensions": { + "version": "2.3.0", "dev": true, "license": "MIT", - "dependencies": { - "snake-case": "^2.1.0", - "upper-case": "^1.1.1" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/content-disposition": { - "version": "0.5.4", + "node_modules/bl": { + "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/content-hash": { - "version": "2.5.2", - "license": "ISC", - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } + "node_modules/blakejs": { + "version": "1.2.1", + "license": "MIT" }, - "node_modules/content-type": { - "version": "1.0.5", + "node_modules/bluebird": { + "version": "3.7.2", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.2", "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.4.2", - "dev": true, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", "license": "MIT" }, - "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "license": "BSD-3-Clause", "dependencies": { - "browserslist": "^4.23.3" + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/core-js-pure": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", - "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", + "node_modules/boolbase": { + "version": "1.0.0", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "license": "MIT" + "license": "ISC" }, - "node_modules/cors": { - "version": "2.8.5", + "node_modules/boxen": { + "version": "5.1.2", + "dev": true, "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cosmiconfig": { - "version": "8.3.6", + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "5.2.0", + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/create-hmac": { - "version": "1.1.7", + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/create-require": { - "version": "1.1.1", + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/cross-fetch": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", - "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", - "dependencies": { - "node-fetch": "^2.6.7", - "whatwg-fetch": "^2.0.4" + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/crypt": { - "version": "0.0.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": "*" + "node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "dev": true, + "node_modules/braces": { + "version": "3.0.3", "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, "engines": { "node": ">=8" } }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" }, - "node_modules/css-select": { - "version": "5.1.0", + "node_modules/browser-stdout": { + "version": "1.3.1", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "dev": true, + "node_modules/browserslist": { + "version": "4.23.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" } }, - "node_modules/css-what": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node_modules/bs58check": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "dev": true, - "license": "MIT", + "node_modules/btoa": { + "version": "1.2.1", + "license": "(MIT OR Apache-2.0)", "bin": { - "cssesc": "bin/cssesc" + "btoa": "bin/btoa.js" }, "engines": { - "node": ">=4" + "node": ">= 0.4.0" } }, - "node_modules/cssnano": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.5.tgz", - "integrity": "sha512-Aq0vqBLtpTT5Yxj+hLlLfNPFuRQCDIjx5JQAhhaedQKLNDvDGeVziF24PS+S1f0Z5KCxWvw0QVI3VNHNBITxVQ==", - "dev": true, + "node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "cssnano-preset-default": "^7.0.5", - "lilconfig": "^3.1.2" - }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/cssnano-preset-default": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.5.tgz", - "integrity": "sha512-Jbzja0xaKwc5JzxPQoc+fotKpYtWEu4wQLMQe29CM0FjjdRjA4omvbGHl2DTGgARKxSTpPssBsok+ixv8uTBqw==", + "node_modules/buffer-from": { + "version": "1.1.2", "dev": true, + "license": "MIT" + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^5.0.0", - "postcss-calc": "^10.0.1", - "postcss-colormin": "^7.0.2", - "postcss-convert-values": "^7.0.3", - "postcss-discard-comments": "^7.0.2", - "postcss-discard-duplicates": "^7.0.1", - "postcss-discard-empty": "^7.0.0", - "postcss-discard-overridden": "^7.0.0", - "postcss-merge-longhand": "^7.0.3", - "postcss-merge-rules": "^7.0.3", - "postcss-minify-font-values": "^7.0.0", - "postcss-minify-gradients": "^7.0.0", - "postcss-minify-params": "^7.0.2", - "postcss-minify-selectors": "^7.0.3", - "postcss-normalize-charset": "^7.0.0", - "postcss-normalize-display-values": "^7.0.0", - "postcss-normalize-positions": "^7.0.0", - "postcss-normalize-repeat-style": "^7.0.0", - "postcss-normalize-string": "^7.0.0", - "postcss-normalize-timing-functions": "^7.0.0", - "postcss-normalize-unicode": "^7.0.2", - "postcss-normalize-url": "^7.0.0", - "postcss-normalize-whitespace": "^7.0.0", - "postcss-ordered-values": "^7.0.1", - "postcss-reduce-initial": "^7.0.2", - "postcss-reduce-transforms": "^7.0.0", - "postcss-svgo": "^7.0.1", - "postcss-unique-selectors": "^7.0.2" + "node-gyp-build": "^4.3.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=6.14.2" } }, - "node_modules/cssnano-utils": { - "version": "5.0.0", + "node_modules/builtin-modules": { + "version": "3.3.0", "dev": true, "license": "MIT", "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" + "node": ">=6" }, - "peerDependencies": { - "postcss": "^8.4.31" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/csso": { - "version": "5.0.5", + "node_modules/bundle-require": { + "version": "4.2.1", "dev": true, "license": "MIT", "dependencies": { - "css-tree": "~2.2.0" + "load-tsconfig": "^0.2.3" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.17" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "dev": true, + "node_modules/bytes": { + "version": "3.1.2", "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "node": ">= 0.8" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", + "node_modules/cac": { + "version": "6.7.14", "dev": true, - "license": "CC0-1.0" - }, - "node_modules/d": { - "version": "1.0.2", - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.64", - "type": "^2.7.2" - }, + "license": "MIT", "engines": { - "node": ">=0.12" + "node": ">=8" } }, - "node_modules/dashdash": { - "version": "1.14.1", + "node_modules/cacheable-lookup": { + "version": "6.1.0", "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, "engines": { - "node": ">=0.10" + "node": ">=10.6.0" } }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "dev": true, + "node_modules/cacheable-request": { + "version": "7.0.4", "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "dev": true, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "pump": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "dev": true, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "dev": true, + "node_modules/call-bind": { + "version": "1.0.7", "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -6716,56 +5130,25 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/death": { - "version": "1.1.0", - "dev": true, - "peer": true - }, - "node_modules/debug": { - "version": "4.3.6", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", + "node_modules/callsites": { + "version": "3.1.0", "license": "MIT", "engines": { - "node": ">=0.10" + "node": ">=6" } }, - "node_modules/decompress-response": { - "version": "6.0.0", + "node_modules/camel-case": { + "version": "3.0.0", + "dev": true, "license": "MIT", "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -6774,3294 +5157,3444 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-eql": { - "version": "4.1.4", + "node_modules/caniuse-api": { + "version": "3.0.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } + "node_modules/caniuse-lite": { + "version": "1.0.30001655", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/deep-is": { - "version": "0.1.4", - "license": "MIT" + "node_modules/caseless": { + "version": "0.12.0", + "license": "Apache-2.0" }, - "node_modules/deepmerge": { - "version": "4.3.1", + "node_modules/cbor": { + "version": "8.1.0", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12.19" } }, - "node_modules/defaults": { - "version": "1.0.4", + "node_modules/chai": { + "version": "4.5.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "clone": "^1.0.2" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "license": "MIT", "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/deferred-leveldown": { - "version": "1.2.2", - "license": "MIT", + "node_modules/chai-as-promised": { + "version": "7.1.2", + "dev": true, + "license": "WTFPL", + "peer": true, "dependencies": { - "abstract-leveldown": "~2.6.0" + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" } }, - "node_modules/define-data-property": { - "version": "1.1.4", + "node_modules/chalk": { + "version": "2.4.2", "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/define-properties": { - "version": "1.2.1", + "node_modules/change-case": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "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" } }, - "node_modules/defu": { - "version": "6.1.4", + "node_modules/chardet": { + "version": "0.7.0", "dev": true, "license": "MIT" }, - "node_modules/degenerator": { - "version": "5.0.1", + "node_modules/charenc": { + "version": "0.0.2", "dev": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">= 14" + "node": "*" } }, - "node_modules/del": { - "version": "5.1.0", + "node_modules/check-error": { + "version": "1.0.3", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "globby": "^10.0.1", - "graceful-fs": "^4.2.2", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.1", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0" + "get-func-name": "^2.0.2" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/del/node_modules/p-map": { - "version": "3.0.0", + "node_modules/checkpoint-store": { + "version": "1.1.0", + "license": "ISC", + "dependencies": { + "functional-red-black-tree": "^1.0.1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=8" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", + "node_modules/chownr": { + "version": "1.1.4", + "license": "ISC" + }, + "node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cids": { + "version": "0.7.5", "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, "engines": { - "node": ">=0.4.0" + "node": ">=4.0.0", + "npm": ">=3.0.0" } }, - "node_modules/depd": { - "version": "2.0.0", + "node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" } }, - "node_modules/destroy": { - "version": "1.2.0", + "node_modules/cipher-base": { + "version": "1.0.4", "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/didyoumean": { - "version": "1.2.2", + "node_modules/citty": { + "version": "0.1.6", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } }, - "node_modules/diff": { - "version": "5.2.0", + "node_modules/class-is": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.3.1" + "node": ">=6" } }, - "node_modules/difflib": { - "version": "0.2.4", + "node_modules/cli-boxes": { + "version": "2.2.1", "dev": true, - "peer": true, - "dependencies": { - "heap": ">= 0.2.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "license": "Apache-2.0", + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", + "node_modules/cli-spinners": { + "version": "2.9.2", "dev": true, "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dom-walk": { - "version": "0.1.2" - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", + "node_modules/cli-table3": { + "version": "0.6.5", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "domelementtype": "^2.3.0" + "string-width": "^4.2.0" }, "engines": { - "node": ">= 4" + "node": "10.* || >= 12.*" }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/domutils": { - "version": "3.1.0", + "node_modules/cli-width": { + "version": "3.0.0", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "license": "ISC", + "engines": { + "node": ">= 10" } }, - "node_modules/dot-case": { - "version": "2.1.1", + "node_modules/cliui": { + "version": "6.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "no-case": "^2.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/dotenv": { - "version": "16.4.5", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/dotenv-expand": { - "version": "10.0.0", + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=12" + "node": ">=7.0.0" } }, - "node_modules/duplexer": { - "version": "0.1.2", + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, "license": "MIT", "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ecc-jsbn/node_modules/jsbn": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" + "node_modules/clone": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } }, - "node_modules/electron-to-chromium": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", - "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==" + "node_modules/clone-response": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/elliptic": { - "version": "6.5.4", + "node_modules/color-convert": { + "version": "1.9.3", "license": "MIT", "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "color-name": "1.1.3" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", + "node_modules/color-name": { + "version": "1.1.3", "license": "MIT" }, - "node_modules/emoji-regex": { - "version": "8.0.0", + "node_modules/colord": { + "version": "2.9.3", + "dev": true, "license": "MIT" }, - "node_modules/encode-utf8": { - "version": "1.0.3", + "node_modules/colors": { + "version": "1.4.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } }, - "node_modules/encodeurl": { - "version": "1.0.2", + "node_modules/combined-stream": { + "version": "1.0.8", "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, "engines": { "node": ">= 0.8" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", + "node_modules/command-exists": { + "version": "1.2.9", + "dev": true, + "license": "MIT" + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "dev": true, "license": "MIT", "dependencies": { - "once": "^1.4.0" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/enquirer": { - "version": "2.4.1", + "node_modules/command-line-usage": { + "version": "6.1.3", + "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" }, "engines": { - "node": ">=8.6" + "node": ">=8.0.0" } }, - "node_modules/entities": { - "version": "4.5.0", + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node": ">=8" } }, - "node_modules/env-paths": { - "version": "2.2.1", + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/errno": { - "version": "0.1.8", + "node_modules/commander": { + "version": "10.0.1", + "dev": true, "license": "MIT", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" + "engines": { + "node": ">=14" } }, - "node_modules/error-ex": { - "version": "1.3.2", + "node_modules/commondir": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } + "license": "MIT" }, - "node_modules/es-abstract": { - "version": "1.23.3", + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", "dev": true, + "engines": [ + "node >= 0.8" + ], "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/es-define-property": { + "node_modules/concat-stream/node_modules/isarray": { "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } + "dev": true, + "license": "MIT" }, - "node_modules/es-errors": { - "version": "1.3.0", + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/es-module-lexer": { - "version": "1.5.4", + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", "dev": true, "license": "MIT" }, - "node_modules/es-object-atoms": { - "version": "1.0.0", + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" + "safe-buffer": "~5.1.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", + "node_modules/confbox": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.2.3", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, "engines": { - "node": ">= 0.4" + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/constant-case": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "snake-case": "^2.1.0", + "upper-case": "^1.1.1" } }, - "node_modules/es5-ext": { - "version": "0.10.64", - "hasInstallScript": true, - "license": "ISC", + "node_modules/content-disposition": { + "version": "0.5.4", + "license": "MIT", "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "esniff": "^2.0.1", - "next-tick": "^1.1.0" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "node": ">= 0.6" } }, - "node_modules/es6-promise": { - "version": "4.2.8", - "license": "MIT" - }, - "node_modules/es6-symbol": { - "version": "3.1.4", + "node_modules/content-hash": { + "version": "2.5.2", "license": "ISC", "dependencies": { - "d": "^1.0.2", - "ext": "^1.7.0" - }, - "engines": { - "node": ">=0.12" + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" } }, - "node_modules/esbuild": { - "version": "0.17.19", - "dev": true, - "hasInstallScript": true, + "node_modules/content-type": { + "version": "1.0.5", "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "node": ">= 0.6" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/escape-html": { - "version": "1.0.3", + "node_modules/cookie-signature": { + "version": "1.0.6", "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/core-js-compat": { + "version": "3.38.1", "license": "MIT", - "engines": { - "node": ">=0.8.0" + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/escodegen": { - "version": "2.1.0", + "node_modules/core-js-pure": { + "version": "3.38.1", "dev": true, - "license": "BSD-2-Clause", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "license": "MIT", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">= 0.10" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/cosmiconfig": { + "version": "8.3.6", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/eslint": { - "version": "7.32.0", + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "5.2.0", + "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-custom": { - "resolved": "config/eslint-config-custom", - "link": true - }, - "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "license": "MIT", + "node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", "bin": { - "eslint-config-prettier": "bin/cli.js" + "crc32": "bin/crc32.njs" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=0.8" } }, - "node_modules/eslint-config-turbo": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-2.1.1.tgz", - "integrity": "sha512-JJF8SZErmgKCGkt124WUmTt0sQ5YLvPo2YxDsfzn9avGJC7/BQIa+3FZoDb3zeYYsZx91pZ6htQAJaKK8NQQAg==", + "node_modules/create-hash": { + "version": "1.2.0", + "license": "MIT", "dependencies": { - "eslint-plugin-turbo": "2.1.1" - }, - "peerDependencies": { - "eslint": ">6.6.0" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", + "node_modules/create-hmac": { + "version": "1.1.7", "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/eslint-plugin-turbo": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-2.1.1.tgz", - "integrity": "sha512-E/34kdQd0n3RP18+e0DSV0f3YTSCOojUh1p4X0Xrho2PBYmJ3umSnNo9FhkZt6UDACl+nBQcYTFkRHMz76lJdw==", - "dependencies": { - "dotenv": "16.0.3" + "node_modules/crypt": { + "version": "0.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.2.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "eslint": ">6.6.0" + "postcss": "^8.0.9" } }, - "node_modules/eslint-plugin-turbo/node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "engines": { - "node": ">=12" + "node_modules/css-select": { + "version": "5.1.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "license": "BSD-2-Clause", + "node_modules/css-tree": { + "version": "2.3.1", + "dev": true, + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, + "node_modules/css-what": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=6" + "node": ">= 6" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "license": "Apache-2.0", + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { "node": ">=4" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/cssnano": { + "version": "7.0.5", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "cssnano-preset-default": "^7.0.5", + "lilconfig": "^3.1.2" }, "engines": { - "node": ">=8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "1.0.10", + "node_modules/cssnano-preset-default": { + "version": "7.0.5", + "dev": true, "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "browserslist": "^4.23.3", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.0", + "postcss-calc": "^10.0.1", + "postcss-colormin": "^7.0.2", + "postcss-convert-values": "^7.0.3", + "postcss-discard-comments": "^7.0.2", + "postcss-discard-duplicates": "^7.0.1", + "postcss-discard-empty": "^7.0.0", + "postcss-discard-overridden": "^7.0.0", + "postcss-merge-longhand": "^7.0.3", + "postcss-merge-rules": "^7.0.3", + "postcss-minify-font-values": "^7.0.0", + "postcss-minify-gradients": "^7.0.0", + "postcss-minify-params": "^7.0.2", + "postcss-minify-selectors": "^7.0.3", + "postcss-normalize-charset": "^7.0.0", + "postcss-normalize-display-values": "^7.0.0", + "postcss-normalize-positions": "^7.0.0", + "postcss-normalize-repeat-style": "^7.0.0", + "postcss-normalize-string": "^7.0.0", + "postcss-normalize-timing-functions": "^7.0.0", + "postcss-normalize-unicode": "^7.0.2", + "postcss-normalize-url": "^7.0.0", + "postcss-normalize-whitespace": "^7.0.0", + "postcss-ordered-values": "^7.0.1", + "postcss-reduce-initial": "^7.0.2", + "postcss-reduce-transforms": "^7.0.0", + "postcss-svgo": "^7.0.1", + "postcss-unique-selectors": "^7.0.2" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/cssnano-utils": { + "version": "5.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", + "node_modules/csso": { + "version": "5.0.5", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "css-tree": "~2.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=7.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "dev": true, + "license": "CC0-1.0" }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/d": { + "version": "1.0.2", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.12" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "3.14.1", + "node_modules/dashdash": { + "version": "1.14.1", "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "assert-plus": "^1.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=0.10" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 14" } }, - "node_modules/eslint/node_modules/semver": { - "version": "7.6.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node_modules/data-view-buffer": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/sprintf-js": { - "version": "1.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esniff": { - "version": "2.0.1", - "license": "ISC", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "d": "^1.0.1", - "es5-ext": "^0.10.62", - "event-emitter": "^0.3.5", - "type": "^2.7.2" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/espree": { - "version": "7.3.1", - "license": "BSD-2-Clause", + "node_modules/death": { + "version": "1.1.0", + "dev": true, + "peer": true + }, + "node_modules/debug": { + "version": "4.3.6", + "license": "MIT", "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "ms": "2.1.2" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "license": "Apache-2.0", + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.10" } }, - "node_modules/esquery": { - "version": "1.6.0", - "license": "BSD-3-Clause", + "node_modules/decompress-response": { + "version": "6.0.0", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "license": "BSD-2-Clause", + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "license": "BSD-2-Clause", + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "estraverse": "^5.2.0" + "type-detect": "^4.0.0" }, "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "node": ">=6" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "license": "BSD-2-Clause", + "node_modules/deep-extend": { + "version": "0.6.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=4.0.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, + "node_modules/deep-is": { + "version": "0.1.4", "license": "MIT" }, - "node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", + "node_modules/deepmerge": { + "version": "4.3.1", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/eth-block-tracker": { - "version": "4.4.3", + "node_modules/defaults": { + "version": "1.0.4", + "dev": true, "license": "MIT", "dependencies": { - "@babel/plugin-transform-runtime": "^7.5.5", - "@babel/runtime": "^7.5.5", - "eth-query": "^2.1.0", - "json-rpc-random-id": "^1.0.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eth-block-tracker/node_modules/pify": { - "version": "3.0.0", + "node_modules/defer-to-connect": { + "version": "2.0.1", "license": "MIT", "engines": { - "node": ">=4" - } - }, - "node_modules/eth-create2-calculator": { - "version": "1.1.5", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "ethers": "^5.0.19" + "node": ">=10" } }, - "node_modules/eth-create2-calculator/node_modules/ethers": { - "version": "5.7.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/deferred-leveldown": { + "version": "1.2.2", "license": "MIT", "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" + "abstract-leveldown": "~2.6.0" } }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "license": "ISC", + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eth-ens-namehash/node_modules/js-sha3": { - "version": "0.5.7", - "license": "MIT" - }, - "node_modules/eth-gas-reporter": { - "version": "0.2.27", + "node_modules/define-properties": { + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "@solidity-parser/parser": "^0.14.0", - "axios": "^1.5.1", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^5.7.2", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^10.2.0", - "req-cwd": "^2.0.0", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, - "peerDependencies": { - "@codechecks/client": "^0.1.0" + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "@codechecks/client": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/eth-gas-reporter/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/defu": { + "version": "6.1.4", + "dev": true, "license": "MIT" }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { - "version": "1.1.5", + "node_modules/degenerator": { + "version": "5.0.1", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { - "version": "1.1.1", + "node_modules/del": { + "version": "5.1.0", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" + "globby": "^10.0.1", + "graceful-fs": "^4.2.2", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.1", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/eth-gas-reporter/node_modules/ansi-regex": { - "version": "3.0.1", + "node_modules/del/node_modules/p-map": { + "version": "3.0.0", "dev": true, "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/eth-gas-reporter/node_modules/axios": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", - "dev": true, + "node_modules/delayed-stream": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/eth-gas-reporter/node_modules/cli-table3": { - "version": "0.5.1", + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/diff": { + "version": "5.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/difflib": { + "version": "0.2.4", "dev": true, + "peer": true, + "dependencies": { + "heap": ">= 0.2.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", "license": "MIT", "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" + "path-type": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" }, - "optionalDependencies": { - "colors": "^1.1.2" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { - "version": "1.2.0", + "node_modules/dom-serializer": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/eth-gas-reporter/node_modules/ethers": { - "version": "5.7.2", + "node_modules/dom-walk": { + "version": "0.1.2" + }, + "node_modules/domelementtype": { + "version": "2.3.0", "dev": true, "funding": [ { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" + "type": "github", + "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } + "license": "BSD-2-Clause" }, - "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", + "node_modules/domhandler": { + "version": "5.0.3", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, "engines": { - "node": ">=4" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/eth-gas-reporter/node_modules/string-width": { - "version": "2.1.1", + "node_modules/domutils": { + "version": "3.1.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/eth-gas-reporter/node_modules/strip-ansi": { - "version": "4.0.0", + "node_modules/dot-case": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" + "no-case": "^2.2.0" } }, - "node_modules/eth-json-rpc-filters": { - "version": "4.2.2", - "license": "ISC", - "dependencies": { - "@metamask/safe-event-emitter": "^2.0.0", - "async-mutex": "^0.2.6", - "eth-json-rpc-middleware": "^6.0.0", - "eth-query": "^2.1.2", - "json-rpc-engine": "^6.1.0", - "pify": "^5.0.0" + "node_modules/dotenv": { + "version": "16.4.5", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/eth-json-rpc-infura": { - "version": "5.1.0", - "license": "ISC", - "dependencies": { - "eth-json-rpc-middleware": "^6.0.0", - "eth-rpc-errors": "^3.0.0", - "json-rpc-engine": "^5.3.0", - "node-fetch": "^2.6.0" + "node_modules/dotenv-expand": { + "version": "10.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" } }, - "node_modules/eth-json-rpc-infura/node_modules/json-rpc-engine": { - "version": "5.4.0", - "license": "ISC", + "node_modules/duplexer": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "license": "MIT", "dependencies": { - "eth-rpc-errors": "^3.0.0", - "safe-event-emitter": "^1.0.1" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/eth-json-rpc-middleware": { - "version": "6.0.0", - "license": "ISC", + "node_modules/ecc-jsbn/node_modules/jsbn": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.13", + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "license": "MIT", "dependencies": { - "btoa": "^1.2.1", - "clone": "^2.1.1", - "eth-query": "^2.1.2", - "eth-rpc-errors": "^3.0.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-util": "^5.1.2", - "json-rpc-engine": "^5.3.0", - "json-stable-stringify": "^1.0.1", - "node-fetch": "^2.6.1", - "pify": "^3.0.0", - "safe-event-emitter": "^1.0.1" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/eth-json-rpc-middleware/node_modules/bn.js": { + "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", "license": "MIT" }, - "node_modules/eth-json-rpc-middleware/node_modules/clone": { - "version": "2.1.2", + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">= 0.8" } }, - "node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "once": "^1.4.0" } }, - "node_modules/eth-json-rpc-middleware/node_modules/json-rpc-engine": { - "version": "5.4.0", - "license": "ISC", + "node_modules/enquirer": { + "version": "2.4.1", + "license": "MIT", "dependencies": { - "eth-rpc-errors": "^3.0.0", - "safe-event-emitter": "^1.0.1" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" } }, - "node_modules/eth-json-rpc-middleware/node_modules/pify": { - "version": "3.0.0", + "node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/eth-lib": { - "version": "0.1.29", + "node_modules/errno": { + "version": "0.1.8", "license": "MIT", "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" } }, - "node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/eth-query": { - "version": "2.1.2", - "license": "ISC", + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" + "is-arrayish": "^0.2.1" } }, - "node_modules/eth-rpc-errors": { - "version": "3.0.0", + "node_modules/es-abstract": { + "version": "1.23.3", + "dev": true, "license": "MIT", "dependencies": { - "fast-safe-stringify": "^2.0.6" + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eth-sig-util": { - "version": "1.4.2", - "license": "ISC", + "node_modules/es-define-property": { + "version": "1.0.0", + "license": "MIT", "dependencies": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/eth-sig-util/node_modules/bn.js": { - "version": "4.12.0", + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "dev": true, "license": "MIT" }, - "node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/es-object-atoms": { + "version": "1.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/ethereum-bloom-filters": { - "version": "1.2.0", + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "dev": true, "license": "MIT", "dependencies": { - "@noble/hashes": "^1.4.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", - "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 0.4" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ethereum-common": { - "version": "0.2.0", - "license": "MIT" + "node_modules/es5-ext": { + "version": "0.10.64", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", + "node_modules/es6-iterator": { + "version": "2.0.3", "license": "MIT", "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/ethereum-protocol": { - "version": "1.0.1", + "node_modules/es6-promise": { + "version": "4.2.8", "license": "MIT" }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", + "node_modules/es6-symbol": { + "version": "3.1.4", + "license": "ISC", "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" } }, - "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { - "version": "4.11.6", + "node_modules/esbuild": { + "version": "0.17.19", + "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "@types/node": "*" + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" } }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", "license": "MIT" }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" } }, - "node_modules/ethereumjs-account": { - "version": "3.0.0", + "node_modules/escodegen": { + "version": "2.1.0", "dev": true, - "license": "MPL-2.0", + "license": "BSD-2-Clause", "dependencies": { - "ethereumjs-util": "^6.0.0", - "rlp": "^2.2.1", - "safe-buffer": "^5.1.1" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/ethereumjs-account/node_modules/@types/bn.js": { - "version": "4.11.6", + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", "license": "MIT", "dependencies": { - "@types/node": "*" + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/ethereumjs-account/node_modules/bn.js": { - "version": "4.12.0", - "dev": true, - "license": "MIT" + "node_modules/eslint-config-custom": { + "resolved": "config/eslint-config-custom", + "link": true }, - "node_modules/ethereumjs-account/node_modules/ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "license": "MPL-2.0", + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-turbo": { + "version": "2.2.1", + "license": "MIT", "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "eslint-plugin-turbo": "2.2.1" + }, + "peerDependencies": { + "eslint": ">6.6.0" } }, - "node_modules/ethereumjs-block": { - "version": "1.7.1", - "license": "MPL-2.0", + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "license": "MIT", "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/ethereumjs-block/node_modules/async": { - "version": "2.6.4", + "node_modules/eslint-plugin-turbo": { + "version": "2.2.1", "license": "MIT", "dependencies": { - "lodash": "^4.17.14" + "dotenv": "16.0.3" + }, + "peerDependencies": { + "eslint": ">6.6.0" } }, - "node_modules/ethereumjs-block/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" + "node_modules/eslint-plugin-turbo/node_modules/dotenv": { + "version": "16.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } }, - "node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/eslint-scope": { + "version": "5.1.1", + "license": "BSD-2-Clause", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/ethereumjs-common": { - "version": "1.5.2", - "license": "MIT" - }, - "node_modules/ethereumjs-tx": { - "version": "1.3.7", - "license": "MPL-2.0", + "node_modules/eslint-utils": { + "version": "2.1.0", + "license": "MIT", "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/ethereumjs-tx/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/ethereumjs-tx/node_modules/ethereum-common": { - "version": "0.0.18", - "license": "MIT" + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } }, - "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "license": "Apache-2.0", + "engines": { + "node": ">=10" } }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "license": "MPL-2.0", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ethereumjs-vm": { - "version": "2.6.0", - "license": "MPL-2.0", + "node_modules/eslint/node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" + "sprintf-js": "~1.0.2" } }, - "node_modules/ethereumjs-vm/node_modules/@types/bn.js": { - "version": "4.11.6", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", "license": "MIT", "dependencies": { - "@types/node": "*" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/ethereumjs-vm/node_modules/async": { - "version": "2.6.4", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", "license": "MIT", "dependencies": { - "lodash": "^4.17.14" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ethereumjs-vm/node_modules/bn.js": { - "version": "4.12.0", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", "license": "MIT" }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-account": { - "version": "2.0.5", - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-account/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "license": "MPL-2.0", + "node_modules/eslint/node_modules/js-yaml": { + "version": "3.14.1", + "license": "MIT", "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "license": "MPL-2.0", + "node_modules/eslint/node_modules/semver": { + "version": "7.6.3", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause" + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "license": "MPL-2.0", + "node_modules/esniff": { + "version": "2.0.1", + "license": "ISC", "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/ethers": { - "version": "6.13.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", + "node_modules/espree": { + "version": "7.3.1", + "license": "BSD-2-Clause", "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "18.15.13", - "aes-js": "4.0.0-beta.5", - "tslib": "2.4.0", - "ws": "8.17.1" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, "engines": { - "node": ">=14.0.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/ethers/node_modules/@types/node": { - "version": "18.15.13", - "dev": true, - "license": "MIT" - }, - "node_modules/ethers/node_modules/ws": { - "version": "8.17.1", - "dev": true, - "license": "MIT", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "license": "Apache-2.0", "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "engines": { + "node": ">=4" } }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "license": "MIT", + "node_modules/esquery": { + "version": "1.6.0", + "license": "BSD-3-Clause", "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=0.10" } }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "license": "MIT" + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "license": "MIT", + "node_modules/esrecurse": { + "version": "4.3.0", + "license": "BSD-2-Clause", "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=4.0" } }, - "node_modules/event-emitter": { - "version": "0.3.5", - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, - "node_modules/event-stream": { - "version": "3.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" + "node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, - "node_modules/eventemitter3": { - "version": "4.0.4", + "node_modules/estree-walker": { + "version": "2.0.2", + "dev": true, "license": "MIT" }, - "node_modules/events": { - "version": "3.3.0", + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", "license": "MIT", "engines": { - "node": ">=0.8.x" + "node": ">= 0.6" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", + "node_modules/eth-block-tracker": { + "version": "4.4.3", "license": "MIT", "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "@babel/plugin-transform-runtime": "^7.5.5", + "@babel/runtime": "^7.5.5", + "eth-query": "^2.1.0", + "json-rpc-random-id": "^1.0.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" } }, - "node_modules/execa": { - "version": "5.1.1", - "dev": true, + "node_modules/eth-block-tracker/node_modules/pify": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=4" } }, - "node_modules/express": { - "version": "4.19.2", - "license": "MIT", + "node_modules/eth-create2-calculator": { + "version": "1.1.5", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" + "ethers": "^5.0.19" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node_modules/eth-create2-calculator/node_modules/ethers": { + "version": "5.7.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", + "node_modules/eth-ens-namehash": { + "version": "2.0.8", + "license": "ISC", "dependencies": { - "ms": "2.0.0" + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", + "node_modules/eth-ens-namehash/node_modules/js-sha3": { + "version": "0.5.7", "license": "MIT" }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "license": "BSD-3-Clause", + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "dev": true, + "license": "MIT", "dependencies": { - "side-channel": "^1.0.4" + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" }, - "engines": { - "node": ">=0.6" + "peerDependencies": { + "@codechecks/client": "^0.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } } }, - "node_modules/ext": { - "version": "1.7.0", - "license": "ISC", - "dependencies": { - "type": "^2.7.2" - } + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" }, - "node_modules/extend": { - "version": "3.0.2", + "node_modules/eth-gas-reporter/node_modules/@noble/secp256k1": { + "version": "1.7.1", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT" }, - "node_modules/external-editor": { - "version": "3.1.0", + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "engines": [ - "node >=0.6.0" + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } ], - "license": "MIT" - }, - "node_modules/fake-merkle-patricia-tree": { - "version": "1.0.1", - "license": "ISC", + "license": "MIT", "dependencies": { - "checkpoint-store": "^1.1.0" + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" + "node_modules/eth-gas-reporter/node_modules/ansi-regex": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/fast-diff": { - "version": "1.3.0", - "license": "Apache-2.0" + "node_modules/eth-gas-reporter/node_modules/axios": { + "version": "1.7.7", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } }, - "node_modules/fast-glob": { - "version": "3.3.2", + "node_modules/eth-gas-reporter/node_modules/cli-table3": { + "version": "0.5.1", + "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "object-assign": "^4.1.0", + "string-width": "^2.1.1" }, "engines": { - "node": ">=8.6.0" + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.17.1", - "license": "ISC", + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" } }, - "node_modules/fetch-blob": { - "version": "3.2.0", + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "5.7.2", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" }, { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], "license": "MIT", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/figures": { - "version": "3.2.0", + "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", "dev": true, "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/eth-gas-reporter/node_modules/string-width": { + "version": "2.1.1", + "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" } }, - "node_modules/fill-range": { - "version": "7.1.1", + "node_modules/eth-gas-reporter/node_modules/strip-ansi": { + "version": "4.0.0", + "dev": true, "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "ansi-regex": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "license": "MIT", + "node_modules/eth-json-rpc-filters": { + "version": "4.2.2", + "license": "ISC", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "@metamask/safe-event-emitter": "^2.0.0", + "async-mutex": "^0.2.6", + "eth-json-rpc-middleware": "^6.0.0", + "eth-query": "^2.1.2", + "json-rpc-engine": "^6.1.0", + "pify": "^5.0.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", + "node_modules/eth-json-rpc-infura": { + "version": "5.1.0", + "license": "ISC", "dependencies": { - "ms": "2.0.0" + "eth-json-rpc-middleware": "^6.0.0", + "eth-rpc-errors": "^3.0.0", + "json-rpc-engine": "^5.3.0", + "node-fetch": "^2.6.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/find-replace": { - "version": "3.0.0", - "dev": true, - "license": "MIT", + "node_modules/eth-json-rpc-infura/node_modules/json-rpc-engine": { + "version": "5.4.0", + "license": "ISC", "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" + "eth-rpc-errors": "^3.0.0", + "safe-event-emitter": "^1.0.1" } }, - "node_modules/find-up": { - "version": "2.1.0", - "dev": true, - "license": "MIT", + "node_modules/eth-json-rpc-middleware": { + "version": "6.0.0", + "license": "ISC", "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" + "btoa": "^1.2.1", + "clone": "^2.1.1", + "eth-query": "^2.1.2", + "eth-rpc-errors": "^3.0.0", + "eth-sig-util": "^1.4.2", + "ethereumjs-util": "^5.1.2", + "json-rpc-engine": "^5.3.0", + "json-stable-stringify": "^1.0.1", + "node-fetch": "^2.6.1", + "pify": "^3.0.0", + "safe-event-emitter": "^1.0.1" } }, - "node_modules/flat": { - "version": "5.0.2", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } + "node_modules/eth-json-rpc-middleware/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" }, - "node_modules/flat-cache": { - "version": "3.2.0", + "node_modules/eth-json-rpc-middleware/node_modules/clone": { + "version": "2.1.2", "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=0.8" } }, - "node_modules/flatted": { - "version": "3.3.1", - "license": "ISC" + "node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } }, - "node_modules/fmix": { - "version": "0.1.0", - "dev": true, - "license": "MIT", + "node_modules/eth-json-rpc-middleware/node_modules/json-rpc-engine": { + "version": "5.4.0", + "license": "ISC", "dependencies": { - "imul": "^1.0.0" + "eth-rpc-errors": "^3.0.0", + "safe-event-emitter": "^1.0.1" } }, - "node_modules/follow-redirects": { - "version": "1.15.8", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "node_modules/eth-json-rpc-middleware/node_modules/pify": { + "version": "3.0.0", "license": "MIT", "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node": ">=4" } }, - "node_modules/for-each": { - "version": "0.3.3", + "node_modules/eth-lib": { + "version": "0.1.29", "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "license": "Apache-2.0", - "engines": { - "node": "*" + "node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/eth-query": { + "version": "2.1.2", + "license": "ISC", + "dependencies": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" } }, - "node_modules/form-data": { - "version": "4.0.0", - "dev": true, + "node_modules/eth-rpc-errors": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "fast-safe-stringify": "^2.0.6" } }, - "node_modules/form-data-encoder": { - "version": "1.7.1", + "node_modules/eth-sig-util": { + "version": "1.4.2", + "license": "ISC", + "dependencies": { + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "ethereumjs-util": "^5.1.1" + } + }, + "node_modules/eth-sig-util/node_modules/bn.js": { + "version": "4.12.0", "license": "MIT" }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "dev": true, - "license": "MIT", + "node_modules/eth-sig-util/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/forwarded": { - "version": "0.2.0", + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "@noble/hashes": "^1.4.0" } }, - "node_modules/fp-ts": { - "version": "1.19.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "dev": true, + "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { + "version": "1.5.0", "license": "MIT", "engines": { - "node": "*" + "node": "^14.21.3 || >=16" }, "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/fresh": { - "version": "0.5.2", + "node_modules/ethereum-common": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/from": { - "version": "0.1.7", - "dev": true, + "node_modules/ethereum-protocol": { + "version": "1.0.1", "license": "MIT" }, - "node_modules/fs-extra": { - "version": "10.1.0", - "dev": true, - "license": "MIT", + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" } }, - "node_modules/fs-minipass": { - "version": "1.2.7", - "license": "ISC", + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "license": "MIT", "dependencies": { - "minipass": "^2.6.0" + "@types/node": "*" } }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "dev": true, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", "license": "MIT" }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/ethereumjs-account": { + "version": "3.0.0", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "ethereumjs-util": "^6.0.0", + "rlp": "^2.2.1", + "safe-buffer": "^5.1.1" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", + "node_modules/ethereumjs-account/node_modules/@types/bn.js": { + "version": "4.11.6", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/node": "*" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", + "node_modules/ethereumjs-account/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, "license": "MIT" }, - "node_modules/functions-have-names": { - "version": "1.2.3", + "node_modules/ethereumjs-account/node_modules/ethereumjs-util": { + "version": "6.2.1", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "node_modules/fx": { - "version": "35.0.0", - "dev": true, - "license": "MIT", - "bin": { - "fx": "index.js" + "node_modules/ethereumjs-block": { + "version": "1.7.1", + "license": "MPL-2.0", + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", + "node_modules/ethereumjs-block/node_modules/async": { + "version": "2.6.4", "license": "MIT", - "engines": { - "node": ">=6.9.0" + "dependencies": { + "lodash": "^4.17.14" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "node_modules/ethereumjs-block/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" }, - "node_modules/get-func-name": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "*" + "node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "license": "MIT", + "node_modules/ethereumjs-common": { + "version": "1.5.2", + "license": "MIT" + }, + "node_modules/ethereumjs-tx": { + "version": "1.3.7", + "license": "MPL-2.0", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" } }, - "node_modules/get-port": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "node_modules/ethereumjs-tx/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" }, - "node_modules/get-stream": { - "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/ethereumjs-tx/node_modules/ethereum-common": { + "version": "0.0.18", + "license": "MIT" + }, + "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "dev": true, - "license": "MIT", + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "license": "MPL-2.0", "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.0.0" } }, - "node_modules/get-uri": { - "version": "6.0.3", - "dev": true, - "license": "MIT", + "node_modules/ethereumjs-vm": { + "version": "2.6.0", + "license": "MPL-2.0", "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" - }, - "engines": { - "node": ">= 14" + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/get-uri/node_modules/fs-extra": { - "version": "11.2.0", - "dev": true, + "node_modules/ethereumjs-vm/node_modules/@types/bn.js": { + "version": "4.11.6", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" + "@types/node": "*" } }, - "node_modules/getpass": { - "version": "0.1.7", + "node_modules/ethereumjs-vm/node_modules/async": { + "version": "2.6.4", "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0" + "lodash": "^4.17.14" } }, - "node_modules/ghost-testrpc": { - "version": "0.0.2", - "dev": true, - "license": "ISC", - "peer": true, + "node_modules/ethereumjs-vm/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-account": { + "version": "2.0.5", + "license": "MPL-2.0", "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" - }, - "bin": { - "testrpc-sc": "index.js" + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/glob": { - "version": "7.2.0", - "license": "ISC", + "node_modules/ethereumjs-vm/node_modules/ethereumjs-account/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", + "node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { + "version": "2.2.2", + "license": "MPL-2.0", "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", + "node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", + "node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "license": "MPL-2.0", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" } }, - "node_modules/global": { - "version": "4.4.0", - "license": "MIT", + "node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { + "version": "6.2.1", + "license": "MPL-2.0", "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "node_modules/global-modules": { - "version": "2.0.0", + "node_modules/ethers": { + "version": "6.13.2", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", - "peer": true, "dependencies": { - "global-prefix": "^3.0.0" + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.17.1" }, "engines": { - "node": ">=6" + "node": ">=14.0.0" } }, - "node_modules/global-prefix": { - "version": "3.0.0", + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "dev": true, + "license": "MIT" + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, "engines": { - "node": ">=6" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "peer": true, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/globals": { - "version": "13.24.0", + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" + }, + "node_modules/ethjs-util": { + "version": "0.1.6", "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "dev": true, + "node_modules/event-emitter": { + "version": "0.3.5", "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "d": "1", + "es5-ext": "~0.10.14" } }, - "node_modules/globby": { - "version": "10.0.2", + "node_modules/event-stream": { + "version": "3.3.4", "dev": true, "license": "MIT", "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, + "node_modules/eventemitter3": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=0.8.x" } }, - "node_modules/globrex": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/gopd": { - "version": "1.0.1", + "node_modules/evp_bytestokey": { + "version": "1.0.3", "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/got": { - "version": "12.1.0", + "node_modules/execa": { + "version": "5.1.1", + "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/gradient-string": { - "version": "2.0.2", - "dev": true, + "node_modules/express": { + "version": "4.19.2", "license": "MIT", "dependencies": { - "chalk": "^4.1.2", - "tinygradient": "^1.1.5" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">=10" + "node": ">= 0.10.0" } }, - "node_modules/gradient-string/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/gradient-string/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" }, "engines": { - "node": ">=10" + "node": ">=0.6" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gradient-string/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "node_modules/ext": { + "version": "1.7.0", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "type": "^2.7.2" } }, - "node_modules/gradient-string/node_modules/color-name": { - "version": "1.1.4", - "dev": true, + "node_modules/extend": { + "version": "3.0.2", "license": "MIT" }, - "node_modules/gradient-string/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/external-editor": { + "version": "3.1.0", "dev": true, "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/gradient-string/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/extsprintf": { + "version": "1.3.0", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fake-merkle-patricia-tree": { + "version": "1.0.1", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "checkpoint-store": "^1.1.0" } }, - "node_modules/graphemer": { - "version": "1.4.0", + "node_modules/fast-deep-equal": { + "version": "3.1.3", "license": "MIT" }, - "node_modules/handlebars": { - "version": "4.7.8", - "dev": true, + "node_modules/fast-diff": { + "version": "1.3.0", + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.2", "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "node": ">=8.6.0" } }, - "node_modules/har-schema": { - "version": "2.0.0", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", "license": "ISC", - "engines": { - "node": ">=4" + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/har-validator": { - "version": "5.1.5", + "node_modules/fetch-blob": { + "version": "3.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], "license": "MIT", "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": ">=6" + "node": "^12.20 || >= 14.13" } }, - "node_modules/hardhat": { - "version": "2.22.10", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.10.tgz", - "integrity": "sha512-JRUDdiystjniAvBGFmJRsiIZSOP2/6s++8xRDe3TzLeQXlWWHsXBrd9wd3JWFyKXvgMqMeLL5Sz/oNxXKYw9vg==", + "node_modules/figures": { + "version": "3.2.0", "dev": true, "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.5.2", - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "boxen": "^5.1.2", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.8.26", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" + "escape-string-regexp": "^1.0.5" }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hardhat-contract-sizer": { - "version": "2.10.0", - "dev": true, + "node_modules/file-entry-cache": { + "version": "6.0.1", "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "cli-table3": "^0.6.0", - "strip-ansi": "^6.0.0" + "flat-cache": "^3.0.4" }, - "peerDependencies": { - "hardhat": "^2.0.0" + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/hardhat-contract-sizer/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/fill-range": { + "version": "7.1.1", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/hardhat-contract-sizer/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/finalhandler": { + "version": "1.2.0", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.8" } }, - "node_modules/hardhat-contract-sizer/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "ms": "2.0.0" } }, - "node_modules/hardhat-contract-sizer/node_modules/color-name": { - "version": "1.1.4", - "dev": true, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", "license": "MIT" }, - "node_modules/hardhat-contract-sizer/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/find-replace": { + "version": "3.0.0", "dev": true, "license": "MIT", + "dependencies": { + "array-back": "^3.0.1" + }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, - "node_modules/hardhat-contract-sizer/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/find-up": { + "version": "2.1.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "locate-path": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/hardhat-deploy": { - "version": "0.12.4", + "node_modules/flat": { + "version": "5.0.2", "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/solidity": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@types/qs": "^6.9.7", - "axios": "^0.21.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "ethers": "^5.7.0", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "match-all": "^1.2.6", - "murmur-128": "^0.2.1", - "qs": "^6.9.4", - "zksync-ethers": "^5.0.0" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/hardhat-deploy-ethers": { - "version": "0.4.2", + "node_modules/flatted": { + "version": "3.3.1", + "license": "ISC" + }, + "node_modules/fmix": { + "version": "0.1.0", "dev": true, "license": "MIT", - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.2", - "hardhat": "^2.16.0", - "hardhat-deploy": "^0.12.0" + "dependencies": { + "imul": "^1.0.0" } }, - "node_modules/hardhat-deploy/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/follow-redirects": { + "version": "1.15.8", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": ">=4.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/hardhat-deploy/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/for-each": { + "version": "0.3.3", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "license": "Apache-2.0", + "engines": { + "node": "*" } }, - "node_modules/hardhat-deploy/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/form-data": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=7.0.0" + "node": ">= 6" } }, - "node_modules/hardhat-deploy/node_modules/color-name": { - "version": "1.1.4", - "dev": true, + "node_modules/form-data-encoder": { + "version": "1.7.1", "license": "MIT" }, - "node_modules/hardhat-deploy/node_modules/ethers": { - "version": "5.7.2", + "node_modules/formdata-polyfill": { + "version": "4.0.10", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], "license": "MIT", "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" } }, - "node_modules/hardhat-deploy/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, + "node_modules/forwarded": { + "version": "0.2.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/hardhat-deploy/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/fp-ts": { + "version": "1.19.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fraction.js": { + "version": "4.3.7", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" + "engines": { + "node": "*" }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.10", + "node_modules/from": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", "dev": true, "license": "MIT", "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "peerDependencies": { - "hardhat": "^2.0.2" + "engines": { + "node": ">=12" } }, - "node_modules/hardhat-packager": { - "version": "1.4.2", - "dev": true, - "license": "MIT", + "node_modules/fs-minipass": { + "version": "1.2.7", + "license": "ISC", "dependencies": { - "@typechain/hardhat": "9.1.0", - "fs-extra": "^10.0.1", - "hardhat": "^2.9.2", - "tempy": "1.0.1", - "typechain": "^8.0.0" - }, - "peerDependencies": { - "@typechain/hardhat": "9.1.0", - "hardhat": "2.x", - "lodash": "4.x", - "typechain": "8.x" + "minipass": "^2.6.0" } }, - "node_modules/hardhat/node_modules/@noble/hashes": { - "version": "1.2.0", + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT" }, - "node_modules/hardhat/node_modules/@noble/secp256k1": { - "version": "1.7.1", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" }, - "node_modules/hardhat/node_modules/@scure/bip32": { - "version": "1.1.5", + "node_modules/fsevents": { + "version": "2.3.3", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/hardhat/node_modules/@scure/bip39": { - "version": "1.1.1", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } + "optional": true, + "os": [ + "darwin" ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "dev": true, + "node_modules/function-bind": { + "version": "1.1.2", "license": "MIT", - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", + "node_modules/function.prototype.name": { + "version": "1.1.6", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "license": "MIT" }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", + "node_modules/functions-have-names": { + "version": "1.2.3", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hardhat/node_modules/ws": { - "version": "7.5.10", + "node_modules/fx": { + "version": "35.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "bin": { + "fx": "index.js" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "dev": true, + "node_modules/gensync": { + "version": "1.0.0-beta.2", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/has-flag": { - "version": "3.0.0", + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", + "node_modules/get-intrinsic": { + "version": "1.2.4", "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", + "node_modules/get-port": { + "version": "3.2.0", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4" } }, - "node_modules/has-symbols": { - "version": "1.0.3", + "node_modules/get-stream": { + "version": "6.0.1", "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-tostringtag": { + "node_modules/get-symbol-description": { "version": "1.0.2", + "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -10070,335 +8603,440 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-base": { - "version": "3.1.0", + "node_modules/get-uri": { + "version": "6.0.3", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4", + "fs-extra": "^11.2.0" }, "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/hash.js": { - "version": "1.1.7", + "node_modules/get-uri/node_modules/fs-extra": { + "version": "11.2.0", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/hasown": { - "version": "2.0.2", + "node_modules/getpass": { + "version": "0.1.7", "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "assert-plus": "^1.0.0" } }, - "node_modules/he": { - "version": "1.2.0", + "node_modules/ghost-testrpc": { + "version": "0.0.2", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, "bin": { - "he": "bin/he" + "testrpc-sc": "index.js" } }, - "node_modules/header-case": { - "version": "1.0.1", - "dev": true, - "license": "MIT", + "node_modules/glob": { + "version": "7.2.0", + "license": "ISC", "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.3" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/heap": { - "version": "0.2.7", - "dev": true, - "license": "MIT", - "peer": true + "node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", "license": "MIT", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/hookable": { - "version": "5.5.3", - "dev": true, - "license": "MIT" + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", + "node_modules/global": { + "version": "4.4.0", + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", "dev": true, - "license": "ISC" + "license": "MIT", + "peer": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/http-basic": { - "version": "8.1.3", + "node_modules/global-prefix": { + "version": "3.0.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=6" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "license": "BSD-2-Clause" + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } }, - "node_modules/http-errors": { - "version": "2.0.0", + "node_modules/globals": { + "version": "13.24.0", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "type-fest": "^0.20.2" }, "engines": { - "node": ">= 0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-https": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", + "node_modules/globalthis": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">= 14" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", + "node_modules/globby": { + "version": "10.0.2", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.4" + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" }, "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/http-response-object": { - "version": "3.0.2", + "node_modules/globby/node_modules/ignore": { + "version": "5.3.2", "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "^10.0.3" + "engines": { + "node": ">= 4" } }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", + "node_modules/globrex": { + "version": "0.1.2", "dev": true, "license": "MIT" }, - "node_modules/http-signature": { - "version": "1.2.0", + "node_modules/gopd": { + "version": "1.0.1", "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http2-wrapper": { - "version": "2.2.1", + "node_modules/got": { + "version": "12.1.0", "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=10.19.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/gradient-string": { + "version": "2.0.2", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "chalk": "^4.1.2", + "tinygradient": "^1.1.5" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/human-signals": { - "version": "2.1.0", + "node_modules/gradient-string/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10.17.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", + "node_modules/gradient-string/node_modules/chalk": { + "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", + "node_modules/gradient-string/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { - "punycode": "2.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4.0.0" + "node": ">=7.0.0" } }, - "node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", + "node_modules/gradient-string/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/gradient-string/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "4.0.6", + "node_modules/gradient-string/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/immediate": { - "version": "3.3.0", + "node_modules/graphemer": { + "version": "1.4.0", "license": "MIT" }, - "node_modules/immutable": { - "version": "4.3.7", + "node_modules/handlebars": { + "version": "4.7.8", "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=6" + "node": ">=0.4.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/imul": { - "version": "1.0.1", - "dev": true, - "license": "MIT", + "node_modules/har-schema": { + "version": "2.0.0", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/har-validator": { + "version": "5.1.5", "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, "engines": { - "node": ">=0.8.19" + "node": ">=6" } }, - "node_modules/indent-string": { - "version": "4.0.0", + "node_modules/hardhat": { + "version": "2.22.10", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/edr": "^0.5.2", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "dev": true, - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "8.2.6", + "node_modules/hardhat-contract-sizer": { + "version": "2.10.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" + "chalk": "^4.0.0", + "cli-table3": "^0.6.0", + "strip-ansi": "^6.0.0" }, - "engines": { - "node": ">=12.0.0" + "peerDependencies": { + "hardhat": "^2.0.0" } }, - "node_modules/inquirer/node_modules/ansi-styles": { + "node_modules/hardhat-contract-sizer/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, "license": "MIT", @@ -10412,7 +9050,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/inquirer/node_modules/chalk": { + "node_modules/hardhat-contract-sizer/node_modules/chalk": { "version": "4.1.2", "dev": true, "license": "MIT", @@ -10427,7 +9065,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/color-convert": { + "node_modules/hardhat-contract-sizer/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -10438,12 +9076,12 @@ "node": ">=7.0.0" } }, - "node_modules/inquirer/node_modules/color-name": { + "node_modules/hardhat-contract-sizer/node_modules/color-name": { "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/inquirer/node_modules/has-flag": { + "node_modules/hardhat-contract-sizer/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -10451,29 +9089,7 @@ "node": ">=8" } }, - "node_modules/inquirer/node_modules/ora": { - "version": "5.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/supports-color": { + "node_modules/hardhat-contract-sizer/node_modules/supports-color": { "version": "7.2.0", "dev": true, "license": "MIT", @@ -10484,395 +9100,425 @@ "node": ">=8" } }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/internal-slot": { - "version": "1.0.7", + "node_modules/hardhat-deploy": { + "version": "0.12.4", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.10" + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/contracts": "^5.7.0", + "@ethersproject/providers": "^5.7.2", + "@ethersproject/solidity": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wallet": "^5.7.0", + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.7.0", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-ethers": "^5.0.0" } }, - "node_modules/io-ts": { - "version": "1.10.4", + "node_modules/hardhat-deploy-ethers": { + "version": "0.4.2", "dev": true, "license": "MIT", - "dependencies": { - "fp-ts": "^1.0.0" + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.2", + "hardhat": "^2.16.0", + "hardhat-deploy": "^0.12.0" } }, - "node_modules/ip-address": { - "version": "9.0.5", + "node_modules/hardhat-deploy/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", + "node_modules/hardhat-deploy/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", + "node_modules/hardhat-deploy/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", + "node_modules/hardhat-deploy/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/is-boolean-object": { - "version": "1.1.2", + "node_modules/hardhat-deploy/node_modules/ethers": { + "version": "5.7.2", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/is-builtin-module": { - "version": "3.2.1", + "node_modules/hardhat-deploy/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "node_modules/hardhat-deploy/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-data-view": { - "version": "1.0.1", + "node_modules/hardhat-gas-reporter": { + "version": "1.0.10", "dev": true, "license": "MIT", "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "hardhat": "^2.0.2" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/hardhat-packager": { + "version": "1.4.2", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "@typechain/hardhat": "9.1.0", + "fs-extra": "^10.0.1", + "hardhat": "^2.9.2", + "tempy": "1.0.1", + "typechain": "^8.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fn": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" + "peerDependencies": { + "@typechain/hardhat": "9.1.0", + "hardhat": "2.x", + "lodash": "4.x", + "typechain": "8.x" } }, - "node_modules/is-function": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/is-generator-function": { - "version": "1.0.10", + "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { + "version": "10.2.1", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.1.1", + "typescript": ">=4.3.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { + "version": "6.1.6", + "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "fs-extra": "^9.1.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@typechain/ethers-v5": "^10.2.1", + "ethers": "^5.4.7", + "hardhat": "^2.9.9", + "typechain": "^8.1.1" } }, - "node_modules/is-interactive": { - "version": "1.0.0", + "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", "dev": true, "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/is-lower-case": { - "version": "1.1.3", + "node_modules/hardhat-packager/node_modules/ethers": { + "version": "5.7.2", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "lower-case": "^1.1.0" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/is-module": { - "version": "1.0.0", + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT" }, - "node_modules/is-negative-zero": { - "version": "2.0.3", + "node_modules/hardhat/node_modules/@noble/secp256k1": { + "version": "1.7.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" }, - "node_modules/is-number": { - "version": "7.0.0", + "node_modules/hardhat/node_modules/@scure/bip32": { + "version": "1.1.5", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", - "engines": { - "node": ">=0.12.0" + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", + "node_modules/hardhat/node_modules/@scure/bip39": { + "version": "1.1.1", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=6 <7 || >=8" } }, - "node_modules/is-plain-obj": { - "version": "2.1.0", + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/is-reference": { - "version": "1.2.1", + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "*" + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/is-regex": { - "version": "1.1.4", + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.10", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=8.3.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", + "node_modules/has-bigints": { + "version": "1.0.2", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, + "node_modules/has-flag": { + "version": "3.0.0", "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/is-string": { - "version": "1.0.7", - "dev": true, + "node_modules/has-property-descriptors": { + "version": "1.0.2", "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "es-define-property": "^1.0.0" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10880,13 +9526,9 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, + "node_modules/has-symbols": { + "version": "1.0.3", "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, "engines": { "node": ">= 0.4" }, @@ -10894,11 +9536,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typed-array": { - "version": "1.1.13", + "node_modules/has-tostringtag": { + "version": "1.0.2", "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -10907,1581 +9549,1418 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "dev": true, + "node_modules/hash-base": { + "version": "3.1.0", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/is-upper-case": { - "version": "1.1.2", - "dev": true, + "node_modules/hash.js": { + "version": "1.1.7", "license": "MIT", "dependencies": { - "upper-case": "^1.1.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "dev": true, + "node_modules/hasown": { + "version": "2.0.2", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "function-bind": "^1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "dev": true, - "license": "MIT", "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" + "node": ">= 0.4" } }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/isows": { - "version": "1.0.6", + "node_modules/he": { + "version": "1.2.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], "license": "MIT", - "peerDependencies": { - "ws": "*" + "bin": { + "he": "bin/he" } }, - "node_modules/isstream": { - "version": "0.1.2", - "license": "MIT" - }, - "node_modules/jiti": { - "version": "1.21.6", + "node_modules/header-case": { + "version": "1.0.1", "dev": true, "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.3" } }, - "node_modules/joycon": { - "version": "3.1.1", + "node_modules/heap": { + "version": "0.2.7", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" + "peer": true }, - "node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, + "node_modules/hmac-drbg": { + "version": "1.0.1", "license": "MIT", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/jsbn": { - "version": "1.1.0", + "node_modules/hookable": { + "version": "5.5.3", "dev": true, "license": "MIT" }, - "node_modules/jsesc": { - "version": "2.5.2", + "node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/http-basic": { + "version": "8.1.3", + "dev": true, "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "license": "MIT" + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "license": "BSD-2-Clause" }, - "node_modules/json-fixer": { - "version": "1.6.15", - "dev": true, + "node_modules/http-errors": { + "version": "2.0.0", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.18.9", - "chalk": "^4.1.2", - "pegjs": "^0.10.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "node_modules/json-fixer/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/http-https": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 14" } }, - "node_modules/json-fixer/node_modules/chalk": { - "version": "4.1.2", + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "debug": "^4.3.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 14" } }, - "node_modules/json-fixer/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/http-response-object": { + "version": "3.0.2", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@types/node": "^10.0.3" } }, - "node_modules/json-fixer/node_modules/color-name": { - "version": "1.1.4", + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", "dev": true, "license": "MIT" }, - "node_modules/json-fixer/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, + "node_modules/http-signature": { + "version": "1.2.0", "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, "engines": { - "node": ">=8" + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "node_modules/json-fixer/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/http2-wrapper": { + "version": "2.2.1", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" }, "engines": { - "node": ">=8" + "node": ">=10.19.0" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", + "node_modules/https-proxy-agent": { + "version": "5.0.1", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", + "node_modules/human-signals": { + "version": "2.1.0", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } }, - "node_modules/json-rpc-engine": { - "version": "6.1.0", - "license": "ISC", + "node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", "dependencies": { - "@metamask/safe-event-emitter": "^2.0.0", - "eth-rpc-errors": "^4.0.2" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=10.0.0" + "node": ">=0.10.0" } }, - "node_modules/json-rpc-engine/node_modules/eth-rpc-errors": { - "version": "4.0.3", + "node_modules/idna-uts46-hx": { + "version": "2.3.1", "license": "MIT", "dependencies": { - "fast-safe-stringify": "^2.0.6" + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/json-rpc-random-id": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "license": "(AFL-2.1 OR BSD-3-Clause)" + "node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/json-stable-stringify": { - "version": "1.1.1", + "node_modules/ignore": { + "version": "4.0.6", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "isarray": "^2.0.5", - "jsonify": "^0.0.1", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 4" } }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", + "node_modules/immediate": { + "version": "3.3.0", "license": "MIT" }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "license": "ISC" + "node_modules/immutable": { + "version": "4.3.7", + "dev": true, + "license": "MIT" }, - "node_modules/json5": { - "version": "2.2.3", + "node_modules/import-fresh": { + "version": "3.3.0", "license": "MIT", - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.1.0", + "node_modules/imul": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/jsonify": { - "version": "0.0.1", - "license": "Public Domain", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/imurmurhash": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.8.19" } }, - "node_modules/jsonschema": { - "version": "1.4.1", + "node_modules/indent-string": { + "version": "4.0.0", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "license": "MIT", + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/keccak": { - "version": "3.0.4", - "hasInstallScript": true, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "dev": true, "license": "MIT", "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" + "node": ">=12.0.0" } }, - "node_modules/kind-of": { - "version": "6.0.3", + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/level-codec": { - "version": "7.0.1", - "license": "MIT" - }, - "node_modules/level-errors": { - "version": "1.0.5", + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { - "errno": "~0.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/level-iterator-stream": { - "version": "1.3.1", + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/level-iterator-stream/node_modules/isarray": { - "version": "0.0.1", + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "dev": true, "license": "MIT" }, - "node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "engines": { + "node": ">=8" } }, - "node_modules/level-iterator-stream/node_modules/string_decoder": { - "version": "0.10.31", - "license": "MIT" - }, - "node_modules/level-ws": { - "version": "0.0.0", + "node_modules/inquirer/node_modules/ora": { + "version": "5.4.1", + "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/level-ws/node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/level-ws/node_modules/object-keys": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/level-ws/node_modules/string_decoder": { - "version": "0.10.31", - "license": "MIT" - }, - "node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dependencies": { - "object-keys": "~0.4.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.4" + "node": ">=8" } }, - "node_modules/levelup": { - "version": "1.3.9", + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, "license": "MIT", "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/levelup/node_modules/semver": { - "version": "5.4.1", - "license": "ISC", - "bin": { - "semver": "bin/semver" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/levn": { - "version": "0.4.1", + "node_modules/internal-slot": { + "version": "1.0.7", + "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" } }, - "node_modules/lilconfig": { - "version": "3.1.2", + "node_modules/interpret": { + "version": "1.4.0", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" + "node": ">= 0.10" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", + "node_modules/io-ts": { + "version": "1.10.4", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "fp-ts": "^1.0.0" + } }, - "node_modules/load-json-file": { - "version": "4.0.0", + "node_modules/ip-address": { + "version": "9.0.5", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" }, "engines": { - "node": ">=4" + "node": ">= 12" } }, - "node_modules/load-json-file/node_modules/pify": { - "version": "3.0.0", - "dev": true, + "node_modules/ipaddr.js": { + "version": "1.9.1", "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/load-tsconfig": { - "version": "0.2.5", - "dev": true, + "node_modules/is-arguments": { + "version": "1.1.1", "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/locate-path": { - "version": "2.0.0", + "node_modules/is-array-buffer": { + "version": "3.0.4", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "license": "MIT" - }, - "node_modules/lodash.get": { - "version": "4.4.2", + "node_modules/is-arrayish": { + "version": "0.2.1", "dev": true, "license": "MIT" }, - "node_modules/lodash.isequal": { - "version": "4.5.0", + "node_modules/is-bigint": { + "version": "1.0.4", "dev": true, "license": "MIT", - "peer": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "license": "MIT" + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/lodash.pick": { - "version": "4.4.0", + "node_modules/is-binary-path": { + "version": "2.1.0", "dev": true, - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "license": "MIT" + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/lodash.uniq": { - "version": "4.5.0", + "node_modules/is-boolean-object": { + "version": "1.1.2", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", + "node_modules/is-builtin-module": { + "version": "3.2.1", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "builtin-modules": "^3.3.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/is-callable": { + "version": "1.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", + "node_modules/is-data-view": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/is-date-object": { + "version": "1.0.5", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, + "node_modules/is-fn": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/is-function": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/is-generator-function": { + "version": "1.0.10", "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/loupe": { - "version": "2.3.7", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", "license": "MIT", - "peer": true, "dependencies": { - "get-func-name": "^2.0.1" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/lower-case": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } }, - "node_modules/lower-case-first": { - "version": "1.0.2", + "node_modules/is-interactive": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "lower-case": "^1.1.2" + "engines": { + "node": ">=8" } }, - "node_modules/lowercase-keys": { - "version": "3.0.0", + "node_modules/is-lower-case": { + "version": "1.1.3", + "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "lower-case": "^1.1.0" } }, - "node_modules/lru_map": { - "version": "0.3.3", + "node_modules/is-module": { + "version": "1.0.0", "dev": true, "license": "MIT" }, - "node_modules/lru-cache": { - "version": "7.18.3", + "node_modules/is-negative-zero": { + "version": "2.0.3", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ltgt": { - "version": "2.2.1", - "license": "MIT" + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } }, - "node_modules/magic-string": { - "version": "0.30.11", + "node_modules/is-number-object": { + "version": "1.0.7", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" - }, - "node_modules/map-stream": { - "version": "0.1.0", - "dev": true - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/markdown-table-ts": { - "version": "1.0.3", + "node_modules/is-path-cwd": { + "version": "2.2.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/match-all": { - "version": "1.2.6", + "node_modules/is-path-inside": { + "version": "3.0.3", "dev": true, - "license": "MIT" - }, - "node_modules/md5.js": { - "version": "1.3.5", "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "engines": { + "node": ">=8" } }, - "node_modules/mdn-data": { - "version": "2.0.30", + "node_modules/is-plain-obj": { + "version": "2.1.0", "dev": true, - "license": "CC0-1.0" - }, - "node_modules/media-typer": { - "version": "0.3.0", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/memdown": { - "version": "1.4.1", + "node_modules/is-reference": { + "version": "1.2.1", + "dev": true, "license": "MIT", "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" + "@types/estree": "*" } }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, "license": "MIT", "dependencies": { - "xtend": "~4.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/memdown/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/memorystream": { - "version": "0.3.1", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, "engines": { - "node": ">= 0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", + "node_modules/is-stream": { + "version": "2.0.1", "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "license": "MPL-2.0", + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "license": "MIT" - }, - "node_modules/merkle-patricia-tree/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/merkle-patricia-tree/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/merkle-patricia-tree/node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/is-typed-array": { + "version": "1.1.13", "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/merkle-patricia-tree/node_modules/safe-buffer": { - "version": "5.1.2", + "node_modules/is-typedarray": { + "version": "1.0.0", "license": "MIT" }, - "node_modules/merkle-patricia-tree/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/methods": { + "node_modules/is-upper-case": { "version": "1.1.2", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "upper-case": "^1.1.0" } }, - "node_modules/micro-ftch": { - "version": "0.3.1", + "node_modules/is-weakref": { + "version": "1.0.2", "dev": true, - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=8.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mime": { - "version": "1.6.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } + "node_modules/isarray": { + "version": "2.0.5", + "license": "MIT" }, - "node_modules/mime-db": { - "version": "1.52.0", + "node_modules/isbinaryfile": { + "version": "4.0.10", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" } }, - "node_modules/mime-types": { - "version": "2.1.35", + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/isows": { + "version": "1.0.6", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" + "peerDependencies": { + "ws": "*" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", + "node_modules/isstream": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/jiti": { + "version": "1.21.6", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "bin": { + "jiti": "bin/jiti.js" } }, - "node_modules/mimic-response": { - "version": "1.0.1", + "node_modules/joycon": { + "version": "3.1.1", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "dependencies": { - "dom-walk": "^0.1.0" + "node": ">=10" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "license": "ISC" + "node_modules/js-sha3": { + "version": "0.8.0", + "license": "MIT" }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", + "node_modules/js-tokens": { + "version": "4.0.0", "license": "MIT" }, - "node_modules/minimatch": { - "version": "9.0.5", + "node_modules/js-yaml": { + "version": "4.1.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/minipass": { - "version": "2.9.0", - "license": "ISC", - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } + "node_modules/jsbn": { + "version": "1.1.0", + "dev": true, + "license": "MIT" }, - "node_modules/minizlib": { - "version": "1.3.3", + "node_modules/jsesc": { + "version": "2.5.2", "license": "MIT", - "dependencies": { - "minipass": "^2.9.0" + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" } }, - "node_modules/mkdirp": { - "version": "0.5.6", + "node_modules/json-buffer": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/json-fixer": { + "version": "1.6.15", + "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.6" + "@babel/runtime": "^7.18.9", + "chalk": "^4.1.2", + "pegjs": "^0.10.0" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=10" } }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "license": "ISC", + "node_modules/json-fixer/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "mkdirp": "*" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/mkdist": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/mkdist/-/mkdist-1.5.5.tgz", - "integrity": "sha512-Kbj0Tt4uk6AN/XEV1W7EgBpJUmEXZgTWxbMKYIpO0hRXoTstFIJrJVqDgPjBz9AXXN3ZpxQBk2Q0n28Ze0Gh1w==", + "node_modules/json-fixer/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "autoprefixer": "^10.4.20", - "citty": "^0.1.6", - "cssnano": "^7.0.5", - "defu": "^6.1.4", - "esbuild": "^0.23.1", - "fast-glob": "^3.3.2", - "jiti": "^1.21.6", - "mlly": "^1.7.1", - "pathe": "^1.1.2", - "pkg-types": "^1.1.3", - "postcss": "^8.4.41", - "postcss-nested": "^6.2.0", - "semver": "^7.6.3" - }, - "bin": { - "mkdist": "dist/cli.cjs" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "sass": "^1.77.8", - "typescript": ">=5.5.4", - "vue-tsc": "^1.8.27 || ^2.0.21" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "sass": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vue-tsc": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/mkdist/node_modules/@esbuild/android-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", - "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", - "cpu": [ - "arm" - ], + "node_modules/json-fixer/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=18" + "node": ">=7.0.0" } }, - "node_modules/mkdist/node_modules/@esbuild/android-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", - "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", - "cpu": [ - "arm64" - ], + "node_modules/json-fixer/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/mkdist/node_modules/@esbuild/android-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", - "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", - "cpu": [ - "x64" - ], + "node_modules/json-fixer/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/mkdist/node_modules/@esbuild/darwin-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", - "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", - "cpu": [ - "arm64" - ], + "node_modules/json-fixer/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/mkdist/node_modules/@esbuild/darwin-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", - "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", - "cpu": [ - "x64" - ], + "node_modules/json-parse-better-errors": { + "version": "1.0.2", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/mkdist/node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", - "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", - "cpu": [ - "arm64" - ], + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "MIT" + }, + "node_modules/json-rpc-engine": { + "version": "6.1.0", + "license": "ISC", + "dependencies": { + "@metamask/safe-event-emitter": "^2.0.0", + "eth-rpc-errors": "^4.0.2" + }, "engines": { - "node": ">=18" + "node": ">=10.0.0" } }, - "node_modules/mkdist/node_modules/@esbuild/freebsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", - "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" + "node_modules/json-rpc-engine/node_modules/eth-rpc-errors": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "fast-safe-stringify": "^2.0.6" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-arm": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", - "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/json-rpc-random-id": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/json-stable-stringify": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, "engines": { - "node": ">=18" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", - "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, "engines": { - "node": ">=18" + "node": ">=6" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", - "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", - "cpu": [ - "ia32" - ], + "node_modules/jsonc-parser": { + "version": "3.3.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/mkdist/node_modules/@esbuild/linux-loong64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", - "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", - "cpu": [ - "loong64" - ], + "node_modules/jsonfile": { + "version": "6.1.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-mips64el": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", - "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "node_modules/jsonify": { + "version": "0.0.1", + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-ppc64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", - "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", - "cpu": [ - "ppc64" - ], + "node_modules/jsonschema": { + "version": "1.4.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "peer": true, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-riscv64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", - "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/jsprim": { + "version": "1.4.2", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, "engines": { - "node": ">=18" + "node": ">=0.6.0" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-s390x": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", - "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/keccak": { + "version": "3.0.4", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, "engines": { - "node": ">=18" + "node": ">=10.0.0" } }, - "node_modules/mkdist/node_modules/@esbuild/linux-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", - "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "node_modules/keyv": { + "version": "4.5.4", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" } }, - "node_modules/mkdist/node_modules/@esbuild/netbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", - "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", - "cpu": [ - "x64" - ], + "node_modules/kind-of": { + "version": "6.0.3", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "license": "MIT", + "peer": true, "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/mkdist/node_modules/@esbuild/openbsd-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", - "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" + "node_modules/level-codec": { + "version": "7.0.1", + "license": "MIT" + }, + "node_modules/level-errors": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "errno": "~0.1.1" } }, - "node_modules/mkdist/node_modules/@esbuild/sunos-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", - "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" + "node_modules/level-iterator-stream": { + "version": "1.3.1", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" } }, - "node_modules/mkdist/node_modules/@esbuild/win32-arm64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", - "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "node_modules/level-iterator-stream/node_modules/isarray": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "node_modules/mkdist/node_modules/@esbuild/win32-ia32": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", - "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "node_modules/level-iterator-stream/node_modules/string_decoder": { + "version": "0.10.31", + "license": "MIT" + }, + "node_modules/level-ws": { + "version": "0.0.0", + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" } }, - "node_modules/mkdist/node_modules/@esbuild/win32-x64": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", - "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" + "node_modules/level-ws/node_modules/isarray": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/level-ws/node_modules/object-keys": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "node_modules/mkdist/node_modules/esbuild": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", - "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "node_modules/level-ws/node_modules/string_decoder": { + "version": "0.10.31", + "license": "MIT" + }, + "node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "dependencies": { + "object-keys": "~0.4.0" }, "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.1", - "@esbuild/android-arm": "0.23.1", - "@esbuild/android-arm64": "0.23.1", - "@esbuild/android-x64": "0.23.1", - "@esbuild/darwin-arm64": "0.23.1", - "@esbuild/darwin-x64": "0.23.1", - "@esbuild/freebsd-arm64": "0.23.1", - "@esbuild/freebsd-x64": "0.23.1", - "@esbuild/linux-arm": "0.23.1", - "@esbuild/linux-arm64": "0.23.1", - "@esbuild/linux-ia32": "0.23.1", - "@esbuild/linux-loong64": "0.23.1", - "@esbuild/linux-mips64el": "0.23.1", - "@esbuild/linux-ppc64": "0.23.1", - "@esbuild/linux-riscv64": "0.23.1", - "@esbuild/linux-s390x": "0.23.1", - "@esbuild/linux-x64": "0.23.1", - "@esbuild/netbsd-x64": "0.23.1", - "@esbuild/openbsd-arm64": "0.23.1", - "@esbuild/openbsd-x64": "0.23.1", - "@esbuild/sunos-x64": "0.23.1", - "@esbuild/win32-arm64": "0.23.1", - "@esbuild/win32-ia32": "0.23.1", - "@esbuild/win32-x64": "0.23.1" + "node": ">=0.4" } }, - "node_modules/mkdist/node_modules/semver": { - "version": "7.6.3", - "dev": true, + "node_modules/levelup": { + "version": "1.3.9", + "license": "MIT", + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/levelup/node_modules/semver": { + "version": "5.4.1", "license": "ISC", "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "semver": "bin/semver" } }, - "node_modules/mlly": { - "version": "1.7.1", - "dev": true, + "node_modules/levn": { + "version": "0.4.1", "license": "MIT", "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/mlly/node_modules/acorn": { - "version": "8.12.1", + "node_modules/lilconfig": { + "version": "3.1.2", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, - "node_modules/mnemonist": { - "version": "0.38.5", + "node_modules/lines-and-columns": { + "version": "1.2.4", "dev": true, - "license": "MIT", - "dependencies": { - "obliterator": "^2.0.0" - } + "license": "MIT" }, - "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "node_modules/load-json-file": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">= 14.0.0" + "node": ">=4" } }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", + "node_modules/load-json-file/node_modules/pify": { + "version": "3.0.0", "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/load-tsconfig": { + "version": "0.2.5", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", + "node_modules/locate-path": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "MIT" }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/lodash.clonedeep": { + "version": "4.5.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } + "peer": true }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", + "node_modules/lodash.debounce": { + "version": "4.0.8", + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "license": "MIT" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" @@ -12490,51 +10969,52 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=7.0.0" } }, - "node_modules/mocha/node_modules/path-exists": { + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", "dev": true, "license": "MIT", @@ -12542,2382 +11022,2492 @@ "node": ">=8" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, - "node_modules/mocha/node_modules/y18n": { - "version": "5.0.8", + "node_modules/loupe": { + "version": "2.3.7", "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "license": "MIT", + "peer": true, + "dependencies": { + "get-func-name": "^2.0.1" } }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", + "node_modules/lower-case": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/lower-case-first": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, + "lower-case": "^1.1.2" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mock-fs": { - "version": "4.14.0", + "node_modules/lru_map": { + "version": "0.3.3", + "dev": true, "license": "MIT" }, - "node_modules/mri": { - "version": "1.2.0", + "node_modules/lru-cache": { + "version": "7.18.3", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/ms": { - "version": "2.1.2", + "node_modules/ltgt": { + "version": "2.2.1", "license": "MIT" }, - "node_modules/multibase": { - "version": "0.6.1", + "node_modules/magic-string": { + "version": "0.30.11", + "dev": true, "license": "MIT", "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/multicodec": { - "version": "0.5.7", + "node_modules/make-error": { + "version": "1.3.6", + "dev": true, + "license": "ISC" + }, + "node_modules/map-stream": { + "version": "0.1.0", + "dev": true + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/markdown-table-ts": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/match-all": { + "version": "1.2.6", + "dev": true, + "license": "MIT" + }, + "node_modules/md5.js": { + "version": "1.3.5", "license": "MIT", "dependencies": { - "varint": "^5.0.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/multihashes": { - "version": "0.4.21", + "node_modules/mdn-data": { + "version": "2.0.30", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", + "node_modules/memdown": { + "version": "1.4.1", "license": "MIT", "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" } }, - "node_modules/murmur-128": { - "version": "0.2.1", - "dev": true, + "node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", "license": "MIT", "dependencies": { - "encode-utf8": "^1.0.2", - "fmix": "^0.1.0", - "imul": "^1.0.0" + "xtend": "~4.0.0" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "dev": true, - "license": "ISC" - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", + "node_modules/memdown/node_modules/safe-buffer": { + "version": "5.1.2", "license": "MIT" }, - "node_modules/nanoid": { - "version": "3.3.7", + "node_modules/memorystream": { + "version": "0.3.1", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">= 0.10.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", + "node_modules/merge-descriptors": { + "version": "1.0.1", "license": "MIT" }, - "node_modules/negotiator": { - "version": "0.6.3", + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 8" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, + "node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "license": "MPL-2.0", + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", "license": "MIT" }, - "node_modules/netmask": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" + "node_modules/merkle-patricia-tree/node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/next-tick": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "dev": true, + "node_modules/merkle-patricia-tree/node_modules/isarray": { + "version": "1.0.0", "license": "MIT" }, - "node_modules/no-case": { - "version": "2.3.2", - "dev": true, + "node_modules/merkle-patricia-tree/node_modules/readable-stream": { + "version": "2.3.8", "license": "MIT", "dependencies": { - "lower-case": "^1.1.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/node-addon-api": { - "version": "2.0.2", + "node_modules/merkle-patricia-tree/node_modules/safe-buffer": { + "version": "5.1.2", "license": "MIT" }, - "node_modules/node-domexception": { - "version": "1.0.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "dev": true, + "node_modules/merkle-patricia-tree/node_modules/string_decoder": { + "version": "1.1.1", "license": "MIT", - "peer": true, "dependencies": { - "lodash": "^4.17.21" + "safe-buffer": "~5.1.0" } }, - "node_modules/node-fetch": { - "version": "2.7.0", + "node_modules/methods": { + "version": "1.1.2", "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node": ">= 0.6" } }, - "node_modules/node-plop": { - "version": "0.26.3", + "node_modules/micro-ftch": { + "version": "0.3.1", "dev": true, + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", "license": "MIT", "dependencies": { - "@babel/runtime-corejs3": "^7.9.2", - "@types/inquirer": "^6.5.0", - "change-case": "^3.1.0", - "del": "^5.1.0", - "globby": "^10.0.1", - "handlebars": "^4.4.3", - "inquirer": "^7.1.0", - "isbinaryfile": "^4.0.2", - "lodash.get": "^4.4.2", - "mkdirp": "^0.5.1", - "resolve": "^1.12.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8.9.4" + "node": ">=8.6" } }, - "node_modules/node-plop/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/mime": { + "version": "1.6.0", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, - "node_modules/node-plop/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/mime-db": { + "version": "1.52.0", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/node-plop/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "node_modules/mime-types": { + "version": "2.1.35", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "mime-db": "1.52.0" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.6" } }, - "node_modules/node-plop/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/node-plop/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/mimic-fn": { + "version": "2.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/node-plop/node_modules/inquirer": { - "version": "7.3.3", - "dev": true, + "node_modules/mimic-response": { + "version": "1.0.1", "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/node-plop/node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, "engines": { - "npm": ">=2.0.0" + "node": ">=4" } }, - "node_modules/node-plop/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", + "node_modules/min-document": { + "version": "2.19.0", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "dom-walk": "^0.1.0" } }, - "node_modules/node-plop/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" }, - "node_modules/node-releases": { - "version": "2.0.18", + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", "license": "MIT" }, - "node_modules/nofilter": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/nopt": { - "version": "3.0.6", + "node_modules/minimatch": { + "version": "9.0.5", "dev": true, "license": "ISC", - "peer": true, "dependencies": { - "abbrev": "1" + "brace-expansion": "^2.0.1" }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/normalize-url": { - "version": "6.1.0", + "node_modules/minimist": { + "version": "1.2.8", "license": "MIT", - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "dev": true, - "license": "MIT", + "node_modules/minipass": { + "version": "2.9.0", + "license": "ISC", "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" - }, - "engines": { - "node": ">= 4" + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" } }, - "node_modules/npm-run-all/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, + "node_modules/minizlib": { + "version": "1.3.3", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "minipass": "^2.9.0" } }, - "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, + "node_modules/mkdirp": { + "version": "0.5.6", "license": "MIT", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "minimist": "^1.2.6" }, - "engines": { - "node": ">=4.8" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/npm-run-all/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, + "node_modules/mkdirp-promise": { + "version": "5.0.1", "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "mkdirp": "*" }, - "engines": { - "node": "*" - } - }, - "node_modules/npm-run-all/node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/npm-run-all/node_modules/semver": { - "version": "5.7.2", + "node_modules/mkdist": { + "version": "1.5.5", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "autoprefixer": "^10.4.20", + "citty": "^0.1.6", + "cssnano": "^7.0.5", + "defu": "^6.1.4", + "esbuild": "^0.23.1", + "fast-glob": "^3.3.2", + "jiti": "^1.21.6", + "mlly": "^1.7.1", + "pathe": "^1.1.2", + "pkg-types": "^1.1.3", + "postcss": "^8.4.41", + "postcss-nested": "^6.2.0", + "semver": "^7.6.3" + }, "bin": { - "semver": "bin/semver" + "mkdist": "dist/cli.cjs" + }, + "peerDependencies": { + "sass": "^1.77.8", + "typescript": ">=5.5.4", + "vue-tsc": "^1.8.27 || ^2.0.21" + }, + "peerDependenciesMeta": { + "sass": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vue-tsc": { + "optional": true + } } }, - "node_modules/npm-run-all/node_modules/shebang-command": { - "version": "1.2.0", + "node_modules/mkdist/node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/npm-run-all/node_modules/shebang-regex": { - "version": "1.0.0", + "node_modules/mkdist/node_modules/esbuild": { + "version": "0.23.1", "dev": true, + "hasInstallScript": true, "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, - "node_modules/npm-run-all/node_modules/which": { - "version": "1.3.1", + "node_modules/mkdist/node_modules/semver": { + "version": "7.6.3", "dev": true, "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, "bin": { - "which": "bin/which" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", + "node_modules/mlly": { + "version": "1.7.1", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, + "node_modules/mlly/node_modules/acorn": { + "version": "8.12.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", + "node_modules/mnemonist": { + "version": "0.38.5", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "obliterator": "^2.0.0" } }, - "node_modules/number-to-bn": { - "version": "1.7.0", + "node_modules/mocha": { + "version": "10.7.3", + "dev": true, "license": "MIT", "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "license": "MIT" - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "license": "Apache-2.0", - "engines": { - "node": "*" + "node": ">= 14.0.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/object-inspect": { - "version": "1.13.2", + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object.assign": { - "version": "4.1.5", + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/obliterator": { - "version": "2.0.4", + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "license": "MIT" - }, - "node_modules/oboe": { - "version": "2.1.5", - "license": "BSD", - "dependencies": { - "http-https": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/on-finished": { - "version": "2.4.1", + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "dev": true, "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/once": { - "version": "1.4.0", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, "license": "ISC", "dependencies": { - "wrappy": "1" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/onetime": { - "version": "5.1.2", + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/optionator": { - "version": "0.9.4", + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "p-limit": "^3.0.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora": { - "version": "4.1.1", + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/ora/node_modules/chalk": { - "version": "3.0.0", + "node_modules/mocha/node_modules/y18n": { + "version": "5.0.8", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "dev": true, + "node_modules/mock-fs": { + "version": "4.14.0", "license": "MIT" }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/mri": { + "version": "1.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/ora/node_modules/log-symbols": { - "version": "3.0.0", - "dev": true, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/multibase": { + "version": "0.6.1", "license": "MIT", "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" + "base-x": "^3.0.8", + "buffer": "^5.5.0" } }, - "node_modules/ora/node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, + "node_modules/multicodec": { + "version": "0.5.7", "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "varint": "^5.0.0" } }, - "node_modules/ora/node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", + "node_modules/multihashes": { + "version": "0.4.21", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/murmur-128": { + "version": "0.2.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "encode-utf8": "^1.0.2", + "fmix": "^0.1.0", + "imul": "^1.0.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=4" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/ora/node_modules/log-symbols/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, + "node_modules/natural-compare": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">= 0.6" } }, - "node_modules/ora/node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.3", + "node_modules/neo-async": { + "version": "2.6.2", "dev": true, "license": "MIT" }, - "node_modules/ora/node_modules/log-symbols/node_modules/has-flag": { - "version": "3.0.0", + "node_modules/netmask": { + "version": "2.0.2", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.4.0" } }, - "node_modules/ora/node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", + "node_modules/next-tick": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "2.3.2", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "lower-case": "^1.1.1" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/node-addon-api": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10.5.0" } }, - "node_modules/ordinal": { - "version": "1.0.3", + "node_modules/node-emoji": { + "version": "1.11.0", "dev": true, "license": "MIT", - "peer": true + "peer": true, + "dependencies": { + "lodash": "^4.17.21" + } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, + "node_modules/node-fetch": { + "version": "2.7.0", "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/p-cancelable": { - "version": "3.0.0", + "node_modules/node-gyp-build": { + "version": "4.8.2", "license": "MIT", - "engines": { - "node": ">=12.20" + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/p-limit": { - "version": "1.3.0", + "node_modules/node-plop": { + "version": "0.26.3", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^1.0.0" + "@babel/runtime-corejs3": "^7.9.2", + "@types/inquirer": "^6.5.0", + "change-case": "^3.1.0", + "del": "^5.1.0", + "globby": "^10.0.1", + "handlebars": "^4.4.3", + "inquirer": "^7.1.0", + "isbinaryfile": "^4.0.2", + "lodash.get": "^4.4.2", + "mkdirp": "^0.5.1", + "resolve": "^1.12.0" }, "engines": { - "node": ">=4" + "node": ">=8.9.4" } }, - "node_modules/p-locate": { - "version": "2.0.0", + "node_modules/node-plop/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^1.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/p-map": { - "version": "4.0.0", + "node_modules/node-plop/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/pac-proxy-agent": { - "version": "7.0.2", + "node_modules/node-plop/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 14" + "node": ">=7.0.0" } }, - "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", + "node_modules/node-plop/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/node-plop/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", + "node_modules/node-plop/node_modules/inquirer": { + "version": "7.3.3", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" }, "engines": { - "node": ">= 14" + "node": ">=8.0.0" } }, - "node_modules/pac-resolver": { - "version": "7.0.1", + "node_modules/node-plop/node_modules/rxjs": { + "version": "6.6.7", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" + "tslib": "^1.9.0" }, "engines": { - "node": ">= 14" + "npm": ">=2.0.0" } }, - "node_modules/param-case": { - "version": "2.1.1", + "node_modules/node-plop/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "dev": true + "node_modules/node-plop/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" }, - "node_modules/parse-headers": { - "version": "2.0.5", + "node_modules/node-releases": { + "version": "2.0.18", "license": "MIT" }, - "node_modules/parse-json": { - "version": "4.0.0", + "node_modules/nofilter": { + "version": "3.1.0", "dev": true, "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", + "peer": true, "engines": { - "node": ">= 0.8" + "node": ">=12.19" } }, - "node_modules/pascal-case": { - "version": "2.0.1", + "node_modules/nopt": { + "version": "3.0.6", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "dependencies": { - "camel-case": "^3.0.0", - "upper-case-first": "^1.1.0" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" } }, - "node_modules/path-case": { - "version": "2.1.1", + "node_modules/normalize-package-data": { + "version": "2.5.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "no-case": "^2.2.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/path-exists": { - "version": "3.0.0", + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", + "node_modules/normalize-range": { + "version": "0.1.2", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", + "node_modules/normalize-url": { + "version": "6.1.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pathe": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "1.1.1", + "node_modules/npm-run-all": { + "version": "4.1.5", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, "engines": { - "node": "*" + "node": ">= 4" } }, - "node_modules/pause-stream": { - "version": "0.0.11", + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "license": [ - "MIT", - "Apache2" - ], + "license": "MIT", "dependencies": { - "through": "~2.3" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, "license": "MIT", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "engines": { - "node": ">=0.12" + "node": ">=4.8" } }, - "node_modules/pegjs": { - "version": "0.10.0", + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", - "bin": { - "pegjs": "bin/pegjs" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10" + "node": "*" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" - }, - "node_modules/picomatch": { - "version": "2.3.1", + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=4" } }, - "node_modules/pidtree": { - "version": "0.3.1", + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", "dev": true, - "license": "MIT", + "license": "ISC", "bin": { - "pidtree": "bin/pidtree.js" + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/pify": { - "version": "5.0.0", + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/pkg-types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", - "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.1", - "pathe": "^1.1.2" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/pluralize": { - "version": "8.0.0", + "node_modules/npm-run-path": { + "version": "4.0.1", "dev": true, "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node_modules/nth-check": { + "version": "2.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/postcss": { - "version": "8.4.44", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz", - "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/number-to-bn": { + "version": "1.7.0", "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss-calc": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz", - "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==", - "dev": true, + "node_modules/object-inspect": { + "version": "1.13.2", "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.2", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^18.12 || ^20.9 || >=22.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.4.38" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-colormin": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz", - "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==", - "dev": true, + "node_modules/object-keys": { + "version": "1.1.1", "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">= 0.4" } }, - "node_modules/postcss-convert-values": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.3.tgz", - "integrity": "sha512-yJhocjCs2SQer0uZ9lXTMOwDowbxvhwFVrZeS6NPEij/XXthl73ggUmfwVvJM+Vaj5gtCKJV1jiUu4IhAUkX/Q==", + "node_modules/object.assign": { + "version": "4.1.5", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "postcss-value-parser": "^4.2.0" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" + "node": ">= 0.4" }, - "peerDependencies": { - "postcss": "^8.4.31" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/postcss-discard-comments": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.2.tgz", - "integrity": "sha512-/Hje9Ls1IYcB9duELO/AyDUJI6aQVY3h5Rj1ziXgaLYCTi1iVBLnjg/TS0D6NszR/kDG6I86OwLmAYe+bvJjiQ==", + "node_modules/obliterator": { + "version": "2.0.4", "dev": true, + "license": "MIT" + }, + "node_modules/oboe": { + "version": "2.1.5", + "license": "BSD", + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.1" + "ee-first": "1.1.1" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">= 0.8" } }, - "node_modules/postcss-discard-duplicates": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz", - "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==", + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", "dev": true, "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" + "node": ">=6" }, - "peerDependencies": { - "postcss": "^8.4.31" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-discard-empty": { - "version": "7.0.0", - "dev": true, + "node_modules/optionator": { + "version": "0.9.4", "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, - "peerDependencies": { - "postcss": "^8.4.31" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/postcss-discard-overridden": { - "version": "7.0.0", + "node_modules/ora": { + "version": "4.1.1", "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.4.31" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-merge-longhand": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.3.tgz", - "integrity": "sha512-8waYomFxshdv6M9Em3QRM9MettRLDRcH2JQi2l0Z1KlYD/vhal3gbkeSES0NuACXOlZBB0V/B0AseHZaklzWOA==", + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^7.0.3" + "color-convert": "^2.0.1" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.4.31" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/postcss-merge-rules": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.3.tgz", - "integrity": "sha512-2eSas2p3voPxNfdI5sQrvIkMaeUHpVc3EezgVs18hz/wRTQAC9U99tp9j3W5Jx9/L3qHkEDvizEx/LdnmumIvQ==", + "node_modules/ora/node_modules/chalk": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^5.0.0", - "postcss-selector-parser": "^6.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=8" } }, - "node_modules/postcss-minify-font-values": { - "version": "7.0.0", + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=7.0.0" } }, - "node_modules/postcss-minify-gradients": { - "version": "7.0.0", + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=8" } }, - "node_modules/postcss-minify-params": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz", - "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==", + "node_modules/ora/node_modules/log-symbols": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" + "chalk": "^2.4.2" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=8" } }, - "node_modules/postcss-minify-selectors": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.3.tgz", - "integrity": "sha512-SxTgUQSgBk6wEqzQZKEv1xQYIp9UBju6no9q+npohzSdhuSICQdkqmD1UMKkZWItS3olJSJMDDEY9WOJ5oGJew==", + "node_modules/ora/node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "postcss-selector-parser": "^6.1.1" + "color-convert": "^1.9.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=4" } }, - "node_modules/postcss-nested": { - "version": "6.2.0", + "node_modules/ora/node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" + "node": ">=4" } }, - "node_modules/postcss-normalize-charset": { - "version": "7.0.0", + "node_modules/ora/node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", "dev": true, "license": "MIT", - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/postcss-normalize-display-values": { - "version": "7.0.0", + "node_modules/ora/node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=4" } }, - "node_modules/postcss-normalize-positions": { - "version": "7.0.0", + "node_modules/ora/node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "has-flag": "^3.0.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=4" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "7.0.0", + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=8" } }, - "node_modules/postcss-normalize-string": { - "version": "7.0.0", + "node_modules/ordinal": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", "dev": true, "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=0.10.0" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "7.0.0", - "dev": true, + "node_modules/p-cancelable": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=12.20" } }, - "node_modules/postcss-normalize-unicode": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz", - "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==", + "node_modules/p-limit": { + "version": "1.3.0", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "postcss-value-parser": "^4.2.0" + "p-try": "^1.0.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=4" } }, - "node_modules/postcss-normalize-url": { - "version": "7.0.0", + "node_modules/p-locate": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "p-limit": "^1.1.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=4" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "7.0.0", + "node_modules/p-map": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "aggregate-error": "^3.0.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" + "node": ">=10" }, - "peerDependencies": { - "postcss": "^8.4.31" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-ordered-values": { - "version": "7.0.1", + "node_modules/p-try": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "cssnano-utils": "^5.0.0", - "postcss-value-parser": "^4.2.0" - }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=4" } }, - "node_modules/postcss-reduce-initial": { + "node_modules/pac-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz", - "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "caniuse-api": "^3.0.0" + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">= 14" } }, - "node_modules/postcss-reduce-transforms": { - "version": "7.0.0", + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "debug": "^4.3.4" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">= 14" } }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.5", "dev": true, "license": "MIT", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "agent-base": "^7.0.2", + "debug": "4" }, "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/postcss-svgo": { + "node_modules/pac-resolver": { "version": "7.0.1", "dev": true, "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.3.2" + "degenerator": "^5.0.0", + "netmask": "^2.0.2" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">= 14" } }, - "node_modules/postcss-unique-selectors": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.2.tgz", - "integrity": "sha512-CjSam+7Vf8cflJQsHrMS0P2hmy9u0+n/P001kb5eAszLmhjMqrt/i5AqQuNFihhViwDvEAezqTmXqaYXL2ugMw==", + "node_modules/param-case": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.1.1" + "no-case": "^2.2.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" }, "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" + "node": ">=6" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "dev": true, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "dev": true + }, + "node_modules/parse-headers": { + "version": "2.0.5", "license": "MIT" }, - "node_modules/precond": { - "version": "0.2.3", + "node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", + "node_modules/parseurl": { + "version": "1.3.3", "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8" } }, - "node_modules/prettier": { - "version": "2.8.8", + "node_modules/pascal-case": { + "version": "2.0.1", + "dev": true, "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "dependencies": { + "camel-case": "^3.0.0", + "upper-case-first": "^1.1.0" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", + "node_modules/path-case": { + "version": "2.1.1", + "dev": true, "license": "MIT", "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" + "no-case": "^2.2.0" } }, - "node_modules/prettier-plugin-solidity": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.1.tgz", - "integrity": "sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==", + "node_modules/path-exists": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@solidity-parser/parser": "^0.18.0", - "semver": "^7.5.4" - }, "engines": { - "node": ">=16" - }, - "peerDependencies": { - "prettier": ">=2.3.0" + "node": ">=4" } }, - "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", - "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", - "dev": true - }, - "node_modules/prettier-plugin-solidity/node_modules/semver": { - "version": "7.6.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/pretty-bytes": { - "version": "6.1.1", - "dev": true, + "node_modules/path-key": { + "version": "3.1.1", "license": "MIT", "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/process": { - "version": "0.11.10", + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", "license": "MIT", "engines": { - "node": ">= 0.6.0" + "node": ">=8" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", + "node_modules/pathe": { + "version": "1.1.2", + "dev": true, "license": "MIT" }, - "node_modules/progress": { - "version": "2.0.3", + "node_modules/pathval": { + "version": "1.1.1", + "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=0.4.0" + "node": "*" } }, - "node_modules/promise": { - "version": "8.3.0", + "node_modules/pause-stream": { + "version": "0.0.11", "dev": true, - "license": "MIT", + "license": [ + "MIT", + "Apache2" + ], "dependencies": { - "asap": "~2.0.6" + "through": "~2.3" } }, - "node_modules/promise-to-callback": { - "version": "1.0.0", + "node_modules/pbkdf2": { + "version": "3.1.2", "license": "MIT", "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.12" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", + "node_modules/pegjs": { + "version": "0.10.0", + "dev": true, "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "bin": { + "pegjs": "bin/pegjs" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10" } }, - "node_modules/proxy-agent": { - "version": "6.4.0", - "dev": true, + "node_modules/performance-now": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - }, "engines": { - "node": ">= 14" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/proxy-agent/node_modules/agent-base": { - "version": "7.1.1", + "node_modules/pidtree": { + "version": "0.3.1", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" + "bin": { + "pidtree": "bin/pidtree.js" }, "engines": { - "node": ">= 14" + "node": ">=0.10" } }, - "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "dev": true, + "node_modules/pify": { + "version": "5.0.0", "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, "engines": { - "node": ">= 14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/prr": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/ps-tree": { + "node_modules/pkg-types": { "version": "1.2.0", "dev": true, "license": "MIT", "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" - }, - "engines": { - "node": ">= 0.10" + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" } }, - "node_modules/psl": { - "version": "1.9.0", - "license": "MIT" + "node_modules/pluralize": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/pump": { - "version": "3.0.0", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">= 0.4" } }, - "node_modules/punycode": { - "version": "2.3.1", + "node_modules/postcss": { + "version": "8.4.44", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >=14" } }, - "node_modules/qs": { - "version": "6.13.0", + "node_modules/postcss-calc": { + "version": "10.0.2", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "side-channel": "^1.0.6" + "postcss-selector-parser": "^6.1.2", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.6" + "node": "^18.12 || ^20.9 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.4.38" } }, - "node_modules/query-string": { - "version": "5.1.1", + "node_modules/postcss-colormin": { + "version": "7.0.2", + "dev": true, "license": "MIT", "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/postcss-convert-values": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/quick-lru": { - "version": "5.1.1", + "node_modules/postcss-discard-comments": { + "version": "7.0.2", + "dev": true, "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, "engines": { - "node": ">=10" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/randombytes": { - "version": "2.1.0", + "node_modules/postcss-discard-duplicates": { + "version": "7.0.1", + "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/range-parser": { - "version": "1.2.1", + "node_modules/postcss-discard-empty": { + "version": "7.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/raw-body": { - "version": "2.5.2", + "node_modules/postcss-discard-overridden": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.3", + "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.3" }, "engines": { - "node": ">= 0.8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/rc": { - "version": "1.2.8", + "node_modules/postcss-merge-rules": { + "version": "7.0.3", "dev": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "license": "MIT", "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.0", + "postcss-selector-parser": "^6.1.1" }, - "bin": { - "rc": "cli.js" + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", + "node_modules/postcss-minify-font-values": { + "version": "7.0.0", "dev": true, "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/read-pkg": { - "version": "3.0.0", + "node_modules/postcss-minify-gradients": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "colord": "^2.9.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=4" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", + "node_modules/postcss-minify-params": { + "version": "7.0.2", "dev": true, "license": "MIT", "dependencies": { - "pify": "^3.0.0" + "browserslist": "^4.23.3", + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=4" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", + "node_modules/postcss-minify-selectors": { + "version": "7.0.3", "dev": true, "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^6.1.1" + }, "engines": { - "node": ">=4" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/readable-stream": { - "version": "3.6.2", + "node_modules/postcss-nested": { + "version": "6.2.0", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": ">= 6" + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" } }, - "node_modules/readdirp": { - "version": "3.6.0", + "node_modules/postcss-normalize-charset": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=8.10.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/rechoir": { - "version": "0.6.2", + "node_modules/postcss-normalize-positions": { + "version": "7.0.0", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "resolve": "^1.1.6" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.10" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/recursive-readdir": { - "version": "2.2.3", + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "minimatch": "^3.0.5" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=6.0.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/recursive-readdir/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/postcss-normalize-string": { + "version": "7.0.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.0", "dev": true, - "license": "ISC", - "peer": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": "*" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/reduce-flatten": { - "version": "2.0.0", + "node_modules/postcss-normalize-unicode": { + "version": "7.0.2", "dev": true, "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=6" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", + "node_modules/postcss-normalize-url": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/regexpp": { - "version": "3.2.0", + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, "engines": { - "node": ">=8" + "node": "^18.12.0 || ^20.9.0 || >=22.0" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/registry-auth-token": { - "version": "3.3.2", + "node_modules/postcss-ordered-values": { + "version": "7.0.1", "dev": true, "license": "MIT", "dependencies": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "cssnano-utils": "^5.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/registry-url": { - "version": "3.1.0", + "node_modules/postcss-reduce-initial": { + "version": "7.0.2", "dev": true, "license": "MIT", "dependencies": { - "rc": "^1.0.1" + "browserslist": "^4.23.3", + "caniuse-api": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/req-cwd": { - "version": "2.0.0", + "node_modules/postcss-reduce-transforms": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "req-from": "^2.0.0" + "postcss-value-parser": "^4.2.0" }, "engines": { - "node": ">=4" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/req-from": { - "version": "2.0.0", + "node_modules/postcss-selector-parser": { + "version": "6.1.2", "dev": true, "license": "MIT", "dependencies": { - "resolve-from": "^3.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { "node": ">=4" } }, - "node_modules/req-from/node_modules/resolve-from": { - "version": "3.0.0", + "node_modules/postcss-svgo": { + "version": "7.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "license": "Apache-2.0", "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "postcss-value-parser": "^4.2.0", + "svgo": "^3.3.2" }, "engines": { - "node": ">= 6" + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", + "node_modules/postcss-unique-selectors": { + "version": "7.0.2", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "postcss-selector-parser": "^6.1.1" }, "engines": { - "node": ">= 0.12" + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "license": "BSD-3-Clause", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/precond": { + "version": "0.2.3", "engines": { - "node": ">=0.6" + "node": ">= 0.6" } }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", + "node_modules/prelude-ls": { + "version": "1.2.1", "license": "MIT", - "bin": { - "uuid": "bin/uuid" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, + "node_modules/prettier": { + "version": "2.8.8", "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/require-from-string": { - "version": "2.0.2", + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", + "node_modules/prettier-plugin-solidity": { + "version": "1.4.1", "dev": true, - "license": "ISC" - }, - "node_modules/resolve": { - "version": "1.17.0", "license": "MIT", "dependencies": { - "path-parse": "^1.0.6" + "@solidity-parser/parser": "^0.18.0", + "semver": "^7.5.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "prettier": ">=2.3.0" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", + "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "dev": true, "license": "MIT" }, - "node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", + "node_modules/prettier-plugin-solidity/node_modules/semver": { + "version": "7.6.3", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/responselike": { - "version": "2.0.1", + "node_modules/pretty-bytes": { + "version": "6.1.1", + "dev": true, "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" + "engines": { + "node": "^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", + "node_modules/process": { + "version": "0.11.10", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6.0" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/reusify": { - "version": "1.0.4", + "node_modules/promise": { + "version": "8.3.0", + "dev": true, "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "dependencies": { + "asap": "~2.0.6" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", + "node_modules/promise-to-callback": { + "version": "1.0.0", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ripemd160": { - "version": "2.0.2", + "node_modules/proxy-addr": { + "version": "2.0.7", "license": "MIT", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/rlp": { - "version": "2.2.7", - "license": "MPL-2.0", + "node_modules/proxy-agent": { + "version": "6.4.0", + "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^5.2.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" }, - "bin": { - "rlp": "bin/rlp" + "engines": { + "node": ">= 14" } }, - "node_modules/rollup": { - "version": "3.29.4", + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.1", "dev": true, "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" + "dependencies": { + "debug": "^4.3.4" }, "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">= 14" } }, - "node_modules/rollup-plugin-dts": { - "version": "6.1.1", + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.5", "dev": true, - "license": "LGPL-3.0-only", + "license": "MIT", "dependencies": { - "magic-string": "^0.30.10" + "agent-base": "^7.0.2", + "debug": "4" }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/Swatinem" - }, - "optionalDependencies": { - "@babel/code-frame": "^7.24.2" - }, - "peerDependencies": { - "rollup": "^3.29.4 || ^4", - "typescript": "^4.5 || ^5.0" + "node": ">= 14" } }, - "node_modules/rollup-plugin-dts/node_modules/@babel/code-frame": { - "version": "7.24.7", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/prr": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/ps-tree": { + "version": "1.2.0", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.10" } }, - "node_modules/rollup-plugin-esbuild": { - "version": "5.0.0", - "dev": true, + "node_modules/psl": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "debug": "^4.3.4", - "es-module-lexer": "^1.0.5", - "joycon": "^3.1.1", - "jsonc-parser": "^3.2.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" }, "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" + "node": ">=0.6" }, - "peerDependencies": { - "esbuild": ">=0.10.1", - "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/run-async": { - "version": "2.4.1", - "dev": true, + "node_modules/query-string": { + "version": "5.1.1", "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">=0.10.0" } }, - "node_modules/run-parallel": { - "version": "1.2.0", + "node_modules/queue-microtask": { + "version": "1.2.3", "funding": [ { "type": "github", @@ -14932,126 +13522,146 @@ "url": "https://feross.org/support" } ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "safe-buffer": "^5.1.0" } }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "license": "(MIT OR Apache-2.0)" + "node_modules/range-parser": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/rxjs": { - "version": "7.8.1", + "node_modules/raw-body": { + "version": "2.5.2", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", "dev": true, - "license": "Apache-2.0", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { - "tslib": "^2.1.0" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" } }, - "node_modules/safe-array-concat": { - "version": "1.1.2", + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" }, "engines": { - "node": ">=0.4" + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/safe-event-emitter": { - "version": "1.0.1", - "license": "ISC", + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", "dependencies": { - "events": "^3.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/safe-regex-test": { - "version": "1.0.3", + "node_modules/readdirp": { + "version": "3.6.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "picomatch": "^2.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.10.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sc-istanbul": { - "version": "0.4.6", + "node_modules/rechoir": { + "version": "0.6.2", "dev": true, - "license": "BSD-3-Clause", "peer": true, "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "resolve": "^1.1.6" }, - "bin": { - "istanbul": "lib/cli.js" + "engines": { + "node": ">= 0.10" } }, - "node_modules/sc-istanbul/node_modules/argparse": { - "version": "1.0.10", + "node_modules/recursive-readdir": { + "version": "2.2.3", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "sprintf-js": "~1.0.2" + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/sc-istanbul/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/sc-istanbul/node_modules/brace-expansion": { + "node_modules/recursive-readdir/node_modules/brace-expansion": { "version": "1.1.11", "dev": true, "license": "MIT", @@ -15061,2057 +13671,2064 @@ "concat-map": "0.0.1" } }, - "node_modules/sc-istanbul/node_modules/escodegen": { - "version": "1.8.1", + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "peer": true, "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" + "node": "*" } }, - "node_modules/sc-istanbul/node_modules/esprima": { - "version": "2.7.3", + "node_modules/reduce-flatten": { + "version": "2.0.0", "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/sc-istanbul/node_modules/estraverse": { - "version": "1.9.3", + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sc-istanbul/node_modules/glob": { - "version": "5.0.15", + "node_modules/regexpp": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/registry-auth-token": { + "version": "3.3.2", "dev": true, - "license": "ISC", - "peer": true, + "license": "MIT", "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, - "node_modules/sc-istanbul/node_modules/has-flag": { - "version": "1.0.0", + "node_modules/registry-url": { + "version": "3.1.0", "dev": true, "license": "MIT", - "peer": true, + "dependencies": { + "rc": "^1.0.1" + }, "engines": { "node": ">=0.10.0" } }, - "node_modules/sc-istanbul/node_modules/js-yaml": { - "version": "3.14.1", + "node_modules/req-cwd": { + "version": "2.0.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "req-from": "^2.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=4" } }, - "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", + "node_modules/req-from": { + "version": "2.0.0", "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "license": "MIT", + "dependencies": { + "resolve-from": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/sc-istanbul/node_modules/levn": { - "version": "0.3.0", + "node_modules/req-from/node_modules/resolve-from": { + "version": "3.0.0", "dev": true, "license": "MIT", - "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/request": { + "version": "2.88.2", + "license": "Apache-2.0", "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 6" } }, - "node_modules/sc-istanbul/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "peer": true, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, "engines": { - "node": "*" + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/sc-istanbul/node_modules/optionator": { - "version": "0.8.3", + "node_modules/require-main-filename": { + "version": "2.0.0", "dev": true, + "license": "ISC" + }, + "node_modules/resolve": { + "version": "1.17.0", "license": "MIT", - "peer": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "path-parse": "^1.0.6" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sc-istanbul/node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "peer": true, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">=4" } }, - "node_modules/sc-istanbul/node_modules/resolve": { - "version": "1.1.7", - "dev": true, + "node_modules/responselike": { + "version": "2.0.1", "license": "MIT", - "peer": true - }, - "node_modules/sc-istanbul/node_modules/source-map": { - "version": "0.2.0", - "dev": true, - "optional": true, - "peer": true, "dependencies": { - "amdefine": ">=0.0.4" + "lowercase-keys": "^2.0.0" }, - "engines": { - "node": ">=0.8.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sc-istanbul/node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause", - "peer": true + "node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/sc-istanbul/node_modules/supports-color": { - "version": "3.2.3", + "node_modules/restore-cursor": { + "version": "3.1.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "has-flag": "^1.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/sc-istanbul/node_modules/type-check": { - "version": "0.3.2", - "dev": true, + "node_modules/reusify": { + "version": "1.0.4", "license": "MIT", - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, "engines": { - "node": ">= 0.8.0" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/sc-istanbul/node_modules/which": { - "version": "1.3.1", - "dev": true, + "node_modules/rimraf": { + "version": "3.0.2", "license": "ISC", - "peer": true, "dependencies": { - "isexe": "^2.0.0" + "glob": "^7.1.3" }, "bin": { - "which": "bin/which" + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/scule": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "hasInstallScript": true, + "node_modules/ripemd160": { + "version": "2.0.2", "license": "MIT", "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/semaphore": { - "version": "1.1.0", - "engines": { - "node": ">=0.8.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/semver": { - "version": "6.3.1", - "license": "ISC", + "node_modules/rlp": { + "version": "2.2.7", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^5.2.0" + }, "bin": { - "semver": "bin/semver.js" + "rlp": "bin/rlp" } }, - "node_modules/send": { - "version": "0.18.0", + "node_modules/rollup": { + "version": "3.29.4", + "dev": true, "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", + "node_modules/rollup-plugin-dts": { + "version": "6.1.1", + "dev": true, + "license": "LGPL-3.0-only", "dependencies": { - "ms": "2.0.0" + "magic-string": "^0.30.10" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.24.2" + }, + "peerDependencies": { + "rollup": "^3.29.4 || ^4", + "typescript": "^4.5 || ^5.0" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/sentence-case": { - "version": "2.1.1", + "node_modules/rollup-plugin-dts/node_modules/@babel/code-frame": { + "version": "7.24.7", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "no-case": "^2.2.0", - "upper-case-first": "^1.1.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", + "node_modules/rollup-plugin-esbuild": { + "version": "5.0.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "randombytes": "^2.1.0" + "@rollup/pluginutils": "^5.0.1", + "debug": "^4.3.4", + "es-module-lexer": "^1.0.5", + "joycon": "^3.1.1", + "jsonc-parser": "^3.2.0" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.10.1", + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0" } }, - "node_modules/serve-static": { - "version": "1.15.0", + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.12.0" } }, - "node_modules/servify": { - "version": "0.1.12", + "node_modules/run-parallel": { + "version": "1.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" + "queue-microtask": "^1.2.2" } }, - "node_modules/set-blocking": { - "version": "2.0.0", + "node_modules/rustbn.js": { + "version": "0.2.0", + "license": "(MIT OR Apache-2.0)" + }, + "node_modules/rxjs": { + "version": "7.8.1", "dev": true, - "license": "ISC" + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } }, - "node_modules/set-function-length": { - "version": "1.2.2", + "node_modules/safe-array-concat": { + "version": "1.1.2", + "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", + "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": ">= 0.4" + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/set-function-name": { - "version": "2.0.2", + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-event-emitter": { + "version": "1.0.1", + "license": "ISC", + "dependencies": { + "events": "^3.0.0" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "define-data-property": "^1.1.4", + "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" + "is-regex": "^1.1.4" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", + "node_modules/safer-buffer": { + "version": "2.1.2", "license": "MIT" }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", + "node_modules/sc-istanbul": { + "version": "0.4.6", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, - "engines": { - "node": "*" + "bin": { + "istanbul": "lib/cli.js" } }, - "node_modules/shebang-command": { - "version": "2.0.0", + "node_modules/sc-istanbul/node_modules/argparse": { + "version": "1.0.10", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "sprintf-js": "~1.0.2" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/sc-istanbul/node_modules/async": { + "version": "1.5.2", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } + "peer": true }, - "node_modules/shell-quote": { - "version": "1.8.1", + "node_modules/sc-istanbul/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/shelljs": { - "version": "0.8.5", + "node_modules/sc-istanbul/node_modules/escodegen": { + "version": "1.8.1", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-2-Clause", "peer": true, "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" }, "bin": { - "shjs": "bin/shjs" + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4" + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" } }, - "node_modules/side-channel": { - "version": "1.0.6", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "node_modules/sc-istanbul/node_modules/esprima": { + "version": "2.7.3", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/signal-exit": { - "version": "3.0.7", + "node_modules/sc-istanbul/node_modules/estraverse": { + "version": "1.9.3", "dev": true, - "license": "ISC" + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } }, - "node_modules/simple-get": { - "version": "2.8.2", + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "3.3.0", + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "mimic-response": "^1.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/slash": { - "version": "3.0.0", - "license": "MIT", + "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", + "node_modules/sc-istanbul/node_modules/levn": { + "version": "0.3.0", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", + "node_modules/sc-istanbul/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "color-convert": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "*" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/sc-istanbul/node_modules/optionator": { + "version": "0.8.3", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "color-name": "~1.1.4" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" }, "engines": { - "node": ">=7.0.0" + "node": ">= 0.8.0" } }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/smart-buffer": { - "version": "4.2.0", + "node_modules/sc-istanbul/node_modules/prelude-ls": { + "version": "1.1.2", "dev": true, - "license": "MIT", + "peer": true, "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">= 0.8.0" } }, - "node_modules/snake-case": { - "version": "2.1.0", + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", "dev": true, "license": "MIT", - "dependencies": { - "no-case": "^2.2.0" - } + "peer": true }, - "node_modules/socks": { - "version": "2.8.3", + "node_modules/sc-istanbul/node_modules/source-map": { + "version": "0.2.0", "dev": true, - "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" + "amdefine": ">=0.0.4" }, "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" + "node": ">=0.8.0" } }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", + "node_modules/sc-istanbul/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" + "has-flag": "^1.0.0" }, "engines": { - "node": ">= 14" + "node": ">=0.8.0" } }, - "node_modules/socks-proxy-agent/node_modules/agent-base": { - "version": "7.1.1", + "node_modules/sc-istanbul/node_modules/type-check": { + "version": "0.3.2", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "debug": "^4.3.4" + "prelude-ls": "~1.1.2" }, "engines": { - "node": ">= 14" + "node": ">= 0.8.0" } }, - "node_modules/solc": { - "version": "0.8.26", + "node_modules/sc-istanbul/node_modules/which": { + "version": "1.3.1", "dev": true, - "license": "MIT", + "license": "ISC", + "peer": true, "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" + "isexe": "^2.0.0" }, "bin": { - "solcjs": "solc.js" - }, - "engines": { - "node": ">=10.0.0" + "which": "bin/which" } }, - "node_modules/solc/node_modules/commander": { - "version": "8.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } + "node_modules/scrypt-js": { + "version": "3.0.1", + "license": "MIT" }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.2", + "node_modules/scule": { + "version": "1.3.0", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } + "license": "MIT" }, - "node_modules/solhint": { - "version": "3.6.2", - "dev": true, + "node_modules/secp256k1": { + "version": "4.0.3", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "@solidity-parser/parser": "^0.16.0", - "ajv": "^6.12.6", - "antlr4": "^4.11.0", - "ast-parents": "^0.0.1", - "chalk": "^4.1.2", - "commander": "^10.0.0", - "cosmiconfig": "^8.0.0", - "fast-diff": "^1.2.0", - "glob": "^8.0.3", - "ignore": "^5.2.4", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "semver": "^7.5.2", - "strip-ansi": "^6.0.1", - "table": "^6.8.1", - "text-table": "^0.2.0" - }, - "bin": { - "solhint": "solhint.js" + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" }, - "optionalDependencies": { - "prettier": "^2.8.3" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/solhint/node_modules/@solidity-parser/parser": { - "version": "0.16.2", - "dev": true, - "license": "MIT", - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "node_modules/semaphore": { + "version": "1.1.0", + "engines": { + "node": ">=0.8.0" } }, - "node_modules/solhint/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/solhint/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/send": { + "version": "0.18.0", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/solhint/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "ms": "2.0.0" } }, - "node_modules/solhint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", "license": "MIT" }, - "node_modules/solhint/node_modules/glob": { - "version": "8.1.0", + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/sentence-case": { + "version": "2.1.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "no-case": "^2.2.0", + "upper-case-first": "^1.1.2" } }, - "node_modules/solhint/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/serialize-javascript": { + "version": "6.0.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" } }, - "node_modules/solhint/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, + "node_modules/serve-static": { + "version": "1.15.0", "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, "engines": { - "node": ">= 4" + "node": ">= 0.8.0" } }, - "node_modules/solhint/node_modules/minimatch": { - "version": "5.1.6", - "dev": true, - "license": "ISC", + "node_modules/servify": { + "version": "0.1.12", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/solhint/node_modules/semver": { - "version": "7.6.3", + "node_modules/set-blocking": { + "version": "2.0.0", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/solhint/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/set-function-name": { + "version": "2.0.2", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/solidity-bytes-utils": { - "version": "0.8.0", + "node_modules/set-immediate-shim": { + "version": "1.0.1", "license": "MIT", - "dependencies": { - "@truffle/hdwallet-provider": "latest" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/solidity-coverage": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.13.tgz", - "integrity": "sha512-RiBoI+kF94V3Rv0+iwOj3HQVSqNzA9qm/qDP1ZDXK5IX0Cvho1qiz8hAXTsAo6KOIUeP73jfscq0KlLqVxzGWA==", - "dev": true, - "license": "ISC", - "peer": true, + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.18.0", - "chalk": "^2.4.2", - "death": "^1.1.0", - "difflib": "^0.2.4", - "fs-extra": "^8.1.0", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.21", - "mocha": "^10.2.0", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.6" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" }, "bin": { - "solidity-coverage": "plugins/bin.js" - }, - "peerDependencies": { - "hardhat": "^2.11.0" + "sha.js": "bin.js" } }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/solidity-coverage/node_modules/fs-extra": { - "version": "8.1.0", + "node_modules/sha1": { + "version": "1.1.1", "dev": true, - "license": "MIT", - "peer": true, + "license": "BSD-3-Clause", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" }, "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/solidity-coverage/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "node": "*" } }, - "node_modules/solidity-coverage/node_modules/pify": { - "version": "4.0.1", - "dev": true, + "node_modules/shebang-command": { + "version": "2.0.0", "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/solidity-coverage/node_modules/semver": { - "version": "7.6.3", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/solidity-coverage/node_modules/universalify": { - "version": "0.1.2", - "dev": true, + "node_modules/shebang-regex": { + "version": "3.0.0", "license": "MIT", - "peer": true, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/source-map": { - "version": "0.6.1", + "node_modules/shell-quote": { + "version": "1.8.1", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/source-map-js": { - "version": "1.2.0", + "node_modules/shelljs": { + "version": "0.8.5", "dev": true, "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, + "node_modules/side-channel": { + "version": "1.0.6", "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", + "node_modules/signal-exit": { + "version": "3.0.7", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } + "license": "ISC" }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "dev": true, - "license": "CC-BY-3.0" + "node_modules/simple-concat": { + "version": "1.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, + "node_modules/simple-get": { + "version": "2.8.2", "license": "MIT", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", - "dev": true - }, - "node_modules/split": { - "version": "0.3.3", - "dev": true, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "3.3.0", "license": "MIT", "dependencies": { - "through": "2" + "mimic-response": "^1.0.0" }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, - "license": "BSD-3-Clause" + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/squirrelly": { - "version": "8.0.8", - "dev": true, + "node_modules/slice-ansi": { + "version": "4.0.0", "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/squirrellyjs/squirrelly?sponsor=1" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/sshpk": { - "version": "1.18.0", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", "license": "MIT", "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/sshpk/node_modules/jsbn": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "license": "Unlicense" - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "dev": true, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", "license": "MIT", "dependencies": { - "type-fest": "^0.7.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6" + "node": ">=7.0.0" } }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/smart-buffer": { + "version": "4.2.0", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/statuses": { - "version": "2.0.1", + "node_modules/snake-case": { + "version": "2.1.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "no-case": "^2.2.0" } }, - "node_modules/stdin-discarder": { - "version": "0.1.0", + "node_modules/socks": { + "version": "2.8.3", "dev": true, "license": "MIT", "dependencies": { - "bl": "^5.0.0" + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/stdin-discarder/node_modules/bl": { - "version": "5.1.0", + "node_modules/socks-proxy-agent": { + "version": "8.0.4", "dev": true, "license": "MIT", "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/stdin-discarder/node_modules/buffer": { - "version": "6.0.3", + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/stream-combiner": { - "version": "0.0.4", + "node_modules/solc": { + "version": "0.8.26", "dev": true, "license": "MIT", "dependencies": { - "duplexer": "~0.1.1" + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", + "node_modules/solc/node_modules/commander": { + "version": "8.3.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 12" } }, - "node_modules/string_decoder": { - "version": "1.3.0", + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solhint": { + "version": "3.6.2", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "@solidity-parser/parser": "^0.16.0", + "ajv": "^6.12.6", + "antlr4": "^4.11.0", + "ast-parents": "^0.0.1", + "chalk": "^4.1.2", + "commander": "^10.0.0", + "cosmiconfig": "^8.0.0", + "fast-diff": "^1.2.0", + "glob": "^8.0.3", + "ignore": "^5.2.4", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "semver": "^7.5.2", + "strip-ansi": "^6.0.1", + "table": "^6.8.1", + "text-table": "^0.2.0" + }, + "bin": { + "solhint": "solhint.js" + }, + "optionalDependencies": { + "prettier": "^2.8.3" } }, - "node_modules/string-format": { - "version": "2.0.0", + "node_modules/solhint/node_modules/@solidity-parser/parser": { + "version": "0.16.2", "dev": true, - "license": "WTFPL OR MIT" - }, - "node_modules/string-width": { - "version": "4.2.3", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/string.prototype.padend": { - "version": "3.1.6", + "node_modules/solhint/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", + "node_modules/solhint/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", + "node_modules/solhint/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", + "node_modules/solhint/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/solhint/node_modules/glob": { + "version": "8.1.0", + "dev": true, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/solhint/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", + "node_modules/solhint/node_modules/ignore": { + "version": "5.3.2", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", + "node_modules/solhint/node_modules/minimatch": { + "version": "5.1.6", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-hex-prefixed": "1.0.0" + "node_modules/solhint/node_modules/semver": { + "version": "7.6.3", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=10" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/solhint/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylehacks": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.3.tgz", - "integrity": "sha512-4DqtecvI/Nd+2BCvW9YEF6lhBN5UM50IJ1R3rnEAhBwbCKf4VehRf+uqvnVArnBayjYD/WtT3g0G/HSRxWfTRg==", - "dev": true, + "node_modules/solidity-bytes-utils": { + "version": "0.8.0", "license": "MIT", "dependencies": { - "browserslist": "^4.23.3", - "postcss-selector-parser": "^6.1.1" + "@truffle/hdwallet-provider": "latest" + } + }, + "node_modules/solidity-coverage": { + "version": "0.8.13", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.18.0", + "chalk": "^2.4.2", + "death": "^1.1.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" }, - "engines": { - "node": "^18.12.0 || ^20.9.0 || >=22.0" + "bin": { + "solidity-coverage": "plugins/bin.js" }, "peerDependencies": { - "postcss": "^8.4.31" + "hardhat": "^2.11.0" } }, - "node_modules/supports-color": { - "version": "5.5.0", + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^3.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=6 <7 || >=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", + "node_modules/solidity-coverage/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/svgo": { - "version": "3.3.2", + "node_modules/solidity-coverage/node_modules/pify": { + "version": "4.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.6.3", + "dev": true, + "license": "ISC", + "peer": true, "bin": { - "svgo": "bin/svgo" + "semver": "bin/semver.js" }, "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" + "node": ">=10" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", + "node_modules/solidity-coverage/node_modules/universalify": { + "version": "0.1.2", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">= 10" + "node": ">= 4.0.0" } }, - "node_modules/swap-case": { - "version": "1.1.2", + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", "dev": true, "license": "MIT", "dependencies": { - "lower-case": "^1.1.1", - "upper-case": "^1.1.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/swarm-js": { - "version": "0.1.42", - "license": "MIT", + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^11.8.5", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, "license": "MIT", "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/swarm-js/node_modules/cacheable-lookup": { - "version": "5.0.4", - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "dev": true, + "license": "CC0-1.0" }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", + "node_modules/split": { + "version": "0.3.3", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "through": "2" + }, + "engines": { + "node": "*" } }, - "node_modules/swarm-js/node_modules/got": { - "version": "11.8.6", + "node_modules/sprintf-js": { + "version": "1.1.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/squirrelly": { + "version": "8.0.8", + "dev": true, "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, "engines": { - "node": ">=10.19.0" + "node": ">=6.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "url": "https://github.com/squirrellyjs/squirrelly?sponsor=1" } }, - "node_modules/swarm-js/node_modules/http2-wrapper": { - "version": "1.0.3", + "node_modules/sshpk": { + "version": "1.18.0", "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" }, "engines": { - "node": ">=10.19.0" + "node": ">=0.10.0" } }, - "node_modules/swarm-js/node_modules/jsonfile": { - "version": "4.0.0", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "node_modules/sshpk/node_modules/jsbn": { + "version": "0.1.1", + "license": "MIT" }, - "node_modules/swarm-js/node_modules/lowercase-keys": { - "version": "2.0.0", + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "license": "Unlicense" + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "dev": true, "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "2.1.1", - "license": "MIT", + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, - "node_modules/swarm-js/node_modules/universalify": { - "version": "0.1.2", + "node_modules/statuses": { + "version": "2.0.1", "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">= 0.8" } }, - "node_modules/sync-request": { - "version": "6.1.0", + "node_modules/stdin-discarder": { + "version": "0.1.0", "dev": true, "license": "MIT", "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" + "bl": "^5.0.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sync-rpc": { - "version": "1.3.6", + "node_modules/stdin-discarder/node_modules/bl": { + "version": "5.1.0", "dev": true, "license": "MIT", "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/table": { - "version": "6.8.2", - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/table-layout": { - "version": "1.0.2", + "node_modules/stdin-discarder/node_modules/buffer": { + "version": "6.0.3", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", + "node_modules/stream-combiner": { + "version": "0.0.4", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "duplexer": "~0.1.1" } }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "dev": true, + "node_modules/strict-uri-encode": { + "version": "1.1.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.17.1", + "node_modules/string_decoder": { + "version": "1.3.0", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/tar": { - "version": "4.4.19", - "license": "ISC", - "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" - }, - "engines": { - "node": ">=4.5" + "safe-buffer": "~5.2.0" } }, - "node_modules/temp-dir": { + "node_modules/string-format": { "version": "2.0.0", "dev": true, + "license": "WTFPL OR MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/tempy": { - "version": "1.0.1", + "node_modules/string.prototype.padend": { + "version": "3.1.6", "dev": true, "license": "MIT", "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tempy/node_modules/del": { - "version": "6.1.1", + "node_modules/string.prototype.trim": { + "version": "1.2.9", "dev": true, "license": "MIT", "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tempy/node_modules/globby": { - "version": "11.1.0", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", "dev": true, "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tempy/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">= 4" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/text-table": { - "version": "0.2.0", - "license": "MIT" - }, - "node_modules/then-request": { - "version": "6.0.2", - "dev": true, + "node_modules/strip-ansi": { + "version": "6.0.1", "license": "MIT", "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", + "node_modules/strip-bom": { + "version": "3.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.1", + "node_modules/strip-final-newline": { + "version": "2.0.0", "dev": true, "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "is-hex-prefixed": "1.0.0" }, "engines": { - "node": ">= 0.12" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/timed-out": { - "version": "4.0.1", + "node_modules/strip-json-comments": { + "version": "3.1.1", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "dev": true, - "license": "MIT" - }, - "node_modules/tinycolor2": { - "version": "1.6.0", + "node_modules/stylehacks": { + "version": "7.0.3", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "node_modules/tinygradient": { - "version": "1.1.5", - "dev": true, + "node_modules/supports-color": { + "version": "5.5.0", "license": "MIT", "dependencies": { - "@types/tinycolor2": "^1.4.0", - "tinycolor2": "^1.0.0" + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/title-case": { - "version": "2.1.1", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.0.3" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tmp": { - "version": "0.0.33", + "node_modules/svgo": { + "version": "3.3.2", "dev": true, "license": "MIT", "dependencies": { - "os-tmpdir": "~1.0.2" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" }, "engines": { - "node": ">=0.6.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 10" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", + "node_modules/swap-case": { + "version": "1.1.2", + "dev": true, "license": "MIT", "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" + "lower-case": "^1.1.1", + "upper-case": "^1.1.1" } }, - "node_modules/toidentifier": { - "version": "1.0.1", + "node_modules/swarm-js": { + "version": "0.1.42", "license": "MIT", - "engines": { - "node": ">=0.6" + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "license": "BSD-3-Clause", + "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "license": "MIT", "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "defer-to-connect": "^2.0.0" }, "engines": { - "node": ">=0.8" + "node": ">=10" } }, - "node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", + "node_modules/swarm-js/node_modules/cacheable-lookup": { + "version": "5.0.4", "license": "MIT", "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" + "node": ">=10.6.0" } }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "dev": true, - "license": "ISC", + "node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, - "node_modules/ts-command-line-args/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/swarm-js/node_modules/got": { + "version": "11.8.6", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10.19.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/ts-command-line-args/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/swarm-js/node_modules/http2-wrapper": { + "version": "1.0.3", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=10.19.0" } }, - "node_modules/ts-command-line-args/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "node_modules/swarm-js/node_modules/jsonfile": { + "version": "4.0.0", "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ts-command-line-args/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" + "node_modules/swarm-js/node_modules/lowercase-keys": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/ts-command-line-args/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "2.1.1", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ts-command-line-args/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/swarm-js/node_modules/universalify": { + "version": "0.1.2", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/sync-request": { + "version": "6.1.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/ts-essentials": { - "version": "7.0.3", + "node_modules/sync-rpc": { + "version": "1.3.6", "dev": true, "license": "MIT", - "peerDependencies": { - "typescript": ">=3.7.0" + "dependencies": { + "get-port": "^3.1.0" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", + "node_modules/table": { + "version": "6.8.2", + "license": "BSD-3-Clause", "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "engines": { + "node": ">=10.0.0" } }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.12.1", + "node_modules/table-layout": { + "version": "1.0.2", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=8.0.0" } }, - "node_modules/ts-node/node_modules/diff": { + "node_modules/table-layout/node_modules/array-back": { "version": "4.0.2", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.3.1" + "node": ">=8" } }, - "node_modules/tsconfck": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.3.tgz", - "integrity": "sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==", + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", "dev": true, "license": "MIT", - "bin": { - "tsconfck": "bin/tsconfck.js" - }, "engines": { - "node": "^18 || >=20" - }, - "peerDependencies": { - "typescript": "^5.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=8" } }, - "node_modules/tsconfig": { - "resolved": "config/tsconfig", - "link": true - }, - "node_modules/tslib": { - "version": "2.4.0", - "license": "0BSD" - }, - "node_modules/tsort": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "license": "Apache-2.0", + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "engines": { - "node": "*" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/turbo": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.1.1.tgz", - "integrity": "sha512-u9gUDkmR9dFS8b5kAYqIETK4OnzsS4l2ragJ0+soSMHh6VEeNHjTfSjk1tKxCqLyziCrPogadxP680J+v6yGHw==", - "dev": true, - "bin": { - "turbo": "bin/turbo" + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/tar": { + "version": "4.4.19", + "license": "ISC", + "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" }, - "optionalDependencies": { - "turbo-darwin-64": "2.1.1", - "turbo-darwin-arm64": "2.1.1", - "turbo-linux-64": "2.1.1", - "turbo-linux-arm64": "2.1.1", - "turbo-windows-64": "2.1.1", - "turbo-windows-arm64": "2.1.1" + "engines": { + "node": ">=4.5" } }, - "node_modules/turbo-darwin-64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.1.1.tgz", - "integrity": "sha512-aYNuJpZlCoi0Htd79fl/2DywpewGKijdXeOfg9KzNuPVKzSMYlAXuAlNGh0MKjiOcyqxQGL7Mq9LFhwA0VpDpQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/turbo-darwin-arm64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-2.1.1.tgz", - "integrity": "sha512-tifJKD8yHY48rHXPMcM8o1jI/Jk2KCaXiNjTKvvy9Zsim61BZksNVLelIbrRoCGwAN6PUBZO2lGU5iL/TQJ5Pw==", - "cpu": [ - "arm64" - ], + "node_modules/temp-dir": { + "version": "2.0.0", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/turbo-linux-64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.1.1.tgz", - "integrity": "sha512-Js6d/bSQe9DuV9c7ITXYpsU/ADzFHABdz1UIHa7Oqjj9VOEbFeA9WpAn0c+mdJrVD+IXJFbbDZUjN7VYssmtcg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=8" + } }, - "node_modules/turbo-linux-arm64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.1.1.tgz", - "integrity": "sha512-LidzTCq0yvQ+N8w8Qub9FmhQ/mmEIeoqFi7DSupekEV2EjvE9jw/zYc9Pk67X+g7dHVfgOnvVzmrjChdxpFePw==", - "cpu": [ - "arm64" - ], + "node_modules/tempy": { + "version": "1.0.1", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT", + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/turbo-windows-64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.1.1.tgz", - "integrity": "sha512-GKc9ZywKwy4xLDhwXd6H07yzl0TB52HjXMrFLyHGhCVnf/w0oq4sLJv2sjbvuarPjsyx4xnCBJ3m3oyL2XmFtA==", - "cpu": [ - "x64" - ], + "node_modules/tempy/node_modules/del": { + "version": "6.1.1", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "license": "MIT", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/turbo-windows-arm64": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.1.1.tgz", - "integrity": "sha512-oFKkMj11KKUv3xSK9/fhAEQTxLUp1Ol1EOktwc32+SFtEU0uls7kosAz0b+qe8k3pJGEMFdDPdqoEjyJidbxtQ==", - "cpu": [ - "arm64" - ], + "node_modules/tempy/node_modules/globby": { + "version": "11.1.0", "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "license": "Unlicense" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "license": "Unlicense" - }, - "node_modules/type": { - "version": "2.7.3", - "license": "ISC" - }, - "node_modules/type-check": { - "version": "0.4.0", "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-detect": { - "version": "4.1.0", + "node_modules/tempy/node_modules/ignore": { + "version": "5.3.2", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/type-fest": { - "version": "0.20.2", + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -17120,291 +15737,308 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", + "node_modules/text-table": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/then-request": { + "version": "6.0.2", + "dev": true, "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" }, "engines": { - "node": ">= 0.6" + "node": ">=6.0.0" } }, - "node_modules/typechain": { - "version": "8.3.2", + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "dev": true, + "license": "MIT" + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.1", "dev": true, "license": "MIT", "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, - "peerDependencies": { - "typescript": ">=4.3.0" + "engines": { + "node": ">= 0.12" } }, - "node_modules/typechain/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/timed-out": { + "version": "4.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "dev": true, + "license": "MIT" + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/tinygradient": { + "version": "1.1.5", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@types/tinycolor2": "^1.4.0", + "tinycolor2": "^1.0.0" } }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", + "node_modules/title-case": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "no-case": "^2.2.0", + "upper-case": "^1.0.3" } }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", + "node_modules/tmp": { + "version": "0.0.33", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=0.6.0" } }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, + "node_modules/to-fast-properties": { + "version": "2.0.0", "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=4" } }, - "node_modules/typechain/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "is-number": "^7.0.0" }, "engines": { - "node": "*" + "node": ">=8.0" } }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, + "node_modules/toidentifier": { + "version": "1.0.1", "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">=10" + "node": ">=0.8" } }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "dev": true, + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", + "node_modules/ts-command-line-args": { + "version": "2.5.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "write-markdown": "dist/write-markdown.js" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", + "node_modules/ts-command-line-args/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", + "node_modules/ts-command-line-args/node_modules/chalk": { + "version": "4.1.2", "dev": true, "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/typed-array-length": { - "version": "1.0.6", + "node_modules/ts-command-line-args/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.0.0" } }, - "node_modules/typedarray": { - "version": "0.0.6", + "node_modules/ts-command-line-args/node_modules/color-name": { + "version": "1.1.4", "dev": true, "license": "MIT" }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", + "node_modules/ts-command-line-args/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, "engines": { - "node": ">=14.17" + "node": ">=8" } }, - "node_modules/typical": { - "version": "4.0.0", + "node_modules/ts-command-line-args/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/ufo": { - "version": "1.5.4", + "node_modules/ts-essentials": { + "version": "7.0.3", "dev": true, - "license": "MIT" + "license": "MIT", + "peerDependencies": { + "typescript": ">=3.7.0" + } }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "node_modules/ts-node": { + "version": "10.9.2", "dev": true, - "license": "BSD-2-Clause", - "optional": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, "bin": { - "uglifyjs": "bin/uglifyjs" + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, - "engines": { - "node": ">=0.8.0" + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/ultron": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", + "node_modules/ts-node/node_modules/acorn": { + "version": "8.12.1", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "bin": { + "acorn": "bin/acorn" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/unbuild": { - "version": "2.0.0", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfck": { + "version": "3.1.3", "dev": true, "license": "MIT", - "dependencies": { - "@rollup/plugin-alias": "^5.0.0", - "@rollup/plugin-commonjs": "^25.0.4", - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.2.1", - "@rollup/plugin-replace": "^5.0.2", - "@rollup/pluginutils": "^5.0.3", - "chalk": "^5.3.0", - "citty": "^0.1.2", - "consola": "^3.2.3", - "defu": "^6.1.2", - "esbuild": "^0.19.2", - "globby": "^13.2.2", - "hookable": "^5.5.3", - "jiti": "^1.19.3", - "magic-string": "^0.30.3", - "mkdist": "^1.3.0", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "pretty-bytes": "^6.1.1", - "rollup": "^3.28.1", - "rollup-plugin-dts": "^6.0.0", - "scule": "^1.0.0", - "untyped": "^1.4.0" - }, "bin": { - "unbuild": "dist/cli.mjs" + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" }, "peerDependencies": { - "typescript": "^5.1.6" + "typescript": "^5.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -17412,8 +16046,61 @@ } } }, - "node_modules/unbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", + "node_modules/tsconfig": { + "resolved": "config/tsconfig", + "link": true + }, + "node_modules/tslib": { + "version": "2.4.0", + "license": "0BSD" + }, + "node_modules/tsort": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/turbo": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-2.3.3.tgz", + "integrity": "sha512-DUHWQAcC8BTiUZDRzAYGvpSpGLiaOQPfYXlCieQbwUvmml/LRGIe3raKdrOPOoiX0DYlzxs2nH6BoWJoZrj8hA==", + "dev": true, + "bin": { + "turbo": "bin/turbo" + }, + "optionalDependencies": { + "turbo-darwin-64": "2.3.3", + "turbo-darwin-arm64": "2.3.3", + "turbo-linux-64": "2.3.3", + "turbo-linux-arm64": "2.3.3", + "turbo-windows-64": "2.3.3", + "turbo-windows-arm64": "2.3.3" + } + }, + "node_modules/turbo-darwin-64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.3.3.tgz", + "integrity": "sha512-bxX82xe6du/3rPmm4aCC5RdEilIN99VUld4HkFQuw+mvFg6darNBuQxyWSHZTtc25XgYjQrjsV05888w1grpaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/turbo-darwin-arm64": { + "version": "2.3.3", "cpu": [ "arm64" ], @@ -17422,335 +16109,384 @@ "optional": true, "os": [ "darwin" + ] + }, + "node_modules/turbo-linux-64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.3.3.tgz", + "integrity": "sha512-eHj9OIB0dFaP6BxB88jSuaCLsOQSYWBgmhy2ErCu6D2GG6xW3b6e2UWHl/1Ho9FsTg4uVgo4DB9wGsKa5erjUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-linux-arm64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.3.3.tgz", + "integrity": "sha512-NmDE/NjZoDj1UWBhMtOPmqFLEBKhzGS61KObfrDEbXvU3lekwHeoPvAMfcovzswzch+kN2DrtbNIlz+/rp8OCg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-windows-64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.3.3.tgz", + "integrity": "sha512-O2+BS4QqjK3dOERscXqv7N2GXNcqHr9hXumkMxDj/oGx9oCatIwnnwx34UmzodloSnJpgSqjl8iRWiY65SmYoQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/turbo-windows-arm64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.3.3.tgz", + "integrity": "sha512-dW4ZK1r6XLPNYLIKjC4o87HxYidtRRcBeo/hZ9Wng2XM/MqqYkAyzJXJGgRMsc0MMEN9z4+ZIfnSNBrA0b08ag==", + "cpu": [ + "arm64" ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "license": "Unlicense" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "license": "Unlicense" + }, + "node_modules/type": { + "version": "2.7.3", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, "engines": { - "node": ">=12" + "node": ">= 0.8.0" } }, - "node_modules/unbuild/node_modules/chalk": { - "version": "5.3.0", + "node_modules/type-detect": { + "version": "4.1.0", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unbuild/node_modules/esbuild": { - "version": "0.19.12", - "dev": true, - "hasInstallScript": true, + "node_modules/type-is": { + "version": "1.6.18", "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" + "node": ">= 0.6" } }, - "node_modules/unbuild/node_modules/globby": { - "version": "13.2.2", + "node_modules/typechain": { + "version": "8.3.2", "dev": true, "license": "MIT", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "typechain": "dist/cli/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "typescript": ">=4.3.0" } }, - "node_modules/unbuild/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/typechain/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/unbuild/node_modules/slash": { - "version": "4.0.0", + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/undici": { - "version": "5.28.4", + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@fastify/busboy": "^2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=14.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" - }, - "node_modules/unique-string": { - "version": "2.0.0", + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", "dependencies": { - "crypto-random-string": "^2.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/universalify": { - "version": "2.0.1", + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", "dev": true, "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=10" } }, - "node_modules/unpipe": { - "version": "1.0.0", + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 4.0.0" } }, - "node_modules/untyped": { - "version": "1.4.2", + "node_modules/typed-array-buffer": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/core": "^7.23.7", - "@babel/standalone": "^7.23.8", - "@babel/types": "^7.23.6", - "defu": "^6.1.4", - "jiti": "^1.21.0", - "mri": "^1.2.0", - "scule": "^1.2.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, - "bin": { - "untyped": "dist/cli.mjs" + "engines": { + "node": ">= 0.4" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "dev": true, "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, - "bin": { - "update-browserslist-db": "cli.js" + "engines": { + "node": ">= 0.4" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/update-check": { - "version": "1.5.4", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "registry-auth-token": "3.3.2", - "registry-url": "3.1.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/upper-case": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/upper-case-first": { - "version": "1.1.2", + "node_modules/typed-array-length": { + "version": "1.0.6", "dev": true, "license": "MIT", "dependencies": { - "upper-case": "^1.1.1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.3.0" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=6.14.2" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/utf8": { - "version": "3.0.0", + "node_modules/typedarray": { + "version": "0.0.6", + "dev": true, "license": "MIT" }, - "node_modules/util": { - "version": "0.12.5", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "is-typedarray": "^1.0.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", + "node_modules/typescript": { + "version": "5.5.4", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">= 0.4.0" + "node": ">=14.17" } }, - "node_modules/uuid": { - "version": "8.3.2", + "node_modules/typical": { + "version": "4.0.0", "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=8" } }, - "node_modules/v8-compile-cache": { - "version": "2.4.0", - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", + "node_modules/ufo": { + "version": "1.5.4", "dev": true, "license": "MIT" }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", + "node_modules/uglify-js": { + "version": "3.19.3", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=0.8.0" } }, - "node_modules/varint": { - "version": "5.0.2", + "node_modules/ultron": { + "version": "1.1.1", "license": "MIT" }, - "node_modules/vary": { - "version": "1.1.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "engines": [ - "node >=0.6.0" - ], + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/viem": { - "version": "2.21.32", + "node_modules/unbuild": { + "version": "2.0.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], "license": "MIT", "dependencies": { - "@adraffy/ens-normalize": "1.11.0", - "@noble/curves": "1.6.0", - "@noble/hashes": "1.5.0", - "@scure/bip32": "1.5.0", - "@scure/bip39": "1.4.0", - "abitype": "1.0.6", - "isows": "1.0.6", - "webauthn-p256": "0.0.10", - "ws": "8.18.0" + "@rollup/plugin-alias": "^5.0.0", + "@rollup/plugin-commonjs": "^25.0.4", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.2.1", + "@rollup/plugin-replace": "^5.0.2", + "@rollup/pluginutils": "^5.0.3", + "chalk": "^5.3.0", + "citty": "^0.1.2", + "consola": "^3.2.3", + "defu": "^6.1.2", + "esbuild": "^0.19.2", + "globby": "^13.2.2", + "hookable": "^5.5.3", + "jiti": "^1.19.3", + "magic-string": "^0.30.3", + "mkdist": "^1.3.0", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "pretty-bytes": "^6.1.1", + "rollup": "^3.28.1", + "rollup-plugin-dts": "^6.0.0", + "scule": "^1.0.0", + "untyped": "^1.4.0" + }, + "bin": { + "unbuild": "dist/cli.mjs" }, "peerDependencies": { - "typescript": ">=5.0.4" + "typescript": "^5.1.6" }, "peerDependenciesMeta": { "typescript": { @@ -17758,2323 +16494,2169 @@ } } }, - "node_modules/viem/node_modules/@adraffy/ens-normalize": { - "version": "1.11.0", + "node_modules/unbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/viem/node_modules/@noble/curves": { - "version": "1.6.0", + "node_modules/unbuild/node_modules/chalk": { + "version": "5.3.0", "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "1.5.0" - }, "engines": { - "node": "^14.21.3 || >=16" + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/viem/node_modules/@noble/hashes": { - "version": "1.5.0", + "node_modules/unbuild/node_modules/esbuild": { + "version": "0.19.12", "dev": true, + "hasInstallScript": true, "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">=12" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, - "node_modules/viem/node_modules/@scure/bip32": { - "version": "1.5.0", + "node_modules/unbuild/node_modules/globby": { + "version": "13.2.2", "dev": true, "license": "MIT", "dependencies": { - "@noble/curves": "~1.6.0", - "@noble/hashes": "~1.5.0", - "@scure/base": "~1.1.7" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://paulmillr.com/funding/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/viem/node_modules/@scure/bip39": { - "version": "1.4.0", + "node_modules/unbuild/node_modules/ignore": { + "version": "5.3.2", "dev": true, "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.5.0", - "@scure/base": "~1.1.8" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">= 4" } }, - "node_modules/viem/node_modules/ws": { - "version": "8.18.0", + "node_modules/unbuild/node_modules/slash": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "node": ">=12" }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vite": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz", - "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==", + "node_modules/undici": { + "version": "5.28.4", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.41", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" + "@fastify/busboy": "^2.0.0" }, "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">=14.0" } }, - "node_modules/vite-plugin-checker": { - "version": "0.5.6", + "node_modules/undici-types": { + "version": "6.19.8", + "license": "MIT" + }, + "node_modules/unique-string": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "ansi-escapes": "^4.3.0", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "commander": "^8.0.0", - "fast-glob": "^3.2.7", - "fs-extra": "^11.1.0", - "lodash.debounce": "^4.0.8", - "lodash.pick": "^4.4.0", - "npm-run-path": "^4.0.1", - "strip-ansi": "^6.0.0", - "tiny-invariant": "^1.1.0", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2" + "crypto-random-string": "^2.0.0" }, "engines": { - "node": ">=14.16" - }, - "peerDependencies": { - "eslint": ">=7", - "meow": "^9.0.0", - "optionator": "^0.9.1", - "stylelint": ">=13", - "typescript": "*", - "vite": ">=2.0.0", - "vls": "*", - "vti": "*", - "vue-tsc": "*" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "meow": { - "optional": true - }, - "optionator": { - "optional": true - }, - "stylelint": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vls": { - "optional": true - }, - "vti": { - "optional": true - }, - "vue-tsc": { - "optional": true - } + "node": ">=8" } }, - "node_modules/vite-plugin-checker/node_modules/@babel/code-frame": { - "version": "7.24.7", + "node_modules/universalify": { + "version": "2.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "node_modules/vite-plugin-checker/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/untyped": { + "version": "1.4.2", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "@babel/core": "^7.23.7", + "@babel/standalone": "^7.23.8", + "@babel/types": "^7.23.6", + "defu": "^6.1.4", + "jiti": "^1.21.0", + "mri": "^1.2.0", + "scule": "^1.2.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "bin": { + "untyped": "dist/cli.mjs" } }, - "node_modules/vite-plugin-checker/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, - "engines": { - "node": ">=10" + "bin": { + "update-browserslist-db": "cli.js" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/vite-plugin-checker/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/update-check": { + "version": "1.5.4", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0" } }, - "node_modules/vite-plugin-checker/node_modules/color-name": { - "version": "1.1.4", + "node_modules/upper-case": { + "version": "1.1.3", "dev": true, "license": "MIT" }, - "node_modules/vite-plugin-checker/node_modules/commander": { - "version": "8.3.0", + "node_modules/upper-case-first": { + "version": "1.1.2", "dev": true, "license": "MIT", - "engines": { - "node": ">= 12" + "dependencies": { + "upper-case": "^1.1.1" } }, - "node_modules/vite-plugin-checker/node_modules/fs-extra": { - "version": "11.2.0", - "dev": true, - "license": "MIT", + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" + "punycode": "^2.1.0" } }, - "node_modules/vite-plugin-checker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/url-set-query": { + "version": "1.0.0", + "license": "MIT" }, - "node_modules/vite-plugin-checker/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "node-gyp-build": "^4.3.0" }, "engines": { - "node": ">=8" + "node": ">=6.14.2" } }, - "node_modules/vite-tsconfig-paths": { - "version": "4.3.2", - "dev": true, + "node_modules/utf8": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/util": { + "version": "0.12.5", "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "tsconfck": "^3.0.3" - }, - "peerDependencies": { - "vite": "*" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, "engines": { - "node": ">=12" + "node": ">= 0.4.0" } }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.21.5", + "node_modules/uuid": { + "version": "8.3.2", "dev": true, - "hasInstallScript": true, "license": "MIT", - "peer": true, "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "uuid": "dist/bin/uuid" } }, - "node_modules/vite/node_modules/rollup": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", - "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", "dev": true, - "license": "MIT", - "peer": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.2", - "@rollup/rollup-android-arm64": "4.21.2", - "@rollup/rollup-darwin-arm64": "4.21.2", - "@rollup/rollup-darwin-x64": "4.21.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", - "@rollup/rollup-linux-arm-musleabihf": "4.21.2", - "@rollup/rollup-linux-arm64-gnu": "4.21.2", - "@rollup/rollup-linux-arm64-musl": "4.21.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", - "@rollup/rollup-linux-riscv64-gnu": "4.21.2", - "@rollup/rollup-linux-s390x-gnu": "4.21.2", - "@rollup/rollup-linux-x64-gnu": "4.21.2", - "@rollup/rollup-linux-x64-musl": "4.21.2", - "@rollup/rollup-win32-arm64-msvc": "4.21.2", - "@rollup/rollup-win32-ia32-msvc": "4.21.2", - "@rollup/rollup-win32-x64-msvc": "4.21.2", - "fsevents": "~2.3.2" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", + "node_modules/validate-npm-package-name": { + "version": "5.0.1", "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/varint": { + "version": "5.0.2", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", "license": "MIT", "engines": { - "node": ">=8.0.0 || >=10.0.0" + "node": ">= 0.8" } }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", - "dev": true, + "node_modules/verror": { + "version": "1.10.0", + "engines": [ + "node >=0.6.0" + ], "license": "MIT", "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - }, - "engines": { - "vscode": "^1.52.0" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/viem": { + "version": "2.21.32", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@adraffy/ens-normalize": "1.11.0", + "@noble/curves": "1.6.0", + "@noble/hashes": "1.5.0", + "@scure/bip32": "1.5.0", + "@scure/bip39": "1.4.0", + "abitype": "1.0.6", + "isows": "1.0.6", + "webauthn-p256": "0.0.10", + "ws": "8.18.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/viem/node_modules/@adraffy/ens-normalize": { + "version": "1.11.0", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@noble/hashes": "1.5.0" }, "engines": { - "node": "*" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/vscode-languageclient/node_modules/semver": { - "version": "7.6.3", + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.5.0", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/vscode-languageserver": { - "version": "7.0.0", + "node_modules/viem/node_modules/@scure/bip32": { + "version": "1.5.0", "dev": true, "license": "MIT", "dependencies": { - "vscode-languageserver-protocol": "3.16.0" + "@noble/curves": "~1.6.0", + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.7" }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", + "node_modules/viem/node_modules/@scure/bip39": { + "version": "1.4.0", "dev": true, "license": "MIT", "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.8" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-uri": { - "version": "3.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/wcwidth": { - "version": "1.0.1", + "node_modules/viem/node_modules/ws": { + "version": "8.18.0", "dev": true, "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", + "node_modules/vite": { + "version": "5.4.3", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">= 8" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/web3": { - "version": "1.10.4", + "node_modules/vite-plugin-checker": { + "version": "0.5.6", "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "web3-bzz": "1.10.4", - "web3-core": "1.10.4", - "web3-eth": "1.10.4", - "web3-eth-personal": "1.10.4", - "web3-net": "1.10.4", - "web3-shh": "1.10.4", - "web3-utils": "1.10.4" + "@babel/code-frame": "^7.12.13", + "ansi-escapes": "^4.3.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "commander": "^8.0.0", + "fast-glob": "^3.2.7", + "fs-extra": "^11.1.0", + "lodash.debounce": "^4.0.8", + "lodash.pick": "^4.4.0", + "npm-run-path": "^4.0.1", + "strip-ansi": "^6.0.0", + "tiny-invariant": "^1.1.0", + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2" }, "engines": { - "node": ">=8.0.0" + "node": ">=14.16" + }, + "peerDependencies": { + "eslint": ">=7", + "meow": "^9.0.0", + "optionator": "^0.9.1", + "stylelint": ">=13", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*", + "vue-tsc": "*" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } } }, - "node_modules/web3-bzz": { - "version": "1.10.4", + "node_modules/vite-plugin-checker/node_modules/@babel/code-frame": { + "version": "7.24.7", "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=6.9.0" } }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.55", - "dev": true, - "license": "MIT" - }, - "node_modules/web3-core": { - "version": "1.10.4", + "node_modules/vite-plugin-checker/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-requestmanager": "1.10.4", - "web3-utils": "1.10.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/web3-core-helpers": { - "version": "1.10.4", + "node_modules/vite-plugin-checker/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "web3-eth-iban": "1.10.4", - "web3-utils": "1.10.4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/web3-core-method": { - "version": "1.10.4", + "node_modules/vite-plugin-checker/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.10.4", - "web3-core-promievent": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-utils": "1.10.4" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8.0.0" + "node": ">=7.0.0" } }, - "node_modules/web3-core-promievent": { - "version": "1.10.4", + "node_modules/vite-plugin-checker/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } + "license": "MIT" }, - "node_modules/web3-core-requestmanager": { - "version": "1.10.4", + "node_modules/vite-plugin-checker/node_modules/commander": { + "version": "8.3.0", "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "util": "^0.12.5", - "web3-core-helpers": "1.10.4", - "web3-providers-http": "1.10.4", - "web3-providers-ipc": "1.10.4", - "web3-providers-ws": "1.10.4" - }, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">= 12" } }, - "node_modules/web3-core-subscriptions": { - "version": "1.10.4", + "node_modules/vite-plugin-checker/node_modules/fs-extra": { + "version": "11.2.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.10.4" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=14.14" } }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.55", + "node_modules/vite-plugin-checker/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/web3-eth": { - "version": "1.10.4", + "node_modules/vite-plugin-checker/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-eth-abi": "1.10.4", - "web3-eth-accounts": "1.10.4", - "web3-eth-contract": "1.10.4", - "web3-eth-ens": "1.10.4", - "web3-eth-iban": "1.10.4", - "web3-eth-personal": "1.10.4", - "web3-net": "1.10.4", - "web3-utils": "1.10.4" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-eth-abi": { - "version": "1.10.4", + "node_modules/vite-tsconfig-paths": { + "version": "4.3.2", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.10.4" + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.3" }, - "engines": { - "node": ">=8.0.0" + "peerDependencies": { + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } } }, - "node_modules/web3-eth-accounts": { - "version": "1.10.4", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "cpu": [ + "arm64" + ], "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "@ethereumjs/common": "2.6.5", - "@ethereumjs/tx": "3.5.2", - "@ethereumjs/util": "^8.1.0", - "eth-lib": "0.2.8", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-utils": "1.10.4" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": ">=8.0.0" + "node": ">=12" } }, - "node_modules/web3-eth-accounts/node_modules/bn.js": { - "version": "4.12.0", + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", "dev": true, - "license": "MIT" + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", + "node_modules/vite/node_modules/rollup": { + "version": "4.21.2", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", + "fsevents": "~2.3.2" } }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "9.0.1", + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/web3-eth-contract": { - "version": "1.10.4", - "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-promievent": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-eth-abi": "1.10.4", - "web3-utils": "1.10.4" - }, "engines": { - "node": ">=8.0.0" + "node": ">=8.0.0 || >=10.0.0" } }, - "node_modules/web3-eth-ens": { - "version": "1.10.4", + "node_modules/vscode-languageclient": { + "version": "7.0.0", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-promievent": "1.10.4", - "web3-eth-abi": "1.10.4", - "web3-eth-contract": "1.10.4", - "web3-utils": "1.10.4" + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" }, "engines": { - "node": ">=8.0.0" + "vscode": "^1.52.0" } }, - "node_modules/web3-eth-iban": { - "version": "1.10.4", + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "license": "LGPL-3.0", + "license": "MIT", "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.10.4" - }, - "engines": { - "node": ">=8.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/web3-eth-personal": { - "version": "1.10.4", + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "LGPL-3.0", + "license": "ISC", "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.10.4", - "web3-core-helpers": "1.10.4", - "web3-core-method": "1.10.4", - "web3-net": "1.10.4", - "web3-utils": "1.10.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8.0.0" + "node": "*" } }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.55", - "dev": true, - "license": "MIT" - }, - "node_modules/web3-net": { - "version": "1.10.4", + "node_modules/vscode-languageclient/node_modules/semver": { + "version": "7.6.3", "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "web3-core": "1.10.4", - "web3-core-method": "1.10.4", - "web3-utils": "1.10.4" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/web3-provider-engine": { - "version": "16.0.3", + "node_modules/vscode-languageserver": { + "version": "7.0.0", + "dev": true, "license": "MIT", "dependencies": { - "@ethereumjs/tx": "^3.3.0", - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^4.4.2", - "eth-json-rpc-filters": "^4.2.1", - "eth-json-rpc-infura": "^5.1.0", - "eth-json-rpc-middleware": "^6.0.0", - "eth-rpc-errors": "^3.0.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" + "vscode-languageserver-protocol": "3.16.0" }, - "engines": { - "node": ">=12.0.0" + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" } }, - "node_modules/web3-provider-engine/node_modules/async": { - "version": "2.6.4", + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "dev": true, "license": "MIT", "dependencies": { - "lodash": "^4.17.14" + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" } }, - "node_modules/web3-provider-engine/node_modules/bn.js": { - "version": "4.12.0", + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "dev": true, "license": "MIT" }, - "node_modules/web3-provider-engine/node_modules/clone": { - "version": "2.1.2", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/web3-provider-engine/node_modules/ethereumjs-util": { - "version": "5.2.1", - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "dev": true, + "license": "MIT" }, - "node_modules/web3-provider-engine/node_modules/isarray": { - "version": "1.0.0", + "node_modules/vscode-uri": { + "version": "3.0.8", + "dev": true, "license": "MIT" }, - "node_modules/web3-provider-engine/node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/wcwidth": { + "version": "1.0.1", + "dev": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "defaults": "^1.0.3" } }, - "node_modules/web3-provider-engine/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/web3-provider-engine/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">= 8" } }, - "node_modules/web3-provider-engine/node_modules/ws": { - "version": "5.2.4", - "license": "MIT", + "node_modules/web3": { + "version": "1.10.4", + "dev": true, + "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { - "async-limiter": "~1.0.0" + "web3-bzz": "1.10.4", + "web3-core": "1.10.4", + "web3-eth": "1.10.4", + "web3-eth-personal": "1.10.4", + "web3-net": "1.10.4", + "web3-shh": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/web3-providers-http": { + "node_modules/web3-bzz": { "version": "1.10.4", "dev": true, + "hasInstallScript": true, "license": "LGPL-3.0", "dependencies": { - "abortcontroller-polyfill": "^1.7.5", - "cross-fetch": "^4.0.0", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.10.4" + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-providers-http/node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.55", + "dev": true, + "license": "MIT" + }, + "node_modules/web3-core": { + "version": "1.10.4", "dev": true, + "license": "LGPL-3.0", "dependencies": { - "node-fetch": "^2.6.12" + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-requestmanager": "1.10.4", + "web3-utils": "1.10.4" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/web3-providers-ipc": { + "node_modules/web3-core-helpers": { "version": "1.10.4", "dev": true, "license": "LGPL-3.0", "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.10.4" + "web3-eth-iban": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-providers-ws": { + "node_modules/web3-core-method": { "version": "1.10.4", "dev": true, "license": "LGPL-3.0", "dependencies": { - "eventemitter3": "4.0.4", + "@ethersproject/transactions": "^5.6.2", "web3-core-helpers": "1.10.4", - "websocket": "^1.0.32" + "web3-core-promievent": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-shh": { + "node_modules/web3-core-promievent": { "version": "1.10.4", "dev": true, - "hasInstallScript": true, "license": "LGPL-3.0", "dependencies": { - "web3-core": "1.10.4", - "web3-core-method": "1.10.4", - "web3-core-subscriptions": "1.10.4", - "web3-net": "1.10.4" + "eventemitter3": "4.0.4" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-utils": { + "node_modules/web3-core-requestmanager": { "version": "1.10.4", "dev": true, "license": "LGPL-3.0", "dependencies": { - "@ethereumjs/util": "^8.1.0", - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereum-cryptography": "^2.1.2", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "util": "^0.12.5", + "web3-core-helpers": "1.10.4", + "web3-providers-http": "1.10.4", + "web3-providers-ipc": "1.10.4", + "web3-providers-ws": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.4.2", + "node_modules/web3-core-subscriptions": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "@noble/hashes": "1.4.0" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.4" }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.4.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "1.4.2", - "@noble/hashes": "1.4.0", - "@scure/bip32": "1.4.0", - "@scure/bip39": "1.3.0" + "node": ">=8.0.0" } }, - "node_modules/webauthn-p256": { - "version": "0.0.10", + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@noble/curves": "^1.4.0", - "@noble/hashes": "^1.4.0" - } + "license": "MIT" }, - "node_modules/webauthn-p256/node_modules/@noble/curves": { - "version": "1.6.0", + "node_modules/web3-eth": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "@noble/hashes": "1.5.0" + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-eth-abi": "1.10.4", + "web3-eth-accounts": "1.10.4", + "web3-eth-contract": "1.10.4", + "web3-eth-ens": "1.10.4", + "web3-eth-iban": "1.10.4", + "web3-eth-personal": "1.10.4", + "web3-net": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=8.0.0" } }, - "node_modules/webauthn-p256/node_modules/@noble/hashes": { - "version": "1.5.0", + "node_modules/web3-eth-abi": { + "version": "1.10.4", "dev": true, - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" + "license": "LGPL-3.0", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.10.4" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/webpod": { - "version": "0.0.2", + "node_modules/web3-eth-accounts": { + "version": "1.10.4", "dev": true, - "license": "MIT", - "bin": { - "webpod": "dist/index.js" - } - }, - "node_modules/websocket": { - "version": "1.0.35", - "license": "Apache-2.0", + "license": "LGPL-3.0", "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.63", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" + "@ethereumjs/common": "2.6.5", + "@ethereumjs/tx": "3.5.2", + "@ethereumjs/util": "^8.1.0", + "eth-lib": "0.2.8", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node": ">=8.0.0" } }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/whatwg-fetch": { - "version": "2.0.4", + "node_modules/web3-eth-accounts/node_modules/bn.js": { + "version": "4.12.0", + "dev": true, "license": "MIT" }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", "dev": true, "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" } }, - "node_modules/which-module": { - "version": "2.0.1", + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "9.0.1", "dev": true, - "license": "ISC" - }, - "node_modules/which-typed-array": { - "version": "1.1.15", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/widest-line": { - "version": "3.1.0", + "node_modules/web3-eth-contract": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "license": "MIT", + "@types/bn.js": "^5.1.1", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-promievent": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-eth-abi": "1.10.4", + "web3-utils": "1.10.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", + "node_modules/web3-eth-ens": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-promievent": "1.10.4", + "web3-eth-abi": "1.10.4", + "web3-eth-contract": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", + "node_modules/web3-eth-iban": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.10.4" + }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/workerpool": { - "version": "6.5.1", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", + "node_modules/web3-eth-personal": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@types/node": "^12.12.6", + "web3-core": "1.10.4", + "web3-core-helpers": "1.10.4", + "web3-core-method": "1.10.4", + "web3-net": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8.0.0" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.55", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/web3-net": { + "version": "1.10.4", + "dev": true, + "license": "LGPL-3.0", "dependencies": { - "color-convert": "^2.0.1" + "web3-core": "1.10.4", + "web3-core-method": "1.10.4", + "web3-utils": "1.10.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=8.0.0" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "node_modules/web3-provider-engine": { + "version": "16.0.3", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@ethereumjs/tx": "^3.3.0", + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^4.4.2", + "eth-json-rpc-filters": "^4.2.1", + "eth-json-rpc-infura": "^5.1.0", + "eth-json-rpc-middleware": "^6.0.0", + "eth-rpc-errors": "^3.0.0", + "eth-sig-util": "^1.4.2", + "ethereumjs-block": "^1.2.2", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=12.0.0" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/ws": { - "version": "3.3.3", + "node_modules/web3-provider-engine/node_modules/async": { + "version": "2.6.4", "license": "MIT", "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "lodash": "^4.17.14" } }, - "node_modules/ws/node_modules/safe-buffer": { - "version": "5.1.2", + "node_modules/web3-provider-engine/node_modules/bn.js": { + "version": "4.12.0", "license": "MIT" }, - "node_modules/xhr": { - "version": "2.6.0", + "node_modules/web3-provider-engine/node_modules/clone": { + "version": "2.1.2", "license": "MIT", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "engines": { + "node": ">=0.8" } }, - "node_modules/xhr-request": { - "version": "1.1.0", + "node_modules/web3-provider-engine/node_modules/cross-fetch": { + "version": "2.2.6", "license": "MIT", "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" + "node-fetch": "^2.6.7", + "whatwg-fetch": "^2.0.4" } }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "license": "MIT", + "node_modules/web3-provider-engine/node_modules/ethereumjs-util": { + "version": "5.2.1", + "license": "MPL-2.0", "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/y18n": { - "version": "4.0.3", - "dev": true, - "license": "ISC" + "node_modules/web3-provider-engine/node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" }, - "node_modules/yaeti": { - "version": "0.0.6", + "node_modules/web3-provider-engine/node_modules/readable-stream": { + "version": "2.3.8", "license": "MIT", - "engines": { - "node": ">=0.10.32" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.5.1", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } + "node_modules/web3-provider-engine/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" }, - "node_modules/yargs": { - "version": "15.4.1", - "dev": true, + "node_modules/web3-provider-engine/node_modules/string_decoder": { + "version": "1.1.1", "license": "MIT", "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.1.0" } }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" + "node_modules/web3-provider-engine/node_modules/ws": { + "version": "5.2.4", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", + "node_modules/web3-providers-http": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" + "abortcontroller-polyfill": "^1.7.5", + "cross-fetch": "^4.0.0", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.10.4" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", + "node_modules/web3-providers-ipc": { + "version": "1.10.4", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "license": "LGPL-3.0", + "dependencies": { + "oboe": "2.1.5", + "web3-core-helpers": "1.10.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", + "node_modules/web3-providers-ws": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.10.4", + "websocket": "^1.0.32" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/web3-shh": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "hasInstallScript": true, + "license": "LGPL-3.0", "dependencies": { - "p-locate": "^4.1.0" + "web3-core": "1.10.4", + "web3-core-method": "1.10.4", + "web3-core-subscriptions": "1.10.4", + "web3-net": "1.10.4" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/web3-utils": { + "version": "1.10.4", "dev": true, - "license": "MIT", + "license": "LGPL-3.0", "dependencies": { - "p-try": "^2.0.0" + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.0.0" } }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.4.2", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "@noble/hashes": "1.4.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/yargs/node_modules/p-try": { - "version": "2.2.0", + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.4.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/yargs/node_modules/path-exists": { - "version": "4.0.0", + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.2.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", + "node_modules/webauthn-p256": { + "version": "0.0.10", "dev": true, - "license": "ISC", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" + "@noble/curves": "^1.4.0", + "@noble/hashes": "^1.4.0" } }, - "node_modules/yn": { - "version": "3.1.1", + "node_modules/webauthn-p256/node_modules/@noble/curves": { + "version": "1.6.0", "dev": true, "license": "MIT", + "dependencies": { + "@noble/hashes": "1.5.0" + }, "engines": { - "node": ">=6" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", + "node_modules/webauthn-p256/node_modules/@noble/hashes": { + "version": "1.5.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": "^14.21.3 || >=16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/zksync-ethers": { - "version": "5.9.2", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" + }, + "node_modules/webpod": { + "version": "0.0.2", "dev": true, "license": "MIT", + "bin": { + "webpod": "dist/index.js" + } + }, + "node_modules/websocket": { + "version": "1.0.35", + "license": "Apache-2.0", "dependencies": { - "ethers": "~5.7.0" + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "ethers": "~5.7.0" + "node": ">=4.0.0" } }, - "node_modules/zksync-ethers/node_modules/ethers": { - "version": "5.7.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", "license": "MIT", "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" + "ms": "2.0.0" } }, - "node_modules/zod": { - "version": "3.23.8", - "dev": true, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/whatwg-fetch": { + "version": "2.0.4", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/zx": { - "version": "7.2.3", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/fs-extra": "^11.0.1", - "@types/minimist": "^1.2.2", - "@types/node": "^18.16.3", - "@types/ps-tree": "^1.1.2", - "@types/which": "^3.0.0", - "chalk": "^5.2.0", - "fs-extra": "^11.1.1", - "fx": "*", - "globby": "^13.1.4", - "minimist": "^1.2.8", - "node-fetch": "3.3.1", - "ps-tree": "^1.2.0", - "webpod": "^0", - "which": "^3.0.0", - "yaml": "^2.2.2" + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" }, "bin": { - "zx": "build/cli.js" + "node-which": "bin/node-which" }, "engines": { - "node": ">= 16.0.0" + "node": ">= 8" } }, - "node_modules/zx/node_modules/@types/node": { - "version": "18.19.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.48.tgz", - "integrity": "sha512-7WevbG4ekUcRQSZzOwxWgi5dZmTak7FaxXDoW7xVxPBmKx1rTzfmRLkeCgJzcbBnOV2dkhAPc8cCeT6agocpjg==", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/zx/node_modules/chalk": { - "version": "5.3.0", + "node_modules/which-module": { + "version": "2.0.1", "dev": true, + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.15", "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/zx/node_modules/data-uri-to-buffer": { - "version": "4.0.1", + "node_modules/widest-line": { + "version": "3.1.0", "dev": true, "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, "engines": { - "node": ">= 12" + "node": ">=8" } }, - "node_modules/zx/node_modules/fs-extra": { - "version": "11.2.0", - "dev": true, + "node_modules/word-wrap": { + "version": "1.2.5", "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=14.14" + "node": ">=0.10.0" } }, - "node_modules/zx/node_modules/globby": { - "version": "13.2.2", + "node_modules/wordwrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", "dev": true, "license": "MIT", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.0.0" } }, - "node_modules/zx/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/zx/node_modules/node-fetch": { - "version": "3.3.1", + "node_modules/workerpool": { + "version": "6.5.1", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/zx/node_modules/slash": { - "version": "4.0.0", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/zx/node_modules/undici-types": { - "version": "5.26.5", - "dev": true, - "license": "MIT" - }, - "node_modules/zx/node_modules/which": { - "version": "3.0.1", + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "packages/lsp-smart-contracts": { - "name": "@lukso/lsp-smart-contracts", - "version": "0.15.0", - "license": "Apache-2.0", - "dependencies": { - "@lukso/lsp0-contracts": "~0.15.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp10-contracts": "~0.15.0", - "@lukso/lsp12-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp16-contracts": "~0.15.0", - "@lukso/lsp17-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp1delegate-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@lukso/lsp23-contracts": "~0.15.0", - "@lukso/lsp25-contracts": "~0.15.0", - "@lukso/lsp26-contracts": "~0.15.0", - "@lukso/lsp3-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", - "@lukso/lsp5-contracts": "~0.15.0", - "@lukso/lsp6-contracts": "~0.15.0", - "@lukso/lsp7-contracts": "~0.15.0", - "@lukso/lsp8-contracts": "~0.15.0", - "@lukso/lsp9-contracts": "~0.15.0", - "@lukso/universalprofile-contracts": "~0.15.0" - } - }, - "packages/lsp0-contracts": { - "name": "@lukso/lsp0-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp0-contracts/-/lsp0-contracts-0.15.0.tgz", - "integrity": "sha512-dKQu9juDJNxKdJMHkF3wOfjC/VZZW+RonQ5hSw9kBhLAhyFd6SVYU3VSUOYG3G3bLDAE9We+DeONc0N/j4zjIQ==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/lsp1-contracts": { - "name": "@lukso/lsp1-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", - "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", - "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/lsp10-contracts": { - "name": "@lukso/lsp10-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp10-contracts/-/lsp10-contracts-0.15.0.tgz", - "integrity": "sha512-LXyOOCD43sHtQxyp98utUwxaU+r2MA8TvqXBibxjHxD20/L7vYGSxHqDX493/zUtfCUIMUELuj6a1+NGscbBTw==", - "dependencies": { - "@erc725/smart-contracts": "^6.0.0", - "@lukso/lsp2-contracts": "~0.15.0" - } - }, - "packages/lsp10-contracts/node_modules/@erc725/smart-contracts": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-6.0.0.tgz", - "integrity": "sha512-6okutGGL9xbg/MSgAof2FU1UcSNE/z3p9TORlROVGaM3gi1A6FQQ7fDqtBYkPtvHureX8yS9gP7xPt3PRbP43Q==", - "dependencies": { - "@openzeppelin/contracts": "^4.9.3", - "@openzeppelin/contracts-upgradeable": "^4.9.3", - "solidity-bytes-utils": "0.8.0" - } - }, - "packages/lsp-smart-contracts/node_modules/@lukso/lsp12-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp12-contracts/-/lsp12-contracts-0.15.0.tgz", - "integrity": "sha512-fSq8syWvRkHb0hOtVubJ3YyqLoZ0IDGT+FC3W79nKCP5OYpZt1VwWwUsqQlBUImrrtTaP9Vdin9aNGD9umtCqA==", - "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0" - } - }, - "packages/lsp14-contracts": { - "name": "@lukso/lsp14-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", - "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0" - } - }, - "packages/lsp16-contracts": { - "name": "@lukso/lsp16-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp16-contracts/-/lsp16-contracts-0.15.0.tgz", - "integrity": "sha512-zt58Uq4nWoGRMlSvZYYKM+YWmqXaWqDymiB9+v42kgNFvdpaK2bnt6zhoZOCd+D5YyQ5X7koooxR05amyxLe2w==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.2", - "@openzeppelin/contracts-upgradeable": "^4.9.2" - } - }, - "packages/lsp17-contracts": { - "name": "@lukso/lsp17-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp17-contracts/-/lsp17-contracts-0.15.0.tgz", - "integrity": "sha512-lEMayqU5SR2ysgs08cqzsW50DrJrTtsjoIyqvctaIMZF9DSEHRTn1yh8ePzNNcNr3tQcDmaxwtPAuYD469tXHQ==", - "dependencies": { - "@account-abstraction/contracts": "^0.6.0", - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@lukso/lsp6-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/lsp17contractextension-contracts": { - "name": "@lukso/lsp17contractextension-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", - "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "node": ">=7.0.0" } }, - "packages/lsp1delegate-contracts": { - "name": "@lukso/lsp1delegate-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp1delegate-contracts/-/lsp1delegate-contracts-0.15.0.tgz", - "integrity": "sha512-FuBzBsJZdbtHBF1q6IsCpd94xD/Ce7kHrZASWjSWIU6lzqEWpJcItZ95EkRPmJjAqYlkwzz3ry0wfY8nAIbJrA==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp10-contracts": "~0.15.0", - "@lukso/lsp5-contracts": "~0.15.0", - "@lukso/lsp7-contracts": "~0.15.0", - "@lukso/lsp8-contracts": "~0.15.0", - "@lukso/lsp9-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "packages/lsp2-contracts": { - "name": "@lukso/lsp2-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", - "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/ws": { + "version": "3.3.3", + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, - "packages/lsp20-contracts": { - "name": "@lukso/lsp20-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", - "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" + "node_modules/ws/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" }, - "packages/lsp23-contracts": { - "name": "@lukso/lsp23-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp23-contracts/-/lsp23-contracts-0.15.0.tgz", - "integrity": "sha512-IQqvK19PyLEAb/6gscLqn1MVy9zKOflQCVNIQmjgMhv6d89FvItwfvLk81aycSUELX5XANbzK14dM0x/ydEQAg==", + "node_modules/xhr": { + "version": "2.6.0", + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/universalprofile-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" } }, - "packages/lsp25-contracts": { - "name": "@lukso/lsp25-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp25-contracts/-/lsp25-contracts-0.15.0.tgz", - "integrity": "sha512-GYgnosvrWhNbkZ1lpZ9InPKF8dB1FGb3N0FvpV98ZIG28wKGdBkKnT54ot2bMwmW6oeRuz7/8hAGbcpCKVa/WA==", + "node_modules/xhr-request": { + "version": "1.1.0", + "license": "MIT", "dependencies": { - "@openzeppelin/contracts": "^4.9.3" + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" } }, - "packages/lsp26-contracts": { - "name": "@lukso/lsp26-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp3-contracts/-/lsp3-contracts-0.15.0.tgz", - "integrity": "sha512-GgL9Ys9HvCuRCJ2/XB6abAwHBCE+LYMPY5vcHnZ67U7cgVgy9sc7z9VDTcBwZygsKUMuNrrnph4MC0G90rALjg==", + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "license": "MIT", "dependencies": { - "@lukso/lsp0-contracts": "~0.15.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "xhr-request": "^1.1.0" } }, - "packages/lsp3-contracts": { - "name": "@lukso/lsp3-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp4-contracts/-/lsp4-contracts-0.15.0.tgz", - "integrity": "sha512-M85S5DN3hqHTIfTs7Cs1dqM4EE2ftEZfh0RcPV00+Fgo2IID8QQxKNFiGP1I59Upn6GsDar/RJpFyV1SCnAOGw==", - "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0" + "node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" } }, - "packages/lsp4-contracts": { - "name": "@lukso/lsp4-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp5-contracts/-/lsp5-contracts-0.15.0.tgz", - "integrity": "sha512-mrFp5RAY/rswka8D8rfh25T30yipiQsH87pw+f3t0BLnxbkRt9XiUD4vWD9v8D04TO8wQWuTuFJutObirgFwEg==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0" + "node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/yaeti": { + "version": "0.0.6", + "license": "MIT", + "engines": { + "node": ">=0.10.32" } }, - "packages/lsp-smart-contracts/node_modules/@lukso/lsp6-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp6-contracts/-/lsp6-contracts-0.15.0.tgz", - "integrity": "sha512-nJ1V5x6RP6WlOy2yX/SqNA1M07fPjmmsGQRIWJ1/K+oZKcKSPXKRkaRfzbGo9uzBYS4sDa0E2Q4UMItjaTokoQ==", - "dependencies": { - "@openzeppelin/contracts": "^4.9.6", - "@openzeppelin/contracts-upgradeable": "^4.9.6", - "solidity-bytes-utils": "0.8.0" + "node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.5.1", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" } }, - "packages/lsp5-contracts": { - "name": "@lukso/lsp5-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp7-contracts/-/lsp7-contracts-0.15.0.tgz", - "integrity": "sha512-9kQmwL49CA90vCF1dneG44DdtkNzmnWZ7JzLIopizLw8pnKxhvTAnnJFdsDUVZiDqH3l61RBY51IpEBj+u5yXA==", + "node_modules/yargs": { + "version": "15.4.1", + "dev": true, + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" } }, - "packages/lsp6-contracts": { - "name": "@lukso/lsp6-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp8-contracts/-/lsp8-contracts-0.15.0.tgz", - "integrity": "sha512-7iWN55lSivJ8PUchY5ocrHjeQ/SeaL2zVrLBW+224AkFQn3no1hhZ8q9mqAbwxv0CEIt5L2x+2RclZq3yMa2uw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@lukso/lsp25-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" } }, - "packages/lsp7-contracts": { - "name": "@lukso/lsp7-contracts", - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp9-contracts/-/lsp9-contracts-0.15.0.tgz", - "integrity": "sha512-wyE4RR9toZrNTcJZXtHHeLfUEqQzE+Zn5nmailAspBTo/sUmW6AjUxl4PKHG/nLYrcjb3wvZ4mTCnbFkGsRHwg==", + "node_modules/yargs-unparser": { + "version": "2.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" } }, - "packages/lsp-smart-contracts/node_modules/@lukso/universalprofile-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/universalprofile-contracts/-/universalprofile-contracts-0.15.0.tgz", - "integrity": "sha512-umW4mpC2HtUNW+Cxi4rP+jgWDzpGQfAiDHYiqVB7TunIO6YzlVez8i4DhrmN/lInYQSuk6+kHpUo1jEO8kiJxQ==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp0-contracts": "~0.15.0", - "@lukso/lsp3-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/lsp0-contracts": { - "name": "@lukso/lsp0-contracts", - "version": "0.15.0-rc.0", - "license": "Apache-2.0", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "node_modules/yargs/node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "packages/lsp0-contracts/node_modules/@lukso/lsp1-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", - "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", + "node_modules/yargs/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "packages/lsp0-contracts/node_modules/@lukso/lsp14-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", - "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", + "node_modules/yargs/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "packages/lsp0-contracts/node_modules/@lukso/lsp17contractextension-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", - "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", + "node_modules/yargs/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/lsp0-contracts/node_modules/@lukso/lsp2-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", - "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", + "node_modules/yargs/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "packages/lsp0-contracts/node_modules/@lukso/lsp20-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", - "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" - }, - "packages/lsp1-contracts": { - "name": "@lukso/lsp1-contracts", - "version": "0.15.0-rc.0", - "license": "Apache-2.0", + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "dev": true, + "license": "ISC", "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" } }, - "packages/lsp1-contracts/node_modules/@lukso/lsp2-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", - "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "packages/lsp10-contracts": { - "name": "@lukso/lsp10-contracts", - "version": "0.15.0-rc.0", - "license": "Apache-2.0", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0" + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/lsp10-contracts/node_modules/@lukso/lsp2-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", - "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", + "node_modules/zksync-ethers": { + "version": "5.9.2", + "dev": true, + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "ethers": "~5.7.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "ethers": "~5.7.0" } }, - "packages/lsp11-contracts": { - "name": "@lukso/lsp11-contracts", - "version": "0.1.0", - "license": "Apache-2.0", + "node_modules/zksync-ethers/node_modules/ethers": { + "version": "5.7.2", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp25-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "packages/lsp11-contracts/node_modules/@lukso/lsp25-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp25-contracts/-/lsp25-contracts-0.15.0.tgz", - "integrity": "sha512-GYgnosvrWhNbkZ1lpZ9InPKF8dB1FGb3N0FvpV98ZIG28wKGdBkKnT54ot2bMwmW6oeRuz7/8hAGbcpCKVa/WA==", - "dependencies": { - "@openzeppelin/contracts": "^4.9.3" + "node_modules/zod": { + "version": "3.23.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "packages/lsp12-contracts": { - "name": "@lukso/lsp12-contracts", - "version": "0.15.0-rc.0", + "node_modules/zx": { + "version": "7.2.3", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@lukso/lsp2-contracts": "*" + "@types/fs-extra": "^11.0.1", + "@types/minimist": "^1.2.2", + "@types/node": "^18.16.3", + "@types/ps-tree": "^1.1.2", + "@types/which": "^3.0.0", + "chalk": "^5.2.0", + "fs-extra": "^11.1.1", + "fx": "*", + "globby": "^13.1.4", + "minimist": "^1.2.8", + "node-fetch": "3.3.1", + "ps-tree": "^1.2.0", + "webpod": "^0", + "which": "^3.0.0", + "yaml": "^2.2.2" + }, + "bin": { + "zx": "build/cli.js" + }, + "engines": { + "node": ">= 16.0.0" } }, - "packages/lsp14-contracts": { - "name": "@lukso/lsp14-contracts", - "version": "0.15.0-rc.0", - "license": "Apache-2.0", + "node_modules/zx/node_modules/@types/node": { + "version": "18.19.49", + "dev": true, + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "*" + "undici-types": "~5.26.4" } }, - "packages/lsp16-contracts": { - "name": "@lukso/lsp16-contracts", - "version": "0.15.0-rc.0", - "license": "Apache-2.0", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.2", - "@openzeppelin/contracts-upgradeable": "^4.9.2" + "node_modules/zx/node_modules/chalk": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "packages/lsp17-contracts": { - "name": "@lukso/lsp17-contracts", - "version": "0.15.0-rc.0", - "license": "Apache-2.0", - "dependencies": { - "@account-abstraction/contracts": "^0.6.0", - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "node_modules/zx/node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" } }, - "packages/lsp17-contracts/node_modules/@lukso/lsp1-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", - "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", + "node_modules/zx/node_modules/fs-extra": { + "version": "11.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "packages/lsp17-contracts/node_modules/@lukso/lsp14-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", - "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", + "node_modules/zx/node_modules/globby": { + "version": "13.2.2", + "dev": true, + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/lsp17-contracts/node_modules/@lukso/lsp17contractextension-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", - "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "node_modules/zx/node_modules/ignore": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, - "packages/lsp17-contracts/node_modules/@lukso/lsp2-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", - "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", + "node_modules/zx/node_modules/node-fetch": { + "version": "3.3.1", + "dev": true, + "license": "MIT", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "packages/lsp17-contracts/node_modules/@lukso/lsp20-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", - "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" + "node_modules/zx/node_modules/slash": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zx/node_modules/undici-types": { + "version": "5.26.5", + "dev": true, + "license": "MIT" }, - "packages/lsp17contractextension-contracts": { - "name": "@lukso/lsp17contractextension-contracts", - "version": "0.15.0-rc.0", - "license": "Apache-2.0", + "node_modules/zx/node_modules/which": { + "version": "3.0.1", + "dev": true, + "license": "ISC", "dependencies": { - "@openzeppelin/contracts": "^4.9.3" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "packages/lsp1delegate-contracts": { - "name": "@lukso/lsp1delegate-contracts", - "version": "0.15.0-rc.0", + "packages/lsp-smart-contracts": { + "name": "@lukso/lsp-smart-contracts", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp0-contracts": "~0.15.0", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp10-contracts": "~0.15.0", + "@lukso/lsp12-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp16-contracts": "~0.15.0", + "@lukso/lsp17-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp1delegate-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp23-contracts": "~0.15.0", + "@lukso/lsp25-contracts": "~0.15.0", + "@lukso/lsp26-contracts": "~0.15.0", + "@lukso/lsp3-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", "@lukso/lsp5-contracts": "~0.15.0", + "@lukso/lsp6-contracts": "~0.15.0", "@lukso/lsp7-contracts": "~0.15.0", "@lukso/lsp8-contracts": "~0.15.0", "@lukso/lsp9-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.6" + "@lukso/universalprofile-contracts": "~0.15.0" } }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp1-contracts": { + "packages/lsp0-contracts": { + "name": "@lukso/lsp0-contracts", "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", - "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", + "license": "Apache-2.0", "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp10-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp10-contracts/-/lsp10-contracts-0.15.0.tgz", - "integrity": "sha512-LXyOOCD43sHtQxyp98utUwxaU+r2MA8TvqXBibxjHxD20/L7vYGSxHqDX493/zUtfCUIMUELuj6a1+NGscbBTw==", - "dependencies": { - "@erc725/smart-contracts": "^6.0.0", - "@lukso/lsp2-contracts": "~0.15.0" - } - }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp10-contracts/node_modules/@erc725/smart-contracts": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-6.0.0.tgz", - "integrity": "sha512-6okutGGL9xbg/MSgAof2FU1UcSNE/z3p9TORlROVGaM3gi1A6FQQ7fDqtBYkPtvHureX8yS9gP7xPt3PRbP43Q==", - "dependencies": { - "@openzeppelin/contracts": "^4.9.3", - "@openzeppelin/contracts-upgradeable": "^4.9.3", - "solidity-bytes-utils": "0.8.0" - } - }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp14-contracts": { + "packages/lsp1-contracts": { + "name": "@lukso/lsp1-contracts", "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", - "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", + "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0" + "@lukso/lsp2-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp17contractextension-contracts": { + "packages/lsp10-contracts": { + "name": "@lukso/lsp10-contracts", "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", - "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", + "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" + "@lukso/lsp2-contracts": "~0.15.0" } }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp2-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", - "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", + "packages/lsp11-contracts": { + "name": "@lukso/lsp11-contracts", + "version": "0.1.0", + "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp25-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp20-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", - "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" - }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp25-contracts": { + "packages/lsp12-contracts": { + "name": "@lukso/lsp12-contracts", "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp25-contracts/-/lsp25-contracts-0.15.0.tgz", - "integrity": "sha512-GYgnosvrWhNbkZ1lpZ9InPKF8dB1FGb3N0FvpV98ZIG28wKGdBkKnT54ot2bMwmW6oeRuz7/8hAGbcpCKVa/WA==", + "license": "Apache-2.0", "dependencies": { - "@openzeppelin/contracts": "^4.9.3" + "@lukso/lsp2-contracts": "~0.15.0" } }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp4-contracts": { + "packages/lsp14-contracts": { + "name": "@lukso/lsp14-contracts", "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp4-contracts/-/lsp4-contracts-0.15.0.tgz", - "integrity": "sha512-M85S5DN3hqHTIfTs7Cs1dqM4EE2ftEZfh0RcPV00+Fgo2IID8QQxKNFiGP1I59Upn6GsDar/RJpFyV1SCnAOGw==", + "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0" + "@lukso/lsp1-contracts": "~0.15.0" } }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp5-contracts": { + "packages/lsp16-contracts": { + "name": "@lukso/lsp16-contracts", "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp5-contracts/-/lsp5-contracts-0.15.0.tgz", - "integrity": "sha512-mrFp5RAY/rswka8D8rfh25T30yipiQsH87pw+f3t0BLnxbkRt9XiUD4vWD9v8D04TO8wQWuTuFJutObirgFwEg==", + "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0" + "@openzeppelin/contracts": "^4.9.2", + "@openzeppelin/contracts-upgradeable": "^4.9.2" } }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp6-contracts": { + "packages/lsp17-contracts": { + "name": "@lukso/lsp17-contracts", "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp6-contracts/-/lsp6-contracts-0.15.0.tgz", - "integrity": "sha512-nJ1V5x6RP6WlOy2yX/SqNA1M07fPjmmsGQRIWJ1/K+oZKcKSPXKRkaRfzbGo9uzBYS4sDa0E2Q4UMItjaTokoQ==", + "license": "Apache-2.0", "dependencies": { + "@account-abstraction/contracts": "^0.6.0", "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp14-contracts": "~0.15.0", "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", "@lukso/lsp20-contracts": "~0.15.0", - "@lukso/lsp25-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp7-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp7-contracts/-/lsp7-contracts-0.15.0.tgz", - "integrity": "sha512-9kQmwL49CA90vCF1dneG44DdtkNzmnWZ7JzLIopizLw8pnKxhvTAnnJFdsDUVZiDqH3l61RBY51IpEBj+u5yXA==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp8-contracts": { + "packages/lsp17contractextension-contracts": { + "name": "@lukso/lsp17contractextension-contracts", "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp8-contracts/-/lsp8-contracts-0.15.0.tgz", - "integrity": "sha512-7iWN55lSivJ8PUchY5ocrHjeQ/SeaL2zVrLBW+224AkFQn3no1hhZ8q9mqAbwxv0CEIt5L2x+2RclZq3yMa2uw==", + "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp1delegate-contracts/node_modules/@lukso/lsp9-contracts": { + "packages/lsp1delegate-contracts": { + "name": "@lukso/lsp1delegate-contracts", "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp9-contracts/-/lsp9-contracts-0.15.0.tgz", - "integrity": "sha512-wyE4RR9toZrNTcJZXtHHeLfUEqQzE+Zn5nmailAspBTo/sUmW6AjUxl4PKHG/nLYrcjb3wvZ4mTCnbFkGsRHwg==", + "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp6-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@lukso/lsp10-contracts": "~0.15.0", + "@lukso/lsp5-contracts": "~0.15.0", + "@lukso/lsp7-contracts": "~0.15.0", + "@lukso/lsp8-contracts": "~0.15.0", + "@lukso/lsp9-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp2-contracts": { "name": "@lukso/lsp2-contracts", - "version": "0.15.0-rc.0", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0" @@ -20082,22 +18664,22 @@ }, "packages/lsp20-contracts": { "name": "@lukso/lsp20-contracts", - "version": "0.12.1", + "version": "0.15.0", "license": "Apache-2.0" }, "packages/lsp23-contracts": { "name": "@lukso/lsp23-contracts", - "version": "0.15.0-rc.0", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/universalprofile-contracts": "*", + "@lukso/universalprofile-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp25-contracts": { "name": "@lukso/lsp25-contracts", - "version": "0.12.1", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.3" @@ -20113,108 +18695,53 @@ "@openzeppelin/contracts": "^4.9.3" } }, - "packages/lsp26-contracts/node_modules/@lukso/lsp0-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp0-contracts/-/lsp0-contracts-0.15.0.tgz", - "integrity": "sha512-dKQu9juDJNxKdJMHkF3wOfjC/VZZW+RonQ5hSw9kBhLAhyFd6SVYU3VSUOYG3G3bLDAE9We+DeONc0N/j4zjIQ==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/lsp26-contracts/node_modules/@lukso/lsp1-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", - "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", - "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/lsp26-contracts/node_modules/@lukso/lsp14-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", - "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0" - } - }, - "packages/lsp26-contracts/node_modules/@lukso/lsp17contractextension-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", - "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/lsp26-contracts/node_modules/@lukso/lsp2-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", - "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/lsp26-contracts/node_modules/@lukso/lsp20-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", - "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" - }, "packages/lsp3-contracts": { "name": "@lukso/lsp3-contracts", - "version": "0.15.0-rc.0", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@lukso/lsp2-contracts": "*" + "@lukso/lsp2-contracts": "~0.15.0" } }, "packages/lsp4-contracts": { "name": "@lukso/lsp4-contracts", - "version": "0.15.0-rc.0", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0-1.tgz", + "@erc725/smart-contracts-v8": "file:erc725-smart-contracts-v8-rc0.tgz", "@lukso/lsp2-contracts": "*" } }, "packages/lsp5-contracts": { "name": "@lukso/lsp5-contracts", - "version": "0.15.0-rc.0", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "*" + "@lukso/lsp2-contracts": "~0.15.0" } }, "packages/lsp6-contracts": { "name": "@lukso/lsp6-contracts", - "version": "0.15.0-rc.0", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "*", - "@lukso/lsp14-contracts": "*", - "@lukso/lsp17contractextension-contracts": "*", - "@lukso/lsp2-contracts": "*", - "@lukso/lsp20-contracts": "*", - "@lukso/lsp25-contracts": "*", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp25-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp7-contracts": { "name": "@lukso/lsp7-contracts", - "version": "0.15.0-rc.0", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0-1.tgz", + "@erc725/smart-contracts-v8": "file:erc725-smart-contracts-v8-rc0.tgz", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp17contractextension-contracts": "*", "@lukso/lsp2-contracts": "~0.15.0", @@ -20222,30 +18749,12 @@ "@openzeppelin/contracts": "^4.9.6" } }, - "packages/lsp7-contracts/node_modules/@lukso/lsp1-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", - "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", - "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/lsp7-contracts/node_modules/@lukso/lsp2-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", - "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, "packages/lsp8-contracts": { "name": "@lukso/lsp8-contracts", - "version": "0.15.0-rc.0", + "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "./erc725-smart-contracts-8.0.0-1.tgz", + "@erc725/smart-contracts-v8": "file:erc725-smart-contracts-v8-rc0.tgz", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp17contractextension-contracts": "*", "@lukso/lsp2-contracts": "~0.15.0", @@ -20253,24 +18762,6 @@ "@openzeppelin/contracts": "^4.9.6" } }, - "packages/lsp8-contracts/node_modules/@lukso/lsp1-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", - "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", - "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/lsp8-contracts/node_modules/@lukso/lsp2-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", - "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, "packages/lsp9-contracts": { "name": "@lukso/lsp9-contracts", "version": "0.15.0", @@ -20292,69 +18783,6 @@ "@lukso/lsp3-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } - }, - "packages/universalprofile-contracts/node_modules/@lukso/lsp0-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp0-contracts/-/lsp0-contracts-0.15.0.tgz", - "integrity": "sha512-dKQu9juDJNxKdJMHkF3wOfjC/VZZW+RonQ5hSw9kBhLAhyFd6SVYU3VSUOYG3G3bLDAE9We+DeONc0N/j4zjIQ==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/universalprofile-contracts/node_modules/@lukso/lsp1-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp1-contracts/-/lsp1-contracts-0.15.0.tgz", - "integrity": "sha512-8xhehHa+EOiJ9MfqDStFgF8ot4scER7ip+MCKGF7Ybrv8aWlXyJgfl7H5TX8DA9XZbqb096GKicNi7v79H2hQg==", - "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/universalprofile-contracts/node_modules/@lukso/lsp14-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp14-contracts/-/lsp14-contracts-0.15.0.tgz", - "integrity": "sha512-dqTY9QjGk9b+lZFchqm1ZAJ5c/AJlTPwZtXsqRyJrSS5WHwx3jteh/0mCt/1fmv8dzqgMadtOIJVpEXPannMWw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0" - } - }, - "packages/universalprofile-contracts/node_modules/@lukso/lsp17contractextension-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", - "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/universalprofile-contracts/node_modules/@lukso/lsp2-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp2-contracts/-/lsp2-contracts-0.15.0.tgz", - "integrity": "sha512-3SnuAmdZo+Y7pv5E3DajguCfawf/2KEygAjpV3QNfuK5MnBtNSYTg9nmjvP/+VcAG9nNlkMSGba43s5Jz0TuSw==", - "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3" - } - }, - "packages/universalprofile-contracts/node_modules/@lukso/lsp20-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp20-contracts/-/lsp20-contracts-0.15.0.tgz", - "integrity": "sha512-TfAM9tN6zzIQXq0xq3uE0zkBfVjQ52jXY69fvMSBqs/PsKV49J/T4tH9pMqazTgCF1PlAOnoA8m2MTdjJ7OCqA==" - }, - "packages/universalprofile-contracts/node_modules/@lukso/lsp3-contracts": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@lukso/lsp3-contracts/-/lsp3-contracts-0.15.0.tgz", - "integrity": "sha512-GgL9Ys9HvCuRCJ2/XB6abAwHBCE+LYMPY5vcHnZ67U7cgVgy9sc7z9VDTcBwZygsKUMuNrrnph4MC0G90rALjg==", - "dependencies": { - "@lukso/lsp2-contracts": "~0.15.0" - } } } -} +} \ No newline at end of file diff --git a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol index cf6119640..fa5d85bd5 100644 --- a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol +++ b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.4; // modules -import {ERC725Y} from "@erc725/smart-contracts/contracts/ERC725Y.sol"; +import {ERC725Y} from "@erc725/smart-contracts-v8/contracts/ERC725Y.sol"; // constants import { diff --git a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol index f6bff82ea..bbe737a4f 100644 --- a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol +++ b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.4; // modules import { ERC725YInitAbstract -} from "@erc725/smart-contracts/contracts/ERC725YInitAbstract.sol"; +} from "@erc725/smart-contracts-v8/contracts/ERC725YInitAbstract.sol"; // constants import { diff --git a/packages/lsp4-contracts/erc725-smart-contracts-8.0.0-1.tgz b/packages/lsp4-contracts/erc725-smart-contracts-8.0.0-1.tgz deleted file mode 100644 index 75eeaea1deb9dee45dc539fd5706c54cbebe231a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14324 zcmcI~Q*b2?>~3whTU%S(wr%&+-P(3f?QZREZEbBETidqXp8NaX`*P>L-#mTEHy0I ztQ@T(QUq_@e0;aA4DZXXwz`#CJ6l)Q$O6yZ_`CgILHWdcj@0T|pA`$Jn6R}#(Rj`yUv6#~N!)^)&!WT5)>bnO z$^yoCIZ;KSxi6$pmr&>DcQm1KPV#RYoU)UZ6K1B`u~ufL@v5pOn05hQ@3;NOC3pb` zK-I!S)y3q4qftNRWx)n{ncbLKo(uZqa(K9<`mFWuG1fS8HWLo&vy7w^Doj~x!eo)5 z!uMz-NioZ0PMLwyC^#!{0f*Dt0{bzGtlNI1JWM)SIPu0rq~pVA=*r(rvZGNMaU+L` zkz}%?2FWT=P4F=b0tV!?VAzpo0((Wyazlnw7~~iO`zd9vVpeB5l%K*pdDmr^F>VU# z15|ia97^5-15)^?#9($36fWV0I6)c1ETX_XbbJ6aOf(NAN3xLb{Ko*>#AW`i*k33GKJX%S@35fBd#{in~$(M?;oz>gmY*zm( zy|%zCBbSX^St{F)r$WZK2SU?=^_xB2z{o9VM9wh2@3&Wz3AHP=UJ{Zd`rl^P&92C`EVV z%PL_jafY)c9px~Ye;m6o?=$5(1TRx<@kCW>J>)iRk+mW352VU=4_x{c%hP_ehx9HN z*(>Y@dnqUn!33U2D^G18w|Uz(i-o@1h}E*5nn4A=0d=2s=()~eBA!Ocpy3!1dFRP8 zBmwjrgN)X&z|I&I?ijA zgv5^O>=+!Nm49Vad}E{tLTk_50cVloMR~k*S4Mz^xdl(H_hL;pg){5BRvwbLqr*i= zN3`B^m-QSPk8(UP0+xDU%wYPSJliSI^p20`J=8pk^@n zmm?t%5D`gmi~Az0@Uz+hJ9m^;KAfXZ{Lfx)5_Sc20T{mm(pF_Y82yTs-&yp@ufF7J z?mWo?Y97}#J)VN5sjOXMlx9j(9}EQU*Hjs7h@IO=a_CxSQ+&yA`^h!HfcmsR>}GH$ zBAN6p2koxN*eIfDn68Duby^;FPXUAhUPQ!~5Wox{ISQ8v+i02pYP>Xeq4Zil_a%)n zhRg&Vab99bz`BnP$r|`^$`pKKiX~*(Fd_s_cbhar_yGiXMUX}D`b zaEtANH$|Cu&$AEpR)S3tC=q`WPyM`2O2)6m8azP#Ds&T(o%muGAD9G`!=)JYL+?b0?-O*0ysZrztwO^AT0=aQ-wv z;Ws*slBrUW+cqI}EGL{Yh6g!lwbfrLQhalL98 zdM@|oZ(8|9Rr<%OWhpXy1)HYN-tb0Ljs z2uaf!ncxVE_?fC_Zur3+wENbz^+;Xvq1X~B%Eb;BiViH=xv#6ue(aXuzmus6D_k>f zz05iAN2b?KFas2q;o~Hx9;0w0$Ad<-Do1DUNiyJRk+t(%D(1wDuz3WBh#10nFZ2%m z;4U29$ujS;p8p!Aq$FU$xk>DCvhmimt!xHcSX@ZRtVsa-IUrae-(#Cv&B%p!{szX>0(XY z8;P1PkPiN?jpc*4E0j?1Li&*Sl`v00tdp}fKliiznnD6b{mWb$r7HjtG1S7E8>{G2?KvRuSpBohB<3 z&~H6YzG7Aq1`eY8v!?HeMVvxsALqw$pQ4?p(zt8AE*8%@yLx=pAUcTlog371a3fQP z1KBY$$ComvvYIY1Wkd)gV) zjor=#5ee0DI{vRvWG0g?X`>SzV(0>qld31f7KsnMGc(n??|e8}zy9nZpPbAGwQ9t2 z0Y8#p=Dc`m5%_fzd$B>mGglIMCo@WwJFcOy>w{mg$BLU70z`dO(53dZ<#opT1jqOBKCNI9Uk{ygSeO^z!re_H*_R z@Q^ezcwf0^?x7mR;Xcei!6`!?XzKtEKwVZnvm8jO1LkEes-msSR_v*}x|FGeA*iaE zH<-%Q&erAUbB+zi#2mj3x2B)q?Bx0fdN^;9?&KTheSW>}zrSWboSdw1w}tfx_V(~} zs$D~lb|j>armvj*tji-YPEN05GVW>PQ!lIOV2s_hBr|cLGabKM26wbf(aP9ja^q7R z;@Bh2I{-$QhqtJ02F4%wJgZsQr?_y58V=XnG9@+1qdQem)0fuX=>EgMF#e03s@wd6 zqIcLXN$dBRvjCoOd;dwOWHjJlasxqFnV^#h7nggM5oLazsW+vlMVGwDjW=Y6b%!1U zspYu3aV<5HV#_E@|Kh6%j{sOmcm;#zgK~g+hVyka30LTc6y3k_;`OJw&g2#9`!7=& z_Ic`C;CAQd;fXBlUvHb8;hko{T_$!NwmSWf$>3Vf>A<0IEf&HMdABO|<^Zlmq6o+5 z5?h&rv<|a2ZJaao9g)+SN385mz)>Go!Jcz{BpdmgA!H4fE17a+ehl)igCs|OKWTHi zQgs9^u|#-Fu-C+U>$LKPNU1^HOCW&&l)QlGE;blfT>>g6%kL+cYjL!>hj5;)2+q=l z+q46!GnGz9nQ=~xSl7^NBh@~W7(!SlYA|f1ldzsmaQw%B+gneZ>PXta4AfDMMa1WBfrkJ5b3-Y zO^W_{pNGi3rZ%I&K3T~VJrnziV725o)3peuT4k{$?*78X>NKjL-u_r8asyjy54I>p zZ2(g2VuLCWhl?#8u*w{8JXcnSSR^$HCe8m&%b9WSoI303l0ukm@b+%Pu^K> zF^fu)pF{76UK}=jph_hbeQ8e3_+bVF(V#IKgmhMj7f*-sI>hIe|z&~nrVAe?_ zc!fzoM7kxt4OwKI(H5H>nJA1ZwN90(oUFlBgBp|!SKWRBHOMF+Dt8&Y^dRT$t|AY8 zBX|D#8+4z!hKnyr9jn!~VU70)9Y#_NKngi?9PUAOl`iUA| zFqgK|AHPSOra~0*!c{jA!4TIU3OAUq=kMEQ4Nap|XHj+J!LKjVpk=l!*0szy z1@)#a?e-iS?o-RUrGDk*q&b{%;`I}|!B#cPTZ=wO9GJR(a`;b*VMhutiuGFD$shn1 zZ#1Vkabo015grjM8%8Tb)I*;Cy59bwyKauQ?Sb;r&dE3T(l^N3B{chRx%a5(9pw4k z^5W|a0$pz_)!l;vV}%VoT>_l_J>IVF#@99;)bC?IyF|y^bgm!s(dw3(|oL@anPqGV6 zjo&?-NEbsA^98hlgC*?V$CfAqTnNGi&&anbJpR_wAn!$8!It;Ce=_3e~}Vi5w!>0d;zFbP9_< zy-J&o1(dZ$!iBxwFC4l0HMi9B4-vxAbcKa%m zD&wt6sy!C~!aEk!L|Xazw?emP*zEEsV@s!M%epjNCf3ZeW|*f1Kb&zx;8d!ZVF}ES z0_ffgVhYC4*s=G+-hwi%nw1QvNzE5zrk<{ZuK~J2z3iu#H-v;JY5jG=Lc`Z0=ig}| zA44uO)7tn5Sj!QwhT!4-qTFz(1A|m725<{I+z%h7mE z)U)OT8`~v1j7Z$Mt5kmKA{a7@Z0!Zect%8Y+CsKqZ#!JaaYI?Qb#oVdY<$QE(X#a% z0nBxYd>&}saDNv}-Suvo`jm047S_!zc)~zw`1rN9wqP;nuRGXVtK9Y1TW%f z->`yQ=f6ZoMG4(@@;uoEIQ50(0=QR^Q93$vy9c+g_Z;eLaH@m674LLY>S7+q=hgqw zT*;8}eV|zN9+=?!pTt#o`P*&KGDtos5l0Xrwbjq!P%`9>hzL0#-GL1>5K=dnhMObi0rXz? z*@F0k``4k~?gPoEU?)@Zr^yolf!X`77cx3K1EBMR-#7Ov)ad8sC2GiEzlrB+QN%_! zc*&lVRh_5E87VH|++NT%;q}eU)iX-yHOkh7hX+jePvV%2NGI$DY+qCl=RpF$Tltvz4@D=FWxj}mh>g3-@{RZI%ipXXIPPYWevjfd! z>vuNnC*c+6OH(hogMnP`UHE@D9NqPZo)+1E4H66w8_cn<5@tTVE(pdA0}EL{BJDy1 zwTPQHY|Qa#^_g)kG&g{XVZgDGw^Eb1?1J!tR*F0aI;B=#dGg*?bmh?|QF^rBEg`2m zp4EXZUCK*wwfF#b)VjTy?9-=CZ;5TYHfxtYMPJ*h?xkdMwyl4ZN8(Q~QR4!j34bj#dYr{7||FnJVCFv1F@EO?*2xxsor>(&4xMQ9CD zzg5Cc%wFs981`8`1}Q&d{(hcFt4Rm|p}?ih)uXME81t|i?tz~#f#Ro1SuSabmh8Aq zyN18S7dpYW!NPjGJ*B~Mi>I#}5-+S^GSQ2iOTmTa969SAb}ml;lzNxwQzQA=G+403 zWUD=iqq$17hT;98z)>71CBtaKGsT}?dT~K&EfAHDpO$w|hq@7f>VE>KU~ILcGsn>L zmxs+6IfP|3O;XUsY5;y(M52PQr?+MQMe8DXx(8|&7cq10s=Kp8w&I7|kkw}ni(2k{ zDk|uHl5piVMvmG`e@mM`81vT*F6RaNi4Gpy@j>7))g%89X5%l7+81|CyNBz%{)?hV z#J!Wam6s-t69bPLZi*ctlVjiQF|844O}c#$*{xN!)CBm`T}c#6yRvK7+Od`{gQ?g& zxN#mh{fmRZc~cOyZhuAG((z1C_cK(k*kIK!DQmj7Mc-P&!#c}i#3Q1n_JW+< zrDe;Z>f|XsJ{w%_rQ1@Z2!Q=h!#+OHU4Lu2_E(u|k?Q(K?-kCyI&*0e67uLOk?bYHGmYdz2IK1Dx)+)w>Ke=S=MLLAP) zrlN!{;Wr7UiZ3SEOu=BGr5WMU5QDG4k)@Hy2q-yFMrOr4CdpZAm``1Ft=^cpxLR7~ zXxC-n(e6=%B>ASY{aii#H$_@uA8p}i_;v%Do0}Vw-jpJ6O-QA*_`-bg867VG`UC%- zGF5p;y@=f6)luRp!pYEfyBFUB2~JK^B`D1f<7fVj)%|&E#+33XfZ>9PSmnotHVq-F zG=nP~n1aMT=gpNw$M4Ss#%ej00FGIgd1~N(%HBBd*S>9A+uEtEs*eUw zHE1EU<|eiVDCxm};G$zPS3@4wjG+QyI7D)x;TVLrBN>@JM(>|A4B!!VNQHRs)JF{f11OT2~%cermn|`2s?&QLpe*EpX?Cj;!(IFv+;-S1 zc?~85%&x2Sacld)9?|w2xL;^a&X;^vEZ?_a6$ic#XOBXAjryPNFyjFejmIiZ@Y~Ke z;*7^sAIQFCS}0ud1JIGCrN*Sczr@~WGK-Z1$aYLvtcu?{WwZd|54Eu1gKf3103Ko{ z_1iNYFe#H!A4{4hN0Zr!XHtyNXW&E%Ri@%*7SJ6!{H`6GrS`AU;Z>%3+PMU9x82iJ z_k=lmy;cJ26=#w5C~0%`m40o#L&Wo6Q4OQOqFHItdhj@mzZrxak}ZHNN+L+rgKGrr z_lp8G2a5jTbh}Mi6A56owC5GEPX*%Si=kzvCH%J)WH8Zy82VV+FDRx+nPUcrosiVs z`kKQ1yRq~18fU(!^XMWTv%>ohSP$}1hG;k)0*wM-WJ* zt>a6R3oD9OOC96kGd2fM!;>*|YJqkn*9%xBY<h~tJ^9kc?oS3n4I_E`?rcwDJ z-Wikq>H@Owe}K`x{cE|sG1AP+=lCyn z0CohLCMxq{Gp;U338@!hjqwe}x4{k)igwUIjg`%02CWURsjI{?l%`$-BDjdZlH9B| zhKoHN3cQIC>3BIeE4gO|PPgi%-)@;?o(6wzm*|u0o*HS%BOEaf-1e{6R=o($XV`Zs z#eh;x0#n>1r$Oog+O>T_()0Ma8IvY{caTn9PYgHvuPIi%Dk4OdN*Ho1`ybw@U?cchzR~h`yzkFL{*ipyF?}mqCY*q9M zCPDQQxW#|jYL)l|k>SQUvkOPs|F$#TQJG8S6jg{b8%{f_abINkzCY9vgt;HxWl#wq zO9DD3f{rwP{19QN={PO;+vEB^?QIPh>dH7wYvOmA{EdZ~zuic=M^<(8VnEcGGmRlr zB#cI0sUN8J$G99wRYOj?-M0=|)6w-Ybr{$@a>A-iA_t@6{C$Ic1iH%oI{yTP%m%Is zjzUK9(*=%v+)O0+y62Hj`ejDGxVrS5ZeNg5LHPcK2J|3<2NwKyKRDsQ7and^ zQAtLHjKNyDtWql2mm6R<)*>8cL6_5=XLoDGLeVqn&tS^z0RvHLh@xwkA+En`xCOY5 z@tV{^KoHnlv8&|`oh&nXgR>PxB3SRzd5%zrAJ1Pul}-F5EPzo2%sl8q7$ zoU}wpEMI1}z#Y{-x#S4P0*(`o;jMUfZ*)bPk`wi}pP)FK>0`Sr4@p<#_w9o)9G;g6 zm?>ubd;ZKcKJ1*#=g)zBt?JM~-5Xm~pMgE*UxArmw;d7?V{6c9{sHQAB7Zd*vLO$L ziH<+``%l~G)4q+<;E3kk8ItG>N6!~rOb!ib4KL*XyVaNg@pX$N=o(ximH0Fp;qkX) zrtTfEEO6XwOBjL;WYhkcUH|Z1wTQ3UdG_n{0;fg3#*HRPMj^{D_*dmVK)?>GW1$20 zvsh({bK@o9M;qYMcQ3Uq?1PGDy5q@w8+Y|`NL-4Xbw7Cgc+z66z<|^0=2zl5P&KjO z)LHql^@V?)+rY)K+2Rt?zing3+f3RrFzrflg}a!l=}+2t^br)a5GCHPAOYXw;e`*j z61IZPMoOxxwRCi@RCAMIHFd^=Fxq!*rl@KYg9)^Kal9-$NGee={Ce19kSO$X z!^Sxz+phBmyrmY0N2dHET`d-XYgxTdz}890U39$X2JiG;3C|Z<6FiIhPqk>dOTj_# z6YZBs6>IcTAn)6#(oG%meL4Z3$=wSBp6lzAVi|=x45-6r^ylLZN4te<**e}B+xU7n z)(p+-f_dKpl*q;_Nd-8;hWPJU=mZtMYt%$TQn6u7HJ-x}>2c4&_S2ZsY;CmYGWiy=z6hrdN5(Xh9s~-54swU=E zH;VVAKC?WoC~ebxMojz6arS6JWraK>gGuS6scEhpjSY4fg4}G6Vk#^Di)6+07bjBP zi??{EC}$+^_O*p);FmS`Lmh}k`@ur5urn4E_sH)0M>sKWd27R;kR(Wx`x}qY+YpjX z-X9e3M)ff6?^bWY!#nFERlRDV{Xg61w~7gRA(b2z=n|TT@a>xz54K;Xvb6J~t3f@+ zqFqT;IXA|JhV+oxj0<5}*nFbIkWbcjN%Eraw3Ly`ALm{`d?M;7%H_v7R!5g`wtXjT z$p;1rnUFQY1i(LM7p?ro_YME*?70^z2CtrlI_}F@1`RsN23b=$fb}9W?wMDS{@m6@ zPfac4!9T8V;FPjldSQ09GD)C2xLYx4g9Rn*E{)0i1+WV;qNtbhj+~~4KYAD zpGUh!>S?M%QfQ&LO;DassNL@@aSC#$h($lFWkK`L9Qmwk|Pn->BY94Rqy%EsL0qSwlYJ-CN`ogq&dp$YQJ1 zYPd71R&1txdY<0$_5Enowo1jMHd`q)|Egweu?Q7DSpKjlE%$N46*5k^QIPKJ{)%MI z*OlYY`ZRR3VRb5D*Vf48HXbiOB*j>`x38M&<_rUqrLob}NB8g|nl&;UtsMGP$1SeB z7BTs&f~ZK3UMY>U!eZ9vx9^@`eGn&-mz8h>0Np9}J#tlJ*k*vDnDsDr}`(}7mq zG&1pFgutg*w`Gz3%GlEj1wHkMm(0SXqwN0H+K!We-y{jl%rneAA9TMf3FBqu#AKc` zBQvLH35?sTsjcejm=pf%&GaH0A?OODc@;8v1Ev-?YKRj9)%H;8YQ@*j2JeO;5XaN|>%Mhm;ZR~NPX#*I{O&Q&=u6(cfjjY{AIu$h8(>qYpT(M`D zV>gWzK~2pCXkGeQ09HO(n^G)2K1;P!^gL?vVX_OVuX+r6l@`2ktR`z*HVcBg7*r8w zN_D%LN7eA?A6QAvi-8zfW7NC7u$tyV28uYmDsoi}<}3~IXu%MVVzgp)u*Ya1H*#nM zDf*-6S#^K`nSaVeSp5at2RWjTyp=2HJQI9LU_7(brhUa&a3QhtxgFM6P`&SBC*B4J z7js4F&bY&by*M*-y$QocpR+hWxW}z+lkO}el} zzR)oKaR#Z%Fm))w12Rvc@;eGT_S`lP$`{qAkst{~?9v%3u%P5es%NA?h|oUNxc*3VDLxbBe4NjbvQ=d$K%7p*?(%_=Ar zC*(1Lv&CU?Tj$yCw?`&kar1FMzzlo6bL zREH&Xn1cuUw{Np>vq=yaD-1jJF-5dK&+tNtn_ zqBXr4a!VVFVr;+ENot?_*cT!ZiGfTHVvQ{J0u!-JTRvzv;^F7~jzL=KaRCAP49Uw~tR z)kK1Bo)F$ZEiXR&nx88;7@#K+S}-9F__+&Mr0a4q&Vaf?{IyS+I$<8s`3pMn`2#B% zpRZHeWFu|fWMU@i`3q)2*?AHc(7^?)0$8)ackjv??PB1@*0t8X@edG)KNiF-y13Q7 zrCqCcK7v5{HBl)K@zG7}ig_pADD1XrrxdcUqbU?jm*0nzs0{c5I%uK<%dz@94ZEpU zcCA>n-$!?~s0IX;k8-u$#VBXL=u#!oXFWaO?F1ayL450eIz>VI@fJ?7svO~#yC7-s z!c-DMYQ_iCjf$k275x7--@^Xq|I6R|E|5Dx6V%$dvUZ)i2)fd`3(WWZ+?lC-?aj9M zkCXp%NL)T}C62Ylm|#Qi%-#Do=hT>;Ty-jSELc7QGIx!NO9QGN=?7SH>N;YNs28@M z5oNcgj=|L;U$#cqbm-#hQ|X?EX&nLb)beCf^S}*w`>s5YX6VU$2$NHkGvIAPGKzRK z=jq(4&ALYN~cJ!@)2k^Q7y=+$Eq2H|;r|up{wK_WE2yC@UyToTp zSN-u(*Hr!L)==g2?KbcxXu$HasVP_lMlWnLSJOJ0ev>(tusKLt>IhB@DpH>K6j}Xt zj|_%9{C=2tE<_;>w7LE@lQf9rjfxY$`BU-)nLEQ{cZ>{+IB>fM%K?U@{uvb`xyABy zczHQY29HS-?gbS@`AAkYeT*IA2pg^N8a35*Osc6l!1Y3lh_^1@IvfGinCyOAQ{pVq#~d-3AdF27 z|Jcq~tr&Dv6Xny_PxH=49XFU7Bhox(bQiKZ$%w#hSs)bPdwPFk`V+U=s+Yn-S;n6Y zhXexml*^dEugAJ)xBJATiaqU1gvPOQfo{@w(R~gzjQNl-GEYE_al0DGY!FVB9sl0D z)v~1R+GAbai4Iv7?4pl;-=~eXv+wsQM0JR|MX}vK)=~1fAfA@b)m=)uLkF%pw5Bc+ zAZ$|Og9^Te3Z-5EN@85ay9`0#mQq6_QLglH!UE3pSh^Cg$s_ap@$zoft=bsnxL>~0aE`h*Zf-@h>%@OyB~#rOq!9dd>lt)Ryj=6u6z|h1xo}4AT~jGBYF(o z3Z_i5_pct-o($<2cbXDD@BHJ|rU&e|pV_|;kn&;CeyCdKc+c#?sDw$)%F3Nxtm$KQ z@=V}RK2)rfE#*rQhG2Yh_KoruGvB}IsH?mTXDa(8ABot(eBlTX@ zJJt@Q+0|NfPB2}iceKwLH28V`LOOa*yYTzB9Kt^M_*R&GLF`AuWaSjbq7dT4I$d1X zu0?VbDoOAX46Ge!E=Z4L@6;Y=f4N(@r25U>>pQOc%>;V}`I>hyZF}iqimDtaj4QR{ zxW{+WyLbQ6A58?9hQtS!he%^A5DMl>jy&@`PDB`)rFb>%|A8PhDr|b3!JT|ierK6)IcwSn=<4b@`Yo`}WK&50m(FBKWlMh&E7ZDK?pG*p4R!3jeqN@$y`Np!z&2h!)!1x8t&&Dp-UIQ^Xfh_Yu2s zBJJWz6xu-wDeA{uy0;A4W}^!nItKd}&Gr|1Y%};*2A#HtFXF$MD~o4D^+Am^+o48W^ETaxF>4f2L&%)PPkVKop$c;^Nu3kth`e3Ta zgxW3zR7~sWGY>BM%Y!qGWaa*OAf^_dBI^1sCP?5oqmqrsQD(u;i)fZDLP)2tWvY0j zp_Be?LRN8$P%SVIqmwu2an_&7B978>+bHBYlvppLEq-7TQGLm+u;lWK771Y}3x6Eh ztxqgF@)8m%CPuVstBf9TKNs+JO_%+J-`tB`)b|_NWzGU+n~HP~932y8vGiRBaje>K z4}1k~?h8dx1^Z*Y-fM^IwnlO?4bbd-Ty)n9mger%yIIhL%T|%l5!*l4S7`0;50z@X zTJsb3P^of$4(KO)X%{ope%~*j_fA@S0(dUD07)uet>iC)dYe{g-$5@eo^)TJ)@6{g z65sSS`BAUB(>@I2v;#56v!%u@w8O@EIhri}iTKxl#kRR}(>Axfh6lRAKt*0A^>JE~ zZOMyJqDcjv6RWa@K-)$e0~hKh5j6rS4wVKFNtVe%yQc*=c}`sMkwQkKXTHEfe^rjZUTF)ULTBdf!y z$w1AAb7gO8$%mz5o9Lj}lAf2oLDgiR##o^;4_SqO0Y}=4V~&A_^nRTW)!ABJ^5kZq zF`9HPgefx^*A+3F*U_f-TSbg5*|vpTsul=_Jv_(4n`6=4yu$6YE2w>Fh|W{B!}eQv-o<$QeW zjwYmg&2vfZea%wetEQY z8h#4)zm*Msob|OBv(=p78mj$-hAcQ2cOzF06El-5FPI=b zlBzCF8RJaUhC>20*-|)zU^O|L(=!u22c#xrOV)w@h@QL&qV|>hmRY9#ChcC~xJ)ky zC)A=O7MGt|FpG!Uq(8A)s|_K)P`t_28;cA%ZD##`3NKYVAh$X#7&55qOQE&!Y>lc7 z_{%L`w|&)#8b`pep^wQ&73?L(Il3-_o$^ln8^W&^F!KnqcagY_ZD|VKDQ(oJ>E|Kb?Ff2PvXsf$eQIcTu5TqCHXc88z zFvs14n0~6fJ9JC8qh?u1ncZqforJmm&BS@#Z+FCVeO6~EU(kSd7u#XQmGkhShMh&b zLRR~mA-Y2YVO!V?6-M7-sFD3ZAazQ_=vp|lnl&C&;;CRvVDf7QN_Onq{QPsyJcE9A zZRc!7m2jr^5F#R5Ecj_&KW#)DXVmhhnLGZ@g6V11Ae39tQgxyX{oxVZ>TdFZwmn02 zTuq5;vQ;2UeS%AX;UXyRtY$fH4nwNMDhPUa!8CI|_tStJ z^X~mI!)nKA_FJ9e1RUhnn;1GU%YYj8)0=6X*`kOIGE6_MOMp~3RU{F*?}RgJIIU@s z?PsT*HrV&U-Eu_jMHQCnY8#2}F}G`2wiVb6By%SxBH<9{;znUZ8+~)Ny#LpsPwa4j zM&SF#yJ(FWsPir5xp(F|z_ZL6v{7*%=>PWIi^}}*7%^U=QlGlT(2`n6PBT?#h>dJX zaXe){>0gyFM@Awfr=yL10Zd~@hTTQDvO!p#-)_1iYC#Z` z@aVJbAaJd(vr$zVJ+bg>n=InFtiig(F-z4_IxPjUZLOl}juAN6!G(qlqnhjd^+2Pw ztj(S<#k$lW`d*CcPwBc^_FsbVADxGutc^E9Y=qaItTjeY^sPk;_bP$6YMlxjse#+S zU*W)%h#)VAP(0{vGkTe>03=vGCK~Uq_XUWsh@nehOP?d@t=6h#hAe5Ou|8bi zW{D|$mtm|%ykNQLbW(NAWq`QIm4&+#(WOeOvHOJ|H5}txBCfokmM1Te*GcMk6sluq zIb0_aQ3&NWN+VAm(6J9J2dq@YtlNk!GNoe!`VT-A{vU=n;RlX1o+=?8avuS%oU%B=b^f znX`_K{!5bV&-EtS1^37{Xx}&sTR>2EC&b*vPnUAV?z@!8VP3m z;*%J(>35ONAcNg4!y&QIyDW?%^fO=A(B+iASAAFZetdleYQ6sJ J1#J+*Dywr#towvAKUKDBMzHs1Yq|C^n?-&{ROCX>lbCV3_y zj)4LB-vS1__OtT9=V(0h?fJlrblzdF+-FqI9(9pOOo=roSeHmbzkD~7t;eTev3Gy` zot4BT_4CQ2rs+dYtD}BZ@=VIoH7{5gNT-TvovCt5m|Oqy_?X-jQ`IEk7u_dc-n4p~ zTy&Z%?@-spLlUq-c;(i)-P0qV|5dqo{q(XA4Db%^3zM|`DwjV6rCL9CjeG}UKS->6 z6V6t0m>qGwYSOH&M5hVVYu?dN^r)8${Rj;~{z)%cJ%5rB$f6qms@U%B>atNHD8n31 zb|;BIyJmR1`?z}eq<8jpl9t!k&B-&!?`v--+wEg9J9@Y}K8{(`puTGls*#_q zt7V$)^MX{U53!HQX=Fk68Z1_9ZpC2Rv=-kKm9;`iz%3?~DvPB6f+et$M!Xa;M->+c zSx!C0g9O?4+wPr{J!#2yTmFs_UQV`_yz%^%`aK4!bF@h#&Uq5!Nd!v;P@fLIWZzKl zu{~6UsJ!p|V(T<<3VGu-*9Q~4Q~c=?N{aM!CB1_i9lJFBC;a<_s9dPi16sc8h-2P3d#MNqi0QDptyWHYaFq55e@0Jr z^P@;u{|b0%2N660Y( z-boes z$H7vf@vZ5R^9e0Wm}lv;WxJ46zyzr*=F}$)V`P<3T{$x`!8uUAV$H>uY~wz1QI0#` z$bXK~_@|q|c_@7$k&5#}@JuIxAV0GqfJ!b^T1{8X!t|8#78DCE_6?=u^~)K7d#l<} zTE7LK*c+ud#^b(Fu?+j-;IBz1^{)rxEX@67v}U8Y;>(=|ha#RiJWH!WEXoe|FO zqbA1^^>B*`Q^9)F$-2`K2O%})=>j*5H72N7ugar9V%sC9GrSk35F;K5+$NS_9j`K^ z(Pb!N)vLt-`LS17_6<1=p~NJn#b!l8_ohk-w%iGHr5S(&_2PQE~p=c3ZgAbFwf z$QB1hgN!of-zPe46|pE6Iu|1fpIJCq0Q-eWTd zm=7dD@cKqX;@_jZN=aH&*J9^Jz{ZR&4T%)(=OjW^autB^0Pr@|1VGhmXWj-eXBPrV zwJdl;1jQUb0PK!}7M1J+d{^{RqOTZITYDNxx^TWjq|p%V{um1+bGAAFan?MVlfq-9 zEj<{n;BrY&Xkq?5bowW{L#MWfW=BZOy$Md6}(IgNJSo zTP{3wEM}&t;shT=%`j9%N8;__JH5!kQ8LvvYC%ZGg-kJwJzCT>O%z~J!voE)?ny#& zIKqsv*ar}Pq;^TsA-={~8j3VBBi8*!N5+4_1E>f4xRu&t#}Ua2()8jh&WSsYYm(O3 zoNG|s@4BAwLFK%0oFe{}|HgcnBazUd}1s~gDErT-w5k_*Q6!1 zkBoyAgpa;?|FH}I!@3bQRNur_5~gvoYH7)(-jDUQE32V(tQk8bLwP#{u+n5I3yH^u zQJ52n$n$HLjWmeTtN|G{Ga#6&v4>rp+nJ1QU=P^TCP|EuK|a9 zi^c2(Pq1i}<`SVs+c=XEywFjWu0OnnM;(j0=K;(GE3KN~{|30O4hhPeu6%oOAh+Pt z>XlAG^?qL^bHyAh(ceX(0d#w&F&`0`#ErN(j0c?Jy2TjhYMTU^XqmTn2QHS@eB!6k zNthEYjYUDiR3k4;8BZ^&cVc@@5Py}nA(ZkWqFl_+dm=dNi$cH$hkr2TPZx70!kfGW zqNSv&M%s$cA}ErqO2$i{K7uSw(;%dwP4;(TSn3PD%T~0`9Er=UN5$w3afqC-kXlY9 za*whgQ)?F+>E`<}?yrjG&XK@na-;TG{yr#7ytr?=g7y|x9#Si}L!%{SLd?NCKuQzN zcVlqo4}a$9Opx>h^VtAM4^pE+a2MX;W#%Yv*}U}sYIGxjofi!qVC%L7eMtVA77>;b zy!{tU&Ac2acSI_P4&I##`%BjeGh~QW2#hi1uifYU)dAqS`N?}qQCY4`Hrn_+w?d4n zCYDZmK03UV#qG$dQaTSwu&CbKyH2qX@^?O!`6KR?bC7otla^4Q7-OaluJ!&LYiDx~ z!(>>u39l|13V!A+c2oG41j+oJDPATzSIzH9^6t=N_G-FNm<0~JG9dZ|U+@c=GOsImo6h2LnZq6% ziA+w%!NqR~wNJ^-;I1K9a)^S{Oy$KPwshh5WBEZjs|=x1ImS?>Z7pq;z!rhz0c7N4 z?2~*h_)$0ogoE5?j5DYTRFrjd)HlxtTLZ9qKN^|FT*jH|Irb#o&0h4Amh^Cp(su4K-s*1O+|wybV)E zy>djw(0GRYAaWODg??Y4($<(srnS~=gEQ@R0f@{YLTLer)1+~S=6K4eKRQ(hn+=~rM8Igl zZ9C7xxmZXob2BU@8^sIctBMZvGcB{j8$bN_uxw0CC1Ejc%o6a)+1v|{OcS5QQc+gc zvWASD>NwCdaXSEw#q1R;jHXc=GP=gHIvq@KWp2xf_wW;;>=V3bisUFEirg#8RDB(%wcB=OKm~wnilN>i#eBhwen(W z>XXsGYEp@4Z}Qa-U*cuiC@q+>CL>d9W!LBD>*B8;GU+{X7oU*RNtz^S+=Oe0Wgbp( z6t;$pCQau2@fZ>ka0{s=LFLW_sD)6iR7*70j{EdzVMTJ2+sxB?Pt$HFQkLvF%^i9( zH)J>L`c<-3Z4lIcEJCi0_yiX!}lzVYz6g54@0>etUBYyn643H!Rza3kwYN zmIyPG9xL{Lh&FD@*49%$9s|qQs03$ZaQBjC-~iS;1;$#x1FIq@Vp@XP zuYzeeu(6i#`r*Vws-rJjp&rewoh}Vmi%8e`d&y2UHjlCos~+k9Y!T1a0e=pb+28Nq z9vy$qnuaSu0CPnv<2M%hQhJ zi{LPeIA@KESvvUp{QXx*u$dUMPO*3O^9+1FUcT3d-9mf=+`S%N4`VJ59cJ?L4R-gi zK3={)4z8p-kqN5!^@$Ah^YgpC{e7kMdpmvK4=!Z$S|3`O1GB?2qP#HR;@XfrS;<=l zpWF){y$GgFkPf)yJ!P>h>4(29xN1$9Qdh)Du~?VX*t$-@xVj>F?Uzi)mzMeHwN18T zR=R)DzwQXd@N&?E#pk(jAAsuTUNc7_@JVXI{3$q z8)}Po2Mf=q?vSy0BR-L00}!xz^^t>vGh9S|gMs9Rum^jAad9Y&knIN-+Pn5-@sqsC z@6(d=9bvK-L<&G*3W<%&+OT6cle#~!?ZrofkNO|Er!8!Emxk* z8M+kfgPmMx?qm+p+Rs?Gv(M0VMox$Av%tTHMp&~D_FiZsSkvGBV^?LqCP~6~M-%%Y zMAqHh=OIh7LkUUHI@SPf0cI%VqL1^wMzn;a^u-A|&nH*A zJ~^1WYNrkNT&6@(Q($>6tJhjQovQfDd`tl^lq{6(DI@2fZk7<{tIk2MNfU~$Otp|~ z5&K+yvLyx$J;nrsogoj&`$QEM<6VOC2PSsqCD965K>Up$deYw#A)JH7^R*ddKJCH& z4n&q;ZJk&` zy5>>w5dqHN`Fc5n9ok1w5x4OMy}VtVd;xwCGLb96@4T9HuaK*5$UCGo9w&^jTbIAT z3JSMq7FHk_)FpTg?|DJ&8Cp8RmybqsAbUvwPr;IsWdgxE(rGY_-zVjERV9ID!ny7; zJ(&qrbTzZ{B|0VUcwq{$eSspyosV@F5G`)1D#L8r5d4vEP)MbOoTIHS9PrI#X-2}k z*)fW$7nC3j59H)*D2_suI`ll1CkJclH~6HA#;MlW(U~rOIG0t+s7;LYo+5uqQSbI& zcuy?bp@_N>EyO-fRJi&;GGgKEZw@g}o_eZSW;My7|MbvqX--ZXGNJDR(kG75BB$a-SI=M3kRNbr z2e1j-;L2rQJ&Bh^?c7}I%BSMHHmzRlQD;k@nKec{aBVu*q|o|W-SvkJSSeBk1(dwi zKstzSVw%vRJW)wBm{0Mc%{ev}po>$@GsFy4TjV#UX?p1$oi1;Ds64-R0H;%d0$E#o zR2|O__Z2_D+@9@k{S{ze*Xpg>4>0~d;!=KwsdkpJkB^_r$H!kfFEPIjhO3MB{01>@ zEP3Wr-h=lA>HH@-+_!fZzk3AxGvp`Gd&xzAYcHl}hqTlu;+y(UjX}P>-MEl`H*Xg& zl>GC{$H{Rf-pSG1`y=^65RyFOY+T)JoaE}y8DS#PS7#@GFTX&doyY#b`TAqi?SHFJ^zT>{Cc97!kBWeiJ)Y^oBYeF6eHEQM z=5xdsybItnHKGeC9Yikk=R0bL@xtE-qD}I3&@t%3!_x^76J9VgMYmTQk&q4n&Nag8 zxNc0tUbx+`dA&E|nG%)LXJ`98UD*70uv{O)I*s~`uqj=~CKfS0wq@NlsiUBqKR)CR z@wFfyJ}mD+Q1I>(kdUNF@2C5i1f)B#h`}4;o;_hm6wR8iA64~UXslVxO?d~(6SNjhUX9&LuUDhJ z$Yg>wy?C|>sS#3a5PA?|;R!6nOj8oF0#$Ao&QSc>(DTaMKZi(ITyH$ZGycFm$7VSH z=X+XrXyw;7j4f()k-vS)iUsxjBe%}Xu}GbH0ei%?f%{|&-+oQ9IPF@!st`^AG$}bW zW0G#Aa~2L^jEET@vaOOGG_WgX!DvJlVtl&jm6O&I`K3=F=6jm zf2r((QY(9annEBu*EfhGfcChHad?4pM?E8ShJuHNst}Y3gcz)cB zJt85!PHMcLT+_;(39KuV=sCo7X1i6O1A=O06g}E+7YE)P>sbu(_peWOJVgvgx_rnx z`?~tTGI$Sl5XG~W3pw&dBYwk1BLF7>WiHksgdcExe%OM7VWS>C77~Mv#aAm?P?W?^ zHXjUl*~e0mFNLpD)DF{JD~{P#_7+)I;bm*)#TBz{oJOyRDBWw<>-G?cXxoB+yFzi! z!t!Xm#CKR`i*LO{dNz`;T$|?#4VMNbL=e>jiU^=RHgry+NB!fHaIWJdK68;uW1nd* z7k50nIry)FUHiLxIqsl#ggoZfd9DzVpm%Du>j_RUhs%|E zX=ffK6^g`-B+%y1JvcvmL#&>1SIZ8j8|=#J(WbuvY0nmsJ3m5gF7>;&$S>m1wsisZ z0uRV9on4>c4&4$GKcJW1(8cq6hK_rLp0*zGL|60jyXD0!&z%tw%As@z)?A_BTDg)O zY$1=pkGiYYM@kMWQ|-M+;w`=|+N3R`WkWP3t!7R{RMshzknbOTi`RnHd!A47TSwP5 z!q>BXdk4`j0XY;`7-(hAtUzJ)DFpBmQy4WI_l;af*^|L_9X)wTVd^CN(x`T;Ed0;RMIDfIY^ zv<3bd-tl*s!(zpwmLp&1a6oPiif&aK!(-#Kbkoi?zj8amA8kZ*pk!@om^Jh^9l2K+ zb10jSEtLB&HbhIEpk)&c1Wz)VY0cbhGh><@6f|zqZkn`B2tUk$ns+@7!NCU=+TH;@ zPZqm44SRY6t;l4#;bYyIKNY*nIq(|Loh9W^{CN9<>eXZxG65=fotyh2FC!Xs6E^}& zJjo%c^6{?ml1vNVUq$_$YZI|J``^4$=o7G+_Wc&rssydhr})6UBM4f2Ga?Hb-vdq~ z9C33^i^CJWMY7|4{*opxj(j!*MQ*^S+A}CQ<`+Oy>h~K%cNA?E!;mc;PUcn5O91{j zMD9tU%@{A(daIoD(A!q{toGX!+_gR4jDdGG@9;r6Kg*J{8nVf<_d{RQ7<=9LV45y1 z)u~Qq1lcgO#$p?(jQPVD$5pg4i#(kcHS8{h7IBD3hLnEk%kKYLvWcqnr>#rb%MBrE z7c(p|OP3Ru7p`(Rk6cXnLXp!XLBoOoPzB%~4)sCCc#v6#0fOke`lJ_>Jn-)-y9Un5G*Tm)4&Dtx(6v7wdzK+b3JtcB(T3=^LVL%q2@x`s#xM}l&Q)Sg`?4&qD z&e&IF`$w_Or|@($09SLMV_-+OAM1o{9M>+g9CGs5=n|cc9wD8712^p4u1Wq%WGWO? zrsHlBwsyA0ERCJJhp5kook>b$9Nm2HCmOcV>PR~+BAxw_q80W{Bir-Vw#k~ul zenUm9@nCt*Bk-i0A`6FQLNhP9^umC#1+#+U*6c|O&6@lr&`@>?aaN0OZOt;Ru=OK> zL^`$${Vj9ZPQG45Y8M65Y;WW@;y9F1t8;|;Z=*YCa_U>Jt2%a844zMW-8h_x#Nw2x zZqKQyt4}B02$P(y-BN4Lo?xy&uMv##m>$xw$7HgME&hPx?m-2t(vWwcz@$AgGRaE) zn_HS3UoTnN#n#Tw@0;BVa%HEc=2FsUyjW$0H;!2r<7>CS<0VZ6ZN@@JXK3FM{w>sB zNqBJ0{!;TK9z?@U5?gU(pO8+udvKBdJodsshuS5i3FYA43-zkBGMRgonqym9N#IiqYdrj2+~-`M zfietfUxLagyW@77PG3UtiO5%?tHcriHyKX!pM?0Y&oG1<*71Zd;oc#`8NvHk8vPK& z;VvQwgzL_OU?Z<~$^Pz!MEO2 zsMZ31ltS^sF|#m6VD_4|6&L9f+sT=9r~3pAxBD9-fDE8;++h+vw5{Uu;zn5`n~LY1 zU-;7xi8`JWcCEvVOwfv{%A12T+{i9xE~Mv-VMCds|JpDAF9i}5lr;n)B@*oXZ`ENK zyF1B`eWIj+lMlx7lNi-}n=DFpnkY>Glq)U+TBKe^q9xMmcfa4|FMpV_x*X+X+U$L< z%+vr1w8Z?liVVCwI2%$gy69k(M5FywF9cJ(_WlSd>Dfsm{B%WUi>sio1-3XCyRTt; ziw9!XG{ppoBPPi1FC(hI{uATBk4=x8U@_&G(4s7-eYx~YB?I1n^3@}iu`E#`;|qWu zFE89$-+jC1NOa#omY)qf=jVqfHhfcTeV+&f~||Qwwi|(=D*D%z8LnU440bz+Xtk7iS)-lnH%5DaQu&(bRH02jMt!Gl(RZ0=0zj8ME1wW-Vq-gIHm7XSAf{TGwedWxrNimSO>6ien${gB( z%>n%t1d)o(YNmBRa!YCVL3*tHvz&u|aJw^vIE{^$&to_SgKZ?*_H^USr7-NuVn^ zz>w~*zRlgb86eZ!SH!jpFIszXqeb^;?OS{LDQx3Zy3>=t)Xd~f50Nq%vjjcJSv2I^ zrwcYBiX=HvJ7;ftVBofCCPZ!Oyt@X<>r~oL|gRZGjrL%uC zg8j|Yq%nxBmXA4A_)~;V(2(w`(TqCMQ1;tJ3ApctSmMQF21Pg_|1jq5TV2bwvR2zSOoDwkes`fCGXb7V?wT&#}bX<`)_ zY%nA##gUYx%He(s4S6MM@6>c(k6Yy z9HB3Hw@7;ypMq2&z#D~OM0c1++%$k;$BIyQqqW`DgOppfu%20aDy%Sij__l?lDwObtA~yayiKnSvIX5w?9?D`Tpo;RIl5a~W z-6bui+TTn8=!xljdy!})v1vthT4vzKw|fT69}f(1gR1Ru=qdYL`&nm*%3O|I#M+*f zB`5WZEb=dS94$azN~l;q!2pJYZ8dVN>P#QlPvOJuwpMc8y^3`N`Umq>2!f5 z`-_?6&O%0{l9Kcn|CuNeRi%oY8RrX48-l{!xYCxMbbQoAynZ8d4!m1tU|F*nxt2`s;&v$;qal#vH6_9`+mCC3Tu3hFD7_-CJ`|Hg)(PcdFtN;EpmS z&M#Zq#Qh{jIQ!EENB{aU+&RP=#jksN^5*Ab-u}b@XjFR=(=6s;j8K5 z@FXA(bmRD;CE(Hn{{`;{^na&(9`|#tSL5VT@DZoTBGX%29+Wm3$1} zxHaR+WNRqFz%{n*pQ|C+kwl+)t*fmq4Vq3l7p8~LC5;dAW-A*r6Ag!@h*SuF@C?Nx z`Dpn+#z1UHy4MZ%Pi8Q zW`SVFxDbzZ&6!6$dwHH)SYXcPO(>fI;ROp%qz^$HSDg3*qKz#Go{>reJL^5P4jveL(jVoY*=3F|$ zASO%-p{JajJi_Ahp;4!AOr?_j53R?Y_0I!Zt&LFfSMgIaV8 z5-q@q$H3H`109$L%+m69ze=K35y;?hgY9Tw<=G~>l6>ffD6VYQxDUwRL(lCX%M(~< zrX~aH3RCt{nh+B5%+kn8(x`-E-yjyL; zl$A(cU3WNkK_ssdTs9S7k;g>S1xcS64v=n9P}HEEnYObc3Z)IAF~ubGK)Z0i;Wg6s z9BWq6wIsb1j9 zia={Vux7FF`v8kL@IbP2E$5~f2GfRy%&rnh!ImiBAAtN<(yu*_@mB$cx|XDoF*+$2 zDLaIC@saP?y{fVKm|RsOT& z4#v}B-WX;=!MK0KG%WMf4C26ihW~@^rA~r^UH6Lrqe8wa%3!z8(@_>y=jgV3m#@sU z^-jCvL*(5+$IT!12)8#dm}`nkwme81oOhqVL%j3`i&-ge+r_*1^_cI4i!Xc6dK8Xk zMz6IjGwcS)9tdeqYoHt~o7e)OIY)l-t+DU_-b$fw0);_14_-V`@nY;xFN^GtMBT@z zN)b<*vapO~&TL=tPZ19Oo>8syz)Qaqoyc=a-_7Z&`k!7ogQQ@9==rcS8uwO?doE+cbu!x zEK8T&w1nDXtQyKa=<=mscv9~@IMV07M5@LtI+HLHedyehR!v^gXS)$-jam25i@}@o z-<5@XmuN#@#T$n*mcL3<{Py+IeO*d*B z7-a|f(ru^{`Ng!zhRb>36b$<>b$xI)8LrFxvQ9E8cRWHBE+d33c?Wbo*p+6L-NtTY z(|R!+aIwK+?%V36q%G;q5PQ>QFJ?adn~!DpAJG*-;XJHg6=OA0Aprz3b$Vs~Ym3u3 zVmRzxFhFbJ#P@X?&5gL_5QOebr?Gj~7CGzTEZaQ)%G>h#MUvdt9(lf9N2t}F%Ccv+ zKj{bj;D=OsYL_-5X_sWf&wI_6YEj9~u)>Q>@QM`^M$6pK&S9WiJUW1X*WhO7-vDX; zEWQ`@yV0HW5#sqbDLEFtw(uSD`l%g@epccboemnR*~lne$s&iPR{6#7Nh;}G%fM{Y zHVsj9T8a$6gILA_&FM074}O9KG<~@|R6=R8*RWmz2mm|6zuG5_G56>}BIm0xPQL(% z-M6v8=7qO9XjzbEs-M2q$z$N=_T_WcTOAX{&t;G@h_5AD!74J&mQtAYm%a%5!h52A zfMamUs#iGbnH=qhpsh_%~SK;7c(asd97JN)zxHz+DyHCH1H6ETGh`0vah!>v)M7|NJr8J=W;Kt#@b*p(5o1s=0H6TLp6 zQo_tKGW{2?jH84z;mn7dT7+^N5wTi${FPUoX_?;5Ar~#q!j=DYzobm;pG81wa5ni) z@37vT>m|`RmpxHU^o5+7*z>EhnA+{L@v+??+FoT#j`E?5yiZ?!S#{KVM0Kik7v{Oq zG7U0EV(jIgEV&I*D5QkXS^Dh=-oUNO^>SPZB)%g)UCv+mN4XqVh7&>LA&Q<~UZ2Wq zxW4@x0+Ny&;f2^dJlINuj+MUc0U+>+oEz(;{OB&Vy3nH;R8l952ZK`l9T0W78E70yz)gJ0E}m>^>r?!AZVwvNT>-pd$<)msGE3g z=fs{yMSw9?kgT5W{x>cr-4|7qq=m&O^X(&xmN>k#M5&id-t0M-IcfNHGeo?6i+^p5 zCHZ3w8YSC!<%~IMI53chQr5~%6Yd@N_fHgtxT>M#_;9A?(3QGw+PC4#0e>R)`QZ?W zUWa4Zm4cXZqYq~{rWKq6C&EixQGp!tZFEtuXEYfPPrd$Ghz?2jP}Uk3R`Pb4#G|x@ zx|gXh1ZnH09qsc6sy%vGz?{FZL7`7G1wX!uBUV2MD}(XjzmCKa;=FdsXaq7{DU)Nu zQA+NWY6F4QW$U+aW4Py zz@mAlq@)k;53FH8+!Lgf-^G*FQ#ouz0fYzQofFi#89y;T+{Mgw6#0UGU}&6+e=#@E z>iFgp)zu|(pMwzTS#2$Py2V-}v-De;13Qae{gyGTaB8P9H{Fhblhrk!xU=JC;C0^_ zN&{wyq5^$UHayw}QHh^svmKej^|%%?S2X9mM>=mkKEI49Gv|FYXARtTB0x5FZ`1_)GME3AR1_uL$O(w^3fSwSmtOLY#%!_@%gl@{*7tGxt_SXvz5LJmlFFhpq^fh z6duH2r89ME=DN;?xqzJsJUcOYAXd}(3Apl;oHg|7NE(HP=1l@o@u`M9>YCyY| z8gTyv^ip6;6?;5?Sj@R|aBv!0L$ke-4#2A%7WQljEMdp8|BDBYtYNZ$0&WAS<^>Xy z0|Pwjx&+2ff&cxc0|E?zeFC~^Ujpp{`zKuMx2GbSQvUhE5A-rd{*R8dQx2{C60<{e zQQoPdJrDHNUvTt&gA;Z255a%`4~#CN`yc)Pa{WILh(d`)k3F=T56tf=_o-k}{{&tm zdcS`OboI#pPbpPCx|N7S=OiUJdH-nQtsn#bYXiHN21vnjHj1Y-XRC{YLfQgW)prgv zE=x++GlKlpvm#0$;U88%dhpE3!(3+@XP>5ZIJMj*T@6dM!M}xn+tL`J=B-;UhTLBo zFmUg3*_51ws4|)v(p20SJQPH|ldc&k`ci47pJA<&lFQIwS2P%Bdy5=xg z7Q!=J2PKTK;Tj@`;f|#kljnp+biZ$jN+NtOmU@G~ZWUB83ss41n+U?{_a6X*8D8@g zM|%XwovtU@`QfcZG}SS* zThPn6i)=RF#aO#Uu;+htVMH}j+%@6>5VQtmAp?$3DmD4Of*m3#c- zrGqyckJf8k!r*2sC@PVl7ry;yG|eYuR8hN#sb3F3vF$Xsqj{e)9)MgE<`6S!O;Y0` zJ5_~Y@1Vfjcsh%A19h!@m|%CojMoRl6AKd)H|oSE#Zz)eba&=ruP>9xYl~F-r9ILh zuM>XLRZ@oTc^OlCsTs%4Dt5^yJCecU`6$IfWVJw_M3An)97}*~lPiwN zs9~$8ysxMlPW7#;yw9%bRf1U09dSJo!fKvHAiHnob|Y#s2&RVk2b-|bcx_H?GOUo9 z2Bpe|f@2O8-j2)|1|&xv}^T}sCqv8pt~9;cJydjqgZs&)grIob%>ieg4H<|Ri- z?Og()VQly8anQ`g)X%`%E4POqV9&OH zDG<2w0UVbqUuRJH;o+jTpIewZ5i)U*hGcTuOp_49X#2&#R43zCVRo#4C~EhQHu5-F zTez{rfhwtTM1)E6EvceV(N3>Rc{8b>#Pida*WA)q5R@D*85bSQKCHev&h-USrSav4 zy}YA#NG6t=kOGpw|y6SAvat!^rLaD@_IHED?LjQ+(7>}SZ z3!ZQuijf|5hq~+@e88T+FfT$Jr2zvrn|;g@RIb1tUHCk7PYKr{{ax5urVEx0Tnigy z>}v@CD`(rTMMc|_bLnYh!)K{?8|S3VnwnF(M#JKi!a${_09}z=8AHyCXNiY_;w6_G zF~?C_)Z}4gC5B=tlsY9CyB;Q&%fYS_Ktn}4&aQ__t|AN)V@#6)m|57_$i{EC=A{t$ zrO(064bp)&bA?lBIesOnd9sgpTub6qmRs*RBBE$uw9BMH2KL(l2XM*YxH^GlaRBCH zN3+i;xpZ{niPFDAuwhL*^wg8rO$?~nGQKGh&hPP<(JiS9q9DJ=-k!z(izo%=LHB_r^?x~SYr@?o&~ydvZG zdH!6?h@%F1WyTZLzWFy182#mZ^bah&#in4FC09LBWzV;W0n@D$YL3Do9( z@_|-qrb3jo9Bo*KXqr|GpD4}kU)htom4YQ~@gPfouxY%s1e_;);g0qj<)D;G6zzm& zSv|D?_Lyi6Kj8`2(w57c>ZDh{z%|oR!5!Q94 zKgJEifR?dw#%;_%plA1U;pK<47{>1#iL`e)y?t}sz~_D$hiL-n2E=7|%M=gFbhpyF z{I%GIjQ9(M03Cq}xvKz<{Dq%Y+$)byuTO)%3E=bbCXm1TYLS>KU3f;_UB#YWM2vYM z!d;0iBPwGtnc<~|UpT_|?QJZak&S@qnVh4{H0&6p55z=IsTy5-27@4wzPU=u5Z*^& z)FXrL31uBL``mtFp!csR7iNC?!#-o&0dt#jy+N~@Hh1CWPmHSxhbgH|I}0fS8Wu-F zq3tz^vaA6I<}gi0rS{i2dWe+QX6EcG2^_4BeJtgjx(;oO1dcabLA~EfZL& z8Wx+goqa}e!ru;;|cR9K+ucCUC8of@2c#*GDo$8sD@|a81kc-Tq z27lymnfe!;D~`0F2f_ly0n}IO6|CEM6R4Vjg>kzDn}2zaPsv#{>FQgZQ~!>O8(4^y z$pp9!6gI;HgMPsf?8UwXm7@-__;?1(FB3;bM-~xgw-g7swUvvrKIfefa0qY{!2qF+{t820K4o#p7A!8J zC4GTxA3S2)b{$Q$Q>Z}B%UF*B`r!2~f8~5GWeBK@~3whTU%S(wr%&+-P(3f?QZREZEbBETidqXp8NaX`*P>L-#mTEHy0I ztQ@T(QUq_@e0;aA4DZXXwz`#CJ6l)Q$O6yZ_`CgILHWdcj@0T|pA`$Jn6R}#(Rj`yUv6#~N!)^)&!WT5)>bnO z$^yoCIZ;KSxi6$pmr&>DcQm1KPV#RYoU)UZ6K1B`u~ufL@v5pOn05hQ@3;NOC3pb` zK-I!S)y3q4qftNRWx)n{ncbLKo(uZqa(K9<`mFWuG1fS8HWLo&vy7w^Doj~x!eo)5 z!uMz-NioZ0PMLwyC^#!{0f*Dt0{bzGtlNI1JWM)SIPu0rq~pVA=*r(rvZGNMaU+L` zkz}%?2FWT=P4F=b0tV!?VAzpo0((Wyazlnw7~~iO`zd9vVpeB5l%K*pdDmr^F>VU# z15|ia97^5-15)^?#9($36fWV0I6)c1ETX_XbbJ6aOf(NAN3xLb{Ko*>#AW`i*k33GKJX%S@35fBd#{in~$(M?;oz>gmY*zm( zy|%zCBbSX^St{F)r$WZK2SU?=^_xB2z{o9VM9wh2@3&Wz3AHP=UJ{Zd`rl^P&92C`EVV z%PL_jafY)c9px~Ye;m6o?=$5(1TRx<@kCW>J>)iRk+mW352VU=4_x{c%hP_ehx9HN z*(>Y@dnqUn!33U2D^G18w|Uz(i-o@1h}E*5nn4A=0d=2s=()~eBA!Ocpy3!1dFRP8 zBmwjrgN)X&z|I&I?ijA zgv5^O>=+!Nm49Vad}E{tLTk_50cVloMR~k*S4Mz^xdl(H_hL;pg){5BRvwbLqr*i= zN3`B^m-QSPk8(UP0+xDU%wYPSJliSI^p20`J=8pk^@n zmm?t%5D`gmi~Az0@Uz+hJ9m^;KAfXZ{Lfx)5_Sc20T{mm(pF_Y82yTs-&yp@ufF7J z?mWo?Y97}#J)VN5sjOXMlx9j(9}EQU*Hjs7h@IO=a_CxSQ+&yA`^h!HfcmsR>}GH$ zBAN6p2koxN*eIfDn68Duby^;FPXUAhUPQ!~5Wox{ISQ8v+i02pYP>Xeq4Zil_a%)n zhRg&Vab99bz`BnP$r|`^$`pKKiX~*(Fd_s_cbhar_yGiXMUX}D`b zaEtANH$|Cu&$AEpR)S3tC=q`WPyM`2O2)6m8azP#Ds&T(o%muGAD9G`!=)JYL+?b0?-O*0ysZrztwO^AT0=aQ-wv z;Ws*slBrUW+cqI}EGL{Yh6g!lwbfrLQhalL98 zdM@|oZ(8|9Rr<%OWhpXy1)HYN-tb0Ljs z2uaf!ncxVE_?fC_Zur3+wENbz^+;Xvq1X~B%Eb;BiViH=xv#6ue(aXuzmus6D_k>f zz05iAN2b?KFas2q;o~Hx9;0w0$Ad<-Do1DUNiyJRk+t(%D(1wDuz3WBh#10nFZ2%m z;4U29$ujS;p8p!Aq$FU$xk>DCvhmimt!xHcSX@ZRtVsa-IUrae-(#Cv&B%p!{szX>0(XY z8;P1PkPiN?jpc*4E0j?1Li&*Sl`v00tdp}fKliiznnD6b{mWb$r7HjtG1S7E8>{G2?KvRuSpBohB<3 z&~H6YzG7Aq1`eY8v!?HeMVvxsALqw$pQ4?p(zt8AE*8%@yLx=pAUcTlog371a3fQP z1KBY$$ComvvYIY1Wkd)gV) zjor=#5ee0DI{vRvWG0g?X`>SzV(0>qld31f7KsnMGc(n??|e8}zy9nZpPbAGwQ9t2 z0Y8#p=Dc`m5%_fzd$B>mGglIMCo@WwJFcOy>w{mg$BLU70z`dO(53dZ<#opT1jqOBKCNI9Uk{ygSeO^z!re_H*_R z@Q^ezcwf0^?x7mR;Xcei!6`!?XzKtEKwVZnvm8jO1LkEes-msSR_v*}x|FGeA*iaE zH<-%Q&erAUbB+zi#2mj3x2B)q?Bx0fdN^;9?&KTheSW>}zrSWboSdw1w}tfx_V(~} zs$D~lb|j>armvj*tji-YPEN05GVW>PQ!lIOV2s_hBr|cLGabKM26wbf(aP9ja^q7R z;@Bh2I{-$QhqtJ02F4%wJgZsQr?_y58V=XnG9@+1qdQem)0fuX=>EgMF#e03s@wd6 zqIcLXN$dBRvjCoOd;dwOWHjJlasxqFnV^#h7nggM5oLazsW+vlMVGwDjW=Y6b%!1U zspYu3aV<5HV#_E@|Kh6%j{sOmcm;#zgK~g+hVyka30LTc6y3k_;`OJw&g2#9`!7=& z_Ic`C;CAQd;fXBlUvHb8;hko{T_$!NwmSWf$>3Vf>A<0IEf&HMdABO|<^Zlmq6o+5 z5?h&rv<|a2ZJaao9g)+SN385mz)>Go!Jcz{BpdmgA!H4fE17a+ehl)igCs|OKWTHi zQgs9^u|#-Fu-C+U>$LKPNU1^HOCW&&l)QlGE;blfT>>g6%kL+cYjL!>hj5;)2+q=l z+q46!GnGz9nQ=~xSl7^NBh@~W7(!SlYA|f1ldzsmaQw%B+gneZ>PXta4AfDMMa1WBfrkJ5b3-Y zO^W_{pNGi3rZ%I&K3T~VJrnziV725o)3peuT4k{$?*78X>NKjL-u_r8asyjy54I>p zZ2(g2VuLCWhl?#8u*w{8JXcnSSR^$HCe8m&%b9WSoI303l0ukm@b+%Pu^K> zF^fu)pF{76UK}=jph_hbeQ8e3_+bVF(V#IKgmhMj7f*-sI>hIe|z&~nrVAe?_ zc!fzoM7kxt4OwKI(H5H>nJA1ZwN90(oUFlBgBp|!SKWRBHOMF+Dt8&Y^dRT$t|AY8 zBX|D#8+4z!hKnyr9jn!~VU70)9Y#_NKngi?9PUAOl`iUA| zFqgK|AHPSOra~0*!c{jA!4TIU3OAUq=kMEQ4Nap|XHj+J!LKjVpk=l!*0szy z1@)#a?e-iS?o-RUrGDk*q&b{%;`I}|!B#cPTZ=wO9GJR(a`;b*VMhutiuGFD$shn1 zZ#1Vkabo015grjM8%8Tb)I*;Cy59bwyKauQ?Sb;r&dE3T(l^N3B{chRx%a5(9pw4k z^5W|a0$pz_)!l;vV}%VoT>_l_J>IVF#@99;)bC?IyF|y^bgm!s(dw3(|oL@anPqGV6 zjo&?-NEbsA^98hlgC*?V$CfAqTnNGi&&anbJpR_wAn!$8!It;Ce=_3e~}Vi5w!>0d;zFbP9_< zy-J&o1(dZ$!iBxwFC4l0HMi9B4-vxAbcKa%m zD&wt6sy!C~!aEk!L|Xazw?emP*zEEsV@s!M%epjNCf3ZeW|*f1Kb&zx;8d!ZVF}ES z0_ffgVhYC4*s=G+-hwi%nw1QvNzE5zrk<{ZuK~J2z3iu#H-v;JY5jG=Lc`Z0=ig}| zA44uO)7tn5Sj!QwhT!4-qTFz(1A|m725<{I+z%h7mE z)U)OT8`~v1j7Z$Mt5kmKA{a7@Z0!Zect%8Y+CsKqZ#!JaaYI?Qb#oVdY<$QE(X#a% z0nBxYd>&}saDNv}-Suvo`jm047S_!zc)~zw`1rN9wqP;nuRGXVtK9Y1TW%f z->`yQ=f6ZoMG4(@@;uoEIQ50(0=QR^Q93$vy9c+g_Z;eLaH@m674LLY>S7+q=hgqw zT*;8}eV|zN9+=?!pTt#o`P*&KGDtos5l0Xrwbjq!P%`9>hzL0#-GL1>5K=dnhMObi0rXz? z*@F0k``4k~?gPoEU?)@Zr^yolf!X`77cx3K1EBMR-#7Ov)ad8sC2GiEzlrB+QN%_! zc*&lVRh_5E87VH|++NT%;q}eU)iX-yHOkh7hX+jePvV%2NGI$DY+qCl=RpF$Tltvz4@D=FWxj}mh>g3-@{RZI%ipXXIPPYWevjfd! z>vuNnC*c+6OH(hogMnP`UHE@D9NqPZo)+1E4H66w8_cn<5@tTVE(pdA0}EL{BJDy1 zwTPQHY|Qa#^_g)kG&g{XVZgDGw^Eb1?1J!tR*F0aI;B=#dGg*?bmh?|QF^rBEg`2m zp4EXZUCK*wwfF#b)VjTy?9-=CZ;5TYHfxtYMPJ*h?xkdMwyl4ZN8(Q~QR4!j34bj#dYr{7||FnJVCFv1F@EO?*2xxsor>(&4xMQ9CD zzg5Cc%wFs981`8`1}Q&d{(hcFt4Rm|p}?ih)uXME81t|i?tz~#f#Ro1SuSabmh8Aq zyN18S7dpYW!NPjGJ*B~Mi>I#}5-+S^GSQ2iOTmTa969SAb}ml;lzNxwQzQA=G+403 zWUD=iqq$17hT;98z)>71CBtaKGsT}?dT~K&EfAHDpO$w|hq@7f>VE>KU~ILcGsn>L zmxs+6IfP|3O;XUsY5;y(M52PQr?+MQMe8DXx(8|&7cq10s=Kp8w&I7|kkw}ni(2k{ zDk|uHl5piVMvmG`e@mM`81vT*F6RaNi4Gpy@j>7))g%89X5%l7+81|CyNBz%{)?hV z#J!Wam6s-t69bPLZi*ctlVjiQF|844O}c#$*{xN!)CBm`T}c#6yRvK7+Od`{gQ?g& zxN#mh{fmRZc~cOyZhuAG((z1C_cK(k*kIK!DQmj7Mc-P&!#c}i#3Q1n_JW+< zrDe;Z>f|XsJ{w%_rQ1@Z2!Q=h!#+OHU4Lu2_E(u|k?Q(K?-kCyI&*0e67uLOk?bYHGmYdz2IK1Dx)+)w>Ke=S=MLLAP) zrlN!{;Wr7UiZ3SEOu=BGr5WMU5QDG4k)@Hy2q-yFMrOr4CdpZAm``1Ft=^cpxLR7~ zXxC-n(e6=%B>ASY{aii#H$_@uA8p}i_;v%Do0}Vw-jpJ6O-QA*_`-bg867VG`UC%- zGF5p;y@=f6)luRp!pYEfyBFUB2~JK^B`D1f<7fVj)%|&E#+33XfZ>9PSmnotHVq-F zG=nP~n1aMT=gpNw$M4Ss#%ej00FGIgd1~N(%HBBd*S>9A+uEtEs*eUw zHE1EU<|eiVDCxm};G$zPS3@4wjG+QyI7D)x;TVLrBN>@JM(>|A4B!!VNQHRs)JF{f11OT2~%cermn|`2s?&QLpe*EpX?Cj;!(IFv+;-S1 zc?~85%&x2Sacld)9?|w2xL;^a&X;^vEZ?_a6$ic#XOBXAjryPNFyjFejmIiZ@Y~Ke z;*7^sAIQFCS}0ud1JIGCrN*Sczr@~WGK-Z1$aYLvtcu?{WwZd|54Eu1gKf3103Ko{ z_1iNYFe#H!A4{4hN0Zr!XHtyNXW&E%Ri@%*7SJ6!{H`6GrS`AU;Z>%3+PMU9x82iJ z_k=lmy;cJ26=#w5C~0%`m40o#L&Wo6Q4OQOqFHItdhj@mzZrxak}ZHNN+L+rgKGrr z_lp8G2a5jTbh}Mi6A56owC5GEPX*%Si=kzvCH%J)WH8Zy82VV+FDRx+nPUcrosiVs z`kKQ1yRq~18fU(!^XMWTv%>ohSP$}1hG;k)0*wM-WJ* zt>a6R3oD9OOC96kGd2fM!;>*|YJqkn*9%xBY<h~tJ^9kc?oS3n4I_E`?rcwDJ z-Wikq>H@Owe}K`x{cE|sG1AP+=lCyn z0CohLCMxq{Gp;U338@!hjqwe}x4{k)igwUIjg`%02CWURsjI{?l%`$-BDjdZlH9B| zhKoHN3cQIC>3BIeE4gO|PPgi%-)@;?o(6wzm*|u0o*HS%BOEaf-1e{6R=o($XV`Zs z#eh;x0#n>1r$Oog+O>T_()0Ma8IvY{caTn9PYgHvuPIi%Dk4OdN*Ho1`ybw@U?cchzR~h`yzkFL{*ipyF?}mqCY*q9M zCPDQQxW#|jYL)l|k>SQUvkOPs|F$#TQJG8S6jg{b8%{f_abINkzCY9vgt;HxWl#wq zO9DD3f{rwP{19QN={PO;+vEB^?QIPh>dH7wYvOmA{EdZ~zuic=M^<(8VnEcGGmRlr zB#cI0sUN8J$G99wRYOj?-M0=|)6w-Ybr{$@a>A-iA_t@6{C$Ic1iH%oI{yTP%m%Is zjzUK9(*=%v+)O0+y62Hj`ejDGxVrS5ZeNg5LHPcK2J|3<2NwKyKRDsQ7and^ zQAtLHjKNyDtWql2mm6R<)*>8cL6_5=XLoDGLeVqn&tS^z0RvHLh@xwkA+En`xCOY5 z@tV{^KoHnlv8&|`oh&nXgR>PxB3SRzd5%zrAJ1Pul}-F5EPzo2%sl8q7$ zoU}wpEMI1}z#Y{-x#S4P0*(`o;jMUfZ*)bPk`wi}pP)FK>0`Sr4@p<#_w9o)9G;g6 zm?>ubd;ZKcKJ1*#=g)zBt?JM~-5Xm~pMgE*UxArmw;d7?V{6c9{sHQAB7Zd*vLO$L ziH<+``%l~G)4q+<;E3kk8ItG>N6!~rOb!ib4KL*XyVaNg@pX$N=o(ximH0Fp;qkX) zrtTfEEO6XwOBjL;WYhkcUH|Z1wTQ3UdG_n{0;fg3#*HRPMj^{D_*dmVK)?>GW1$20 zvsh({bK@o9M;qYMcQ3Uq?1PGDy5q@w8+Y|`NL-4Xbw7Cgc+z66z<|^0=2zl5P&KjO z)LHql^@V?)+rY)K+2Rt?zing3+f3RrFzrflg}a!l=}+2t^br)a5GCHPAOYXw;e`*j z61IZPMoOxxwRCi@RCAMIHFd^=Fxq!*rl@KYg9)^Kal9-$NGee={Ce19kSO$X z!^Sxz+phBmyrmY0N2dHET`d-XYgxTdz}890U39$X2JiG;3C|Z<6FiIhPqk>dOTj_# z6YZBs6>IcTAn)6#(oG%meL4Z3$=wSBp6lzAVi|=x45-6r^ylLZN4te<**e}B+xU7n z)(p+-f_dKpl*q;_Nd-8;hWPJU=mZtMYt%$TQn6u7HJ-x}>2c4&_S2ZsY;CmYGWiy=z6hrdN5(Xh9s~-54swU=E zH;VVAKC?WoC~ebxMojz6arS6JWraK>gGuS6scEhpjSY4fg4}G6Vk#^Di)6+07bjBP zi??{EC}$+^_O*p);FmS`Lmh}k`@ur5urn4E_sH)0M>sKWd27R;kR(Wx`x}qY+YpjX z-X9e3M)ff6?^bWY!#nFERlRDV{Xg61w~7gRA(b2z=n|TT@a>xz54K;Xvb6J~t3f@+ zqFqT;IXA|JhV+oxj0<5}*nFbIkWbcjN%Eraw3Ly`ALm{`d?M;7%H_v7R!5g`wtXjT z$p;1rnUFQY1i(LM7p?ro_YME*?70^z2CtrlI_}F@1`RsN23b=$fb}9W?wMDS{@m6@ zPfac4!9T8V;FPjldSQ09GD)C2xLYx4g9Rn*E{)0i1+WV;qNtbhj+~~4KYAD zpGUh!>S?M%QfQ&LO;DassNL@@aSC#$h($lFWkK`L9Qmwk|Pn->BY94Rqy%EsL0qSwlYJ-CN`ogq&dp$YQJ1 zYPd71R&1txdY<0$_5Enowo1jMHd`q)|Egweu?Q7DSpKjlE%$N46*5k^QIPKJ{)%MI z*OlYY`ZRR3VRb5D*Vf48HXbiOB*j>`x38M&<_rUqrLob}NB8g|nl&;UtsMGP$1SeB z7BTs&f~ZK3UMY>U!eZ9vx9^@`eGn&-mz8h>0Np9}J#tlJ*k*vDnDsDr}`(}7mq zG&1pFgutg*w`Gz3%GlEj1wHkMm(0SXqwN0H+K!We-y{jl%rneAA9TMf3FBqu#AKc` zBQvLH35?sTsjcejm=pf%&GaH0A?OODc@;8v1Ev-?YKRj9)%H;8YQ@*j2JeO;5XaN|>%Mhm;ZR~NPX#*I{O&Q&=u6(cfjjY{AIu$h8(>qYpT(M`D zV>gWzK~2pCXkGeQ09HO(n^G)2K1;P!^gL?vVX_OVuX+r6l@`2ktR`z*HVcBg7*r8w zN_D%LN7eA?A6QAvi-8zfW7NC7u$tyV28uYmDsoi}<}3~IXu%MVVzgp)u*Ya1H*#nM zDf*-6S#^K`nSaVeSp5at2RWjTyp=2HJQI9LU_7(brhUa&a3QhtxgFM6P`&SBC*B4J z7js4F&bY&by*M*-y$QocpR+hWxW}z+lkO}el} zzR)oKaR#Z%Fm))w12Rvc@;eGT_S`lP$`{qAkst{~?9v%3u%P5es%NA?h|oUNxc*3VDLxbBe4NjbvQ=d$K%7p*?(%_=Ar zC*(1Lv&CU?Tj$yCw?`&kar1FMzzlo6bL zREH&Xn1cuUw{Np>vq=yaD-1jJF-5dK&+tNtn_ zqBXr4a!VVFVr;+ENot?_*cT!ZiGfTHVvQ{J0u!-JTRvzv;^F7~jzL=KaRCAP49Uw~tR z)kK1Bo)F$ZEiXR&nx88;7@#K+S}-9F__+&Mr0a4q&Vaf?{IyS+I$<8s`3pMn`2#B% zpRZHeWFu|fWMU@i`3q)2*?AHc(7^?)0$8)ackjv??PB1@*0t8X@edG)KNiF-y13Q7 zrCqCcK7v5{HBl)K@zG7}ig_pADD1XrrxdcUqbU?jm*0nzs0{c5I%uK<%dz@94ZEpU zcCA>n-$!?~s0IX;k8-u$#VBXL=u#!oXFWaO?F1ayL450eIz>VI@fJ?7svO~#yC7-s z!c-DMYQ_iCjf$k275x7--@^Xq|I6R|E|5Dx6V%$dvUZ)i2)fd`3(WWZ+?lC-?aj9M zkCXp%NL)T}C62Ylm|#Qi%-#Do=hT>;Ty-jSELc7QGIx!NO9QGN=?7SH>N;YNs28@M z5oNcgj=|L;U$#cqbm-#hQ|X?EX&nLb)beCf^S}*w`>s5YX6VU$2$NHkGvIAPGKzRK z=jq(4&ALYN~cJ!@)2k^Q7y=+$Eq2H|;r|up{wK_WE2yC@UyToTp zSN-u(*Hr!L)==g2?KbcxXu$HasVP_lMlWnLSJOJ0ev>(tusKLt>IhB@DpH>K6j}Xt zj|_%9{C=2tE<_;>w7LE@lQf9rjfxY$`BU-)nLEQ{cZ>{+IB>fM%K?U@{uvb`xyABy zczHQY29HS-?gbS@`AAkYeT*IA2pg^N8a35*Osc6l!1Y3lh_^1@IvfGinCyOAQ{pVq#~d-3AdF27 z|Jcq~tr&Dv6Xny_PxH=49XFU7Bhox(bQiKZ$%w#hSs)bPdwPFk`V+U=s+Yn-S;n6Y zhXexml*^dEugAJ)xBJATiaqU1gvPOQfo{@w(R~gzjQNl-GEYE_al0DGY!FVB9sl0D z)v~1R+GAbai4Iv7?4pl;-=~eXv+wsQM0JR|MX}vK)=~1fAfA@b)m=)uLkF%pw5Bc+ zAZ$|Og9^Te3Z-5EN@85ay9`0#mQq6_QLglH!UE3pSh^Cg$s_ap@$zoft=bsnxL>~0aE`h*Zf-@h>%@OyB~#rOq!9dd>lt)Ryj=6u6z|h1xo}4AT~jGBYF(o z3Z_i5_pct-o($<2cbXDD@BHJ|rU&e|pV_|;kn&;CeyCdKc+c#?sDw$)%F3Nxtm$KQ z@=V}RK2)rfE#*rQhG2Yh_KoruGvB}IsH?mTXDa(8ABot(eBlTX@ zJJt@Q+0|NfPB2}iceKwLH28V`LOOa*yYTzB9Kt^M_*R&GLF`AuWaSjbq7dT4I$d1X zu0?VbDoOAX46Ge!E=Z4L@6;Y=f4N(@r25U>>pQOc%>;V}`I>hyZF}iqimDtaj4QR{ zxW{+WyLbQ6A58?9hQtS!he%^A5DMl>jy&@`PDB`)rFb>%|A8PhDr|b3!JT|ierK6)IcwSn=<4b@`Yo`}WK&50m(FBKWlMh&E7ZDK?pG*p4R!3jeqN@$y`Np!z&2h!)!1x8t&&Dp-UIQ^Xfh_Yu2s zBJJWz6xu-wDeA{uy0;A4W}^!nItKd}&Gr|1Y%};*2A#HtFXF$MD~o4D^+Am^+o48W^ETaxF>4f2L&%)PPkVKop$c;^Nu3kth`e3Ta zgxW3zR7~sWGY>BM%Y!qGWaa*OAf^_dBI^1sCP?5oqmqrsQD(u;i)fZDLP)2tWvY0j zp_Be?LRN8$P%SVIqmwu2an_&7B978>+bHBYlvppLEq-7TQGLm+u;lWK771Y}3x6Eh ztxqgF@)8m%CPuVstBf9TKNs+JO_%+J-`tB`)b|_NWzGU+n~HP~932y8vGiRBaje>K z4}1k~?h8dx1^Z*Y-fM^IwnlO?4bbd-Ty)n9mger%yIIhL%T|%l5!*l4S7`0;50z@X zTJsb3P^of$4(KO)X%{ope%~*j_fA@S0(dUD07)uet>iC)dYe{g-$5@eo^)TJ)@6{g z65sSS`BAUB(>@I2v;#56v!%u@w8O@EIhri}iTKxl#kRR}(>Axfh6lRAKt*0A^>JE~ zZOMyJqDcjv6RWa@K-)$e0~hKh5j6rS4wVKFNtVe%yQc*=c}`sMkwQkKXTHEfe^rjZUTF)ULTBdf!y z$w1AAb7gO8$%mz5o9Lj}lAf2oLDgiR##o^;4_SqO0Y}=4V~&A_^nRTW)!ABJ^5kZq zF`9HPgefx^*A+3F*U_f-TSbg5*|vpTsul=_Jv_(4n`6=4yu$6YE2w>Fh|W{B!}eQv-o<$QeW zjwYmg&2vfZea%wetEQY z8h#4)zm*Msob|OBv(=p78mj$-hAcQ2cOzF06El-5FPI=b zlBzCF8RJaUhC>20*-|)zU^O|L(=!u22c#xrOV)w@h@QL&qV|>hmRY9#ChcC~xJ)ky zC)A=O7MGt|FpG!Uq(8A)s|_K)P`t_28;cA%ZD##`3NKYVAh$X#7&55qOQE&!Y>lc7 z_{%L`w|&)#8b`pep^wQ&73?L(Il3-_o$^ln8^W&^F!KnqcagY_ZD|VKDQ(oJ>E|Kb?Ff2PvXsf$eQIcTu5TqCHXc88z zFvs14n0~6fJ9JC8qh?u1ncZqforJmm&BS@#Z+FCVeO6~EU(kSd7u#XQmGkhShMh&b zLRR~mA-Y2YVO!V?6-M7-sFD3ZAazQ_=vp|lnl&C&;;CRvVDf7QN_Onq{QPsyJcE9A zZRc!7m2jr^5F#R5Ecj_&KW#)DXVmhhnLGZ@g6V11Ae39tQgxyX{oxVZ>TdFZwmn02 zTuq5;vQ;2UeS%AX;UXyRtY$fH4nwNMDhPUa!8CI|_tStJ z^X~mI!)nKA_FJ9e1RUhnn;1GU%YYj8)0=6X*`kOIGE6_MOMp~3RU{F*?}RgJIIU@s z?PsT*HrV&U-Eu_jMHQCnY8#2}F}G`2wiVb6By%SxBH<9{;znUZ8+~)Ny#LpsPwa4j zM&SF#yJ(FWsPir5xp(F|z_ZL6v{7*%=>PWIi^}}*7%^U=QlGlT(2`n6PBT?#h>dJX zaXe){>0gyFM@Awfr=yL10Zd~@hTTQDvO!p#-)_1iYC#Z` z@aVJbAaJd(vr$zVJ+bg>n=InFtiig(F-z4_IxPjUZLOl}juAN6!G(qlqnhjd^+2Pw ztj(S<#k$lW`d*CcPwBc^_FsbVADxGutc^E9Y=qaItTjeY^sPk;_bP$6YMlxjse#+S zU*W)%h#)VAP(0{vGkTe>03=vGCK~Uq_XUWsh@nehOP?d@t=6h#hAe5Ou|8bi zW{D|$mtm|%ykNQLbW(NAWq`QIm4&+#(WOeOvHOJ|H5}txBCfokmM1Te*GcMk6sluq zIb0_aQ3&NWN+VAm(6J9J2dq@YtlNk!GNoe!`VT-A{vU=n;RlX1o+=?8avuS%oU%B=b^f znX`_K{!5bV&-EtS1^37{Xx}&sTR>2EC&b*vPnUAV?z@!8VP3m z;*%J(>35ONAcNg4!y&QIyDW?%^fO=A(B+iASAAFZetdleYQ6sJ J1#J+*Dywr#towvAKUKDBMzHs1Yq|C^n?-&{ROCX>lbCV3_y zj)4LB-vS1__OtT9=V(0h?fJlrblzdF+-FqI9(9pOOo=roSeHmbzkD~7t;eTev3Gy` zot4BT_4CQ2rs+dYtD}BZ@=VIoH7{5gNT-TvovCt5m|Oqy_?X-jQ`IEk7u_dc-n4p~ zTy&Z%?@-spLlUq-c;(i)-P0qV|5dqo{q(XA4Db%^3zM|`DwjV6rCL9CjeG}UKS->6 z6V6t0m>qGwYSOH&M5hVVYu?dN^r)8${Rj;~{z)%cJ%5rB$f6qms@U%B>atNHD8n31 zb|;BIyJmR1`?z}eq<8jpl9t!k&B-&!?`v--+wEg9J9@Y}K8{(`puTGls*#_q zt7V$)^MX{U53!HQX=Fk68Z1_9ZpC2Rv=-kKm9;`iz%3?~DvPB6f+et$M!Xa;M->+c zSx!C0g9O?4+wPr{J!#2yTmFs_UQV`_yz%^%`aK4!bF@h#&Uq5!Nd!v;P@fLIWZzKl zu{~6UsJ!p|V(T<<3VGu-*9Q~4Q~c=?N{aM!CB1_i9lJFBC;a<_s9dPi16sc8h-2P3d#MNqi0QDptyWHYaFq55e@0Jr z^P@;u{|b0%2N660Y( z-boes z$H7vf@vZ5R^9e0Wm}lv;WxJ46zyzr*=F}$)V`P<3T{$x`!8uUAV$H>uY~wz1QI0#` z$bXK~_@|q|c_@7$k&5#}@JuIxAV0GqfJ!b^T1{8X!t|8#78DCE_6?=u^~)K7d#l<} zTE7LK*c+ud#^b(Fu?+j-;IBz1^{)rxEX@67v}U8Y;>(=|ha#RiJWH!WEXoe|FO zqbA1^^>B*`Q^9)F$-2`K2O%})=>j*5H72N7ugar9V%sC9GrSk35F;K5+$NS_9j`K^ z(Pb!N)vLt-`LS17_6<1=p~NJn#b!l8_ohk-w%iGHr5S(&_2PQE~p=c3ZgAbFwf z$QB1hgN!of-zPe46|pE6Iu|1fpIJCq0Q-eWTd zm=7dD@cKqX;@_jZN=aH&*J9^Jz{ZR&4T%)(=OjW^autB^0Pr@|1VGhmXWj-eXBPrV zwJdl;1jQUb0PK!}7M1J+d{^{RqOTZITYDNxx^TWjq|p%V{um1+bGAAFan?MVlfq-9 zEj<{n;BrY&Xkq?5bowW{L#MWfW=BZOy$Md6}(IgNJSo zTP{3wEM}&t;shT=%`j9%N8;__JH5!kQ8LvvYC%ZGg-kJwJzCT>O%z~J!voE)?ny#& zIKqsv*ar}Pq;^TsA-={~8j3VBBi8*!N5+4_1E>f4xRu&t#}Ua2()8jh&WSsYYm(O3 zoNG|s@4BAwLFK%0oFe{}|HgcnBazUd}1s~gDErT-w5k_*Q6!1 zkBoyAgpa;?|FH}I!@3bQRNur_5~gvoYH7)(-jDUQE32V(tQk8bLwP#{u+n5I3yH^u zQJ52n$n$HLjWmeTtN|G{Ga#6&v4>rp+nJ1QU=P^TCP|EuK|a9 zi^c2(Pq1i}<`SVs+c=XEywFjWu0OnnM;(j0=K;(GE3KN~{|30O4hhPeu6%oOAh+Pt z>XlAG^?qL^bHyAh(ceX(0d#w&F&`0`#ErN(j0c?Jy2TjhYMTU^XqmTn2QHS@eB!6k zNthEYjYUDiR3k4;8BZ^&cVc@@5Py}nA(ZkWqFl_+dm=dNi$cH$hkr2TPZx70!kfGW zqNSv&M%s$cA}ErqO2$i{K7uSw(;%dwP4;(TSn3PD%T~0`9Er=UN5$w3afqC-kXlY9 za*whgQ)?F+>E`<}?yrjG&XK@na-;TG{yr#7ytr?=g7y|x9#Si}L!%{SLd?NCKuQzN zcVlqo4}a$9Opx>h^VtAM4^pE+a2MX;W#%Yv*}U}sYIGxjofi!qVC%L7eMtVA77>;b zy!{tU&Ac2acSI_P4&I##`%BjeGh~QW2#hi1uifYU)dAqS`N?}qQCY4`Hrn_+w?d4n zCYDZmK03UV#qG$dQaTSwu&CbKyH2qX@^?O!`6KR?bC7otla^4Q7-OaluJ!&LYiDx~ z!(>>u39l|13V!A+c2oG41j+oJDPATzSIzH9^6t=N_G-FNm<0~JG9dZ|U+@c=GOsImo6h2LnZq6% ziA+w%!NqR~wNJ^-;I1K9a)^S{Oy$KPwshh5WBEZjs|=x1ImS?>Z7pq;z!rhz0c7N4 z?2~*h_)$0ogoE5?j5DYTRFrjd)HlxtTLZ9qKN^|FT*jH|Irb#o&0h4Amh^Cp(su4K-s*1O+|wybV)E zy>djw(0GRYAaWODg??Y4($<(srnS~=gEQ@R0f@{YLTLer)1+~S=6K4eKRQ(hn+=~rM8Igl zZ9C7xxmZXob2BU@8^sIctBMZvGcB{j8$bN_uxw0CC1Ejc%o6a)+1v|{OcS5QQc+gc zvWASD>NwCdaXSEw#q1R;jHXc=GP=gHIvq@KWp2xf_wW;;>=V3bisUFEirg#8RDB(%wcB=OKm~wnilN>i#eBhwen(W z>XXsGYEp@4Z}Qa-U*cuiC@q+>CL>d9W!LBD>*B8;GU+{X7oU*RNtz^S+=Oe0Wgbp( z6t;$pCQau2@fZ>ka0{s=LFLW_sD)6iR7*70j{EdzVMTJ2+sxB?Pt$HFQkLvF%^i9( zH)J>L`c<-3Z4lIcEJCi0_yiX!}lzVYz6g54@0>etUBYyn643H!Rza3kwYN zmIyPG9xL{Lh&FD@*49%$9s|qQs03$ZaQBjC-~iS;1;$#x1FIq@Vp@XP zuYzeeu(6i#`r*Vws-rJjp&rewoh}Vmi%8e`d&y2UHjlCos~+k9Y!T1a0e=pb+28Nq z9vy$qnuaSu0CPnv<2M%hQhJ zi{LPeIA@KESvvUp{QXx*u$dUMPO*3O^9+1FUcT3d-9mf=+`S%N4`VJ59cJ?L4R-gi zK3={)4z8p-kqN5!^@$Ah^YgpC{e7kMdpmvK4=!Z$S|3`O1GB?2qP#HR;@XfrS;<=l zpWF){y$GgFkPf)yJ!P>h>4(29xN1$9Qdh)Du~?VX*t$-@xVj>F?Uzi)mzMeHwN18T zR=R)DzwQXd@N&?E#pk(jAAsuTUNc7_@JVXI{3$q z8)}Po2Mf=q?vSy0BR-L00}!xz^^t>vGh9S|gMs9Rum^jAad9Y&knIN-+Pn5-@sqsC z@6(d=9bvK-L<&G*3W<%&+OT6cle#~!?ZrofkNO|Er!8!Emxk* z8M+kfgPmMx?qm+p+Rs?Gv(M0VMox$Av%tTHMp&~D_FiZsSkvGBV^?LqCP~6~M-%%Y zMAqHh=OIh7LkUUHI@SPf0cI%VqL1^wMzn;a^u-A|&nH*A zJ~^1WYNrkNT&6@(Q($>6tJhjQovQfDd`tl^lq{6(DI@2fZk7<{tIk2MNfU~$Otp|~ z5&K+yvLyx$J;nrsogoj&`$QEM<6VOC2PSsqCD965K>Up$deYw#A)JH7^R*ddKJCH& z4n&q;ZJk&` zy5>>w5dqHN`Fc5n9ok1w5x4OMy}VtVd;xwCGLb96@4T9HuaK*5$UCGo9w&^jTbIAT z3JSMq7FHk_)FpTg?|DJ&8Cp8RmybqsAbUvwPr;IsWdgxE(rGY_-zVjERV9ID!ny7; zJ(&qrbTzZ{B|0VUcwq{$eSspyosV@F5G`)1D#L8r5d4vEP)MbOoTIHS9PrI#X-2}k z*)fW$7nC3j59H)*D2_suI`ll1CkJclH~6HA#;MlW(U~rOIG0t+s7;LYo+5uqQSbI& zcuy?bp@_N>EyO-fRJi&;GGgKEZw@g}o_eZSW;My7|MbvqX--ZXGNJDR(kG75BB$a-SI=M3kRNbr z2e1j-;L2rQJ&Bh^?c7}I%BSMHHmzRlQD;k@nKec{aBVu*q|o|W-SvkJSSeBk1(dwi zKstzSVw%vRJW)wBm{0Mc%{ev}po>$@GsFy4TjV#UX?p1$oi1;Ds64-R0H;%d0$E#o zR2|O__Z2_D+@9@k{S{ze*Xpg>4>0~d;!=KwsdkpJkB^_r$H!kfFEPIjhO3MB{01>@ zEP3Wr-h=lA>HH@-+_!fZzk3AxGvp`Gd&xzAYcHl}hqTlu;+y(UjX}P>-MEl`H*Xg& zl>GC{$H{Rf-pSG1`y=^65RyFOY+T)JoaE}y8DS#PS7#@GFTX&doyY#b`TAqi?SHFJ^zT>{Cc97!kBWeiJ)Y^oBYeF6eHEQM z=5xdsybItnHKGeC9Yikk=R0bL@xtE-qD}I3&@t%3!_x^76J9VgMYmTQk&q4n&Nag8 zxNc0tUbx+`dA&E|nG%)LXJ`98UD*70uv{O)I*s~`uqj=~CKfS0wq@NlsiUBqKR)CR z@wFfyJ}mD+Q1I>(kdUNF@2C5i1f)B#h`}4;o;_hm6wR8iA64~UXslVxO?d~(6SNjhUX9&LuUDhJ z$Yg>wy?C|>sS#3a5PA?|;R!6nOj8oF0#$Ao&QSc>(DTaMKZi(ITyH$ZGycFm$7VSH z=X+XrXyw;7j4f()k-vS)iUsxjBe%}Xu}GbH0ei%?f%{|&-+oQ9IPF@!st`^AG$}bW zW0G#Aa~2L^jEET@vaOOGG_WgX!DvJlVtl&jm6O&I`K3=F=6jm zf2r((QY(9annEBu*EfhGfcChHad?4pM?E8ShJuHNst}Y3gcz)cB zJt85!PHMcLT+_;(39KuV=sCo7X1i6O1A=O06g}E+7YE)P>sbu(_peWOJVgvgx_rnx z`?~tTGI$Sl5XG~W3pw&dBYwk1BLF7>WiHksgdcExe%OM7VWS>C77~Mv#aAm?P?W?^ zHXjUl*~e0mFNLpD)DF{JD~{P#_7+)I;bm*)#TBz{oJOyRDBWw<>-G?cXxoB+yFzi! z!t!Xm#CKR`i*LO{dNz`;T$|?#4VMNbL=e>jiU^=RHgry+NB!fHaIWJdK68;uW1nd* z7k50nIry)FUHiLxIqsl#ggoZfd9DzVpm%Du>j_RUhs%|E zX=ffK6^g`-B+%y1JvcvmL#&>1SIZ8j8|=#J(WbuvY0nmsJ3m5gF7>;&$S>m1wsisZ z0uRV9on4>c4&4$GKcJW1(8cq6hK_rLp0*zGL|60jyXD0!&z%tw%As@z)?A_BTDg)O zY$1=pkGiYYM@kMWQ|-M+;w`=|+N3R`WkWP3t!7R{RMshzknbOTi`RnHd!A47TSwP5 z!q>BXdk4`j0XY;`7-(hAtUzJ)DFpBmQy4WI_l;af*^|L_9X)wTVd^CN(x`T;Ed0;RMIDfIY^ zv<3bd-tl*s!(zpwmLp&1a6oPiif&aK!(-#Kbkoi?zj8amA8kZ*pk!@om^Jh^9l2K+ zb10jSEtLB&HbhIEpk)&c1Wz)VY0cbhGh><@6f|zqZkn`B2tUk$ns+@7!NCU=+TH;@ zPZqm44SRY6t;l4#;bYyIKNY*nIq(|Loh9W^{CN9<>eXZxG65=fotyh2FC!Xs6E^}& zJjo%c^6{?ml1vNVUq$_$YZI|J``^4$=o7G+_Wc&rssydhr})6UBM4f2Ga?Hb-vdq~ z9C33^i^CJWMY7|4{*opxj(j!*MQ*^S+A}CQ<`+Oy>h~K%cNA?E!;mc;PUcn5O91{j zMD9tU%@{A(daIoD(A!q{toGX!+_gR4jDdGG@9;r6Kg*J{8nVf<_d{RQ7<=9LV45y1 z)u~Qq1lcgO#$p?(jQPVD$5pg4i#(kcHS8{h7IBD3hLnEk%kKYLvWcqnr>#rb%MBrE z7c(p|OP3Ru7p`(Rk6cXnLXp!XLBoOoPzB%~4)sCCc#v6#0fOke`lJ_>Jn-)-y9Un5G*Tm)4&Dtx(6v7wdzK+b3JtcB(T3=^LVL%q2@x`s#xM}l&Q)Sg`?4&qD z&e&IF`$w_Or|@($09SLMV_-+OAM1o{9M>+g9CGs5=n|cc9wD8712^p4u1Wq%WGWO? zrsHlBwsyA0ERCJJhp5kook>b$9Nm2HCmOcV>PR~+BAxw_q80W{Bir-Vw#k~ul zenUm9@nCt*Bk-i0A`6FQLNhP9^umC#1+#+U*6c|O&6@lr&`@>?aaN0OZOt;Ru=OK> zL^`$${Vj9ZPQG45Y8M65Y;WW@;y9F1t8;|;Z=*YCa_U>Jt2%a844zMW-8h_x#Nw2x zZqKQyt4}B02$P(y-BN4Lo?xy&uMv##m>$xw$7HgME&hPx?m-2t(vWwcz@$AgGRaE) zn_HS3UoTnN#n#Tw@0;BVa%HEc=2FsUyjW$0H;!2r<7>CS<0VZ6ZN@@JXK3FM{w>sB zNqBJ0{!;TK9z?@U5?gU(pO8+udvKBdJodsshuS5i3FYA43-zkBGMRgonqym9N#IiqYdrj2+~-`M zfietfUxLagyW@77PG3UtiO5%?tHcriHyKX!pM?0Y&oG1<*71Zd;oc#`8NvHk8vPK& z;VvQwgzL_OU?Z<~$^Pz!MEO2 zsMZ31ltS^sF|#m6VD_4|6&L9f+sT=9r~3pAxBD9-fDE8;++h+vw5{Uu;zn5`n~LY1 zU-;7xi8`JWcCEvVOwfv{%A12T+{i9xE~Mv-VMCds|JpDAF9i}5lr;n)B@*oXZ`ENK zyF1B`eWIj+lMlx7lNi-}n=DFpnkY>Glq)U+TBKe^q9xMmcfa4|FMpV_x*X+X+U$L< z%+vr1w8Z?liVVCwI2%$gy69k(M5FywF9cJ(_WlSd>Dfsm{B%WUi>sio1-3XCyRTt; ziw9!XG{ppoBPPi1FC(hI{uATBk4=x8U@_&G(4s7-eYx~YB?I1n^3@}iu`E#`;|qWu zFE89$-+jC1NOa#omY)qf=jVqfHhfcTeV+&f~||Qwwi|(=D*D%z8LnU440bz+Xtk7iS)-lnH%5DaQu&(bRH02jMt!Gl(RZ0=0zj8ME1wW-Vq-gIHm7XSAf{TGwedWxrNimSO>6ien${gB( z%>n%t1d)o(YNmBRa!YCVL3*tHvz&u|aJw^vIE{^$&to_SgKZ?*_H^USr7-NuVn^ zz>w~*zRlgb86eZ!SH!jpFIszXqeb^;?OS{LDQx3Zy3>=t)Xd~f50Nq%vjjcJSv2I^ zrwcYBiX=HvJ7;ftVBofCCPZ!Oyt@X<>r~oL|gRZGjrL%uC zg8j|Yq%nxBmXA4A_)~;V(2(w`(TqCMQ1;tJ3ApctSmMQF21Pg_|1jq5TV2bwvR2zSOoDwkes`fCGXb7V?wT&#}bX<`)_ zY%nA##gUYx%He(s4S6MM@6>c(k6Yy z9HB3Hw@7;ypMq2&z#D~OM0c1++%$k;$BIyQqqW`DgOppfu%20aDy%Sij__l?lDwObtA~yayiKnSvIX5w?9?D`Tpo;RIl5a~W z-6bui+TTn8=!xljdy!})v1vthT4vzKw|fT69}f(1gR1Ru=qdYL`&nm*%3O|I#M+*f zB`5WZEb=dS94$azN~l;q!2pJYZ8dVN>P#QlPvOJuwpMc8y^3`N`Umq>2!f5 z`-_?6&O%0{l9Kcn|CuNeRi%oY8RrX48-l{!xYCxMbbQoAynZ8d4!m1tU|F*nxt2`s;&v$;qal#vH6_9`+mCC3Tu3hFD7_-CJ`|Hg)(PcdFtN;EpmS z&M#Zq#Qh{jIQ!EENB{aU+&RP=#jksN^5*Ab-u}b@XjFR=(=6s;j8K5 z@FXA(bmRD;CE(Hn{{`;{^na&(9`|#tSL5VT@DZoTBGX%29+Wm3$1} zxHaR+WNRqFz%{n*pQ|C+kwl+)t*fmq4Vq3l7p8~LC5;dAW-A*r6Ag!@h*SuF@C?Nx z`Dpn+#z1UHy4MZ%Pi8Q zW`SVFxDbzZ&6!6$dwHH)SYXcPO(>fI;ROp%qz^$HSDg3*qKz#Go{>reJL^5P4jveL(jVoY*=3F|$ zASO%-p{JajJi_Ahp;4!AOr?_j53R?Y_0I!Zt&LFfSMgIaV8 z5-q@q$H3H`109$L%+m69ze=K35y;?hgY9Tw<=G~>l6>ffD6VYQxDUwRL(lCX%M(~< zrX~aH3RCt{nh+B5%+kn8(x`-E-yjyL; zl$A(cU3WNkK_ssdTs9S7k;g>S1xcS64v=n9P}HEEnYObc3Z)IAF~ubGK)Z0i;Wg6s z9BWq6wIsb1j9 zia={Vux7FF`v8kL@IbP2E$5~f2GfRy%&rnh!ImiBAAtN<(yu*_@mB$cx|XDoF*+$2 zDLaIC@saP?y{fVKm|RsOT& z4#v}B-WX;=!MK0KG%WMf4C26ihW~@^rA~r^UH6Lrqe8wa%3!z8(@_>y=jgV3m#@sU z^-jCvL*(5+$IT!12)8#dm}`nkwme81oOhqVL%j3`i&-ge+r_*1^_cI4i!Xc6dK8Xk zMz6IjGwcS)9tdeqYoHt~o7e)OIY)l-t+DU_-b$fw0);_14_-V`@nY;xFN^GtMBT@z zN)b<*vapO~&TL=tPZ19Oo>8syz)Qaqoyc=a-_7Z&`k!7ogQQ@9==rcS8uwO?doE+cbu!x zEK8T&w1nDXtQyKa=<=mscv9~@IMV07M5@LtI+HLHedyehR!v^gXS)$-jam25i@}@o z-<5@XmuN#@#T$n*mcL3<{Py+IeO*d*B z7-a|f(ru^{`Ng!zhRb>36b$<>b$xI)8LrFxvQ9E8cRWHBE+d33c?Wbo*p+6L-NtTY z(|R!+aIwK+?%V36q%G;q5PQ>QFJ?adn~!DpAJG*-;XJHg6=OA0Aprz3b$Vs~Ym3u3 zVmRzxFhFbJ#P@X?&5gL_5QOebr?Gj~7CGzTEZaQ)%G>h#MUvdt9(lf9N2t}F%Ccv+ zKj{bj;D=OsYL_-5X_sWf&wI_6YEj9~u)>Q>@QM`^M$6pK&S9WiJUW1X*WhO7-vDX; zEWQ`@yV0HW5#sqbDLEFtw(uSD`l%g@epccboemnR*~lne$s&iPR{6#7Nh;}G%fM{Y zHVsj9T8a$6gILA_&FM074}O9KG<~@|R6=R8*RWmz2mm|6zuG5_G56>}BIm0xPQL(% z-M6v8=7qO9XjzbEs-M2q$z$N=_T_WcTOAX{&t;G@h_5AD!74J&mQtAYm%a%5!h52A zfMamUs#iGbnH=qhpsh_%~SK;7c(asd97JN)zxHz+DyHCH1H6ETGh`0vah!>v)M7|NJr8J=W;Kt#@b*p(5o1s=0H6TLp6 zQo_tKGW{2?jH84z;mn7dT7+^N5wTi${FPUoX_?;5Ar~#q!j=DYzobm;pG81wa5ni) z@37vT>m|`RmpxHU^o5+7*z>EhnA+{L@v+??+FoT#j`E?5yiZ?!S#{KVM0Kik7v{Oq zG7U0EV(jIgEV&I*D5QkXS^Dh=-oUNO^>SPZB)%g)UCv+mN4XqVh7&>LA&Q<~UZ2Wq zxW4@x0+Ny&;f2^dJlINuj+MUc0U+>+oEz(;{OB&Vy3nH;R8l952ZK`l9T0W78E70yz)gJ0E}m>^>r?!AZVwvNT>-pd$<)msGE3g z=fs{yMSw9?kgT5W{x>cr-4|7qq=m&O^X(&xmN>k#M5&id-t0M-IcfNHGeo?6i+^p5 zCHZ3w8YSC!<%~IMI53chQr5~%6Yd@N_fHgtxT>M#_;9A?(3QGw+PC4#0e>R)`QZ?W zUWa4Zm4cXZqYq~{rWKq6C&EixQGp!tZFEtuXEYfPPrd$Ghz?2jP}Uk3R`Pb4#G|x@ zx|gXh1ZnH09qsc6sy%vGz?{FZL7`7G1wX!uBUV2MD}(XjzmCKa;=FdsXaq7{DU)Nu zQA+NWY6F4QW$U+aW4Py zz@mAlq@)k;53FH8+!Lgf-^G*FQ#ouz0fYzQofFi#89y;T+{Mgw6#0UGU}&6+e=#@E z>iFgp)zu|(pMwzTS#2$Py2V-}v-De;13Qae{gyGTaB8P9H{Fhblhrk!xU=JC;C0^_ zN&{wyq5^$UHayw}QHh^svmKej^|%%?S2X9mM>=mkKEI49Gv|FYXARtTB0x5FZ`1_)GME3AR1_uL$O(w^3fSwSmtOLY#%!_@%gl@{*7tGxt_SXvz5LJmlFFhpq^fh z6duH2r89ME=DN;?xqzJsJUcOYAXd}(3Apl;oHg|7NE(HP=1l@o@u`M9>YCyY| z8gTyv^ip6;6?;5?Sj@R|aBv!0L$ke-4#2A%7WQljEMdp8|BDBYtYNZ$0&WAS<^>Xy z0|Pwjx&+2ff&cxc0|E?zeFC~^Ujpp{`zKuMx2GbSQvUhE5A-rd{*R8dQx2{C60<{e zQQoPdJrDHNUvTt&gA;Z255a%`4~#CN`yc)Pa{WILh(d`)k3F=T56tf=_o-k}{{&tm zdcS`OboI#pPbpPCx|N7S=OiUJdH-nQtsn#bYXiHN21vnjHj1Y-XRC{YLfQgW)prgv zE=x++GlKlpvm#0$;U88%dhpE3!(3+@XP>5ZIJMj*T@6dM!M}xn+tL`J=B-;UhTLBo zFmUg3*_51ws4|)v(p20SJQPH|ldc&k`ci47pJA<&lFQIwS2P%Bdy5=xg z7Q!=J2PKTK;Tj@`;f|#kljnp+biZ$jN+NtOmU@G~ZWUB83ss41n+U?{_a6X*8D8@g zM|%XwovtU@`QfcZG}SS* zThPn6i)=RF#aO#Uu;+htVMH}j+%@6>5VQtmAp?$3DmD4Of*m3#c- zrGqyckJf8k!r*2sC@PVl7ry;yG|eYuR8hN#sb3F3vF$Xsqj{e)9)MgE<`6S!O;Y0` zJ5_~Y@1Vfjcsh%A19h!@m|%CojMoRl6AKd)H|oSE#Zz)eba&=ruP>9xYl~F-r9ILh zuM>XLRZ@oTc^OlCsTs%4Dt5^yJCecU`6$IfWVJw_M3An)97}*~lPiwN zs9~$8ysxMlPW7#;yw9%bRf1U09dSJo!fKvHAiHnob|Y#s2&RVk2b-|bcx_H?GOUo9 z2Bpe|f@2O8-j2)|1|&xv}^T}sCqv8pt~9;cJydjqgZs&)grIob%>ieg4H<|Ri- z?Og()VQly8anQ`g)X%`%E4POqV9&OH zDG<2w0UVbqUuRJH;o+jTpIewZ5i)U*hGcTuOp_49X#2&#R43zCVRo#4C~EhQHu5-F zTez{rfhwtTM1)E6EvceV(N3>Rc{8b>#Pida*WA)q5R@D*85bSQKCHev&h-USrSav4 zy}YA#NG6t=kOGpw|y6SAvat!^rLaD@_IHED?LjQ+(7>}SZ z3!ZQuijf|5hq~+@e88T+FfT$Jr2zvrn|;g@RIb1tUHCk7PYKr{{ax5urVEx0Tnigy z>}v@CD`(rTMMc|_bLnYh!)K{?8|S3VnwnF(M#JKi!a${_09}z=8AHyCXNiY_;w6_G zF~?C_)Z}4gC5B=tlsY9CyB;Q&%fYS_Ktn}4&aQ__t|AN)V@#6)m|57_$i{EC=A{t$ zrO(064bp)&bA?lBIesOnd9sgpTub6qmRs*RBBE$uw9BMH2KL(l2XM*YxH^GlaRBCH zN3+i;xpZ{niPFDAuwhL*^wg8rO$?~nGQKGh&hPP<(JiS9q9DJ=-k!z(izo%=LHB_r^?x~SYr@?o&~ydvZG zdH!6?h@%F1WyTZLzWFy182#mZ^bah&#in4FC09LBWzV;W0n@D$YL3Do9( z@_|-qrb3jo9Bo*KXqr|GpD4}kU)htom4YQ~@gPfouxY%s1e_;);g0qj<)D;G6zzm& zSv|D?_Lyi6Kj8`2(w57c>ZDh{z%|oR!5!Q94 zKgJEifR?dw#%;_%plA1U;pK<47{>1#iL`e)y?t}sz~_D$hiL-n2E=7|%M=gFbhpyF z{I%GIjQ9(M03Cq}xvKz<{Dq%Y+$)byuTO)%3E=bbCXm1TYLS>KU3f;_UB#YWM2vYM z!d;0iBPwGtnc<~|UpT_|?QJZak&S@qnVh4{H0&6p55z=IsTy5-27@4wzPU=u5Z*^& z)FXrL31uBL``mtFp!csR7iNC?!#-o&0dt#jy+N~@Hh1CWPmHSxhbgH|I}0fS8Wu-F zq3tz^vaA6I<}gi0rS{i2dWe+QX6EcG2^_4BeJtgjx(;oO1dcabLA~EfZL& z8Wx+goqa}e!ru;;|cR9K+ucCUC8of@2c#*GDo$8sD@|a81kc-Tq z27lymnfe!;D~`0F2f_ly0n}IO6|CEM6R4Vjg>kzDn}2zaPsv#{>FQgZQ~!>O8(4^y z$pp9!6gI;HgMPsf?8UwXm7@-__;?1(FB3;bM-~xgw-g7swUvvrKIfefa0qY{!2qF+{t820K4o#p7A!8J zC4GTxA3S2)b{$Q$Q>Z}B%UF*B`r!2~f8~5GWeBK@~3whTU%S(wr%&+-P(3f?QZREZEbBETidqXp8NaX`*P>L-#mTEHy0I ztQ@T(QUq_@e0;aA4DZXXwz`#CJ6l)Q$O6yZ_`CgILHWdcj@0T|pA`$Jn6R}#(Rj`yUv6#~N!)^)&!WT5)>bnO z$^yoCIZ;KSxi6$pmr&>DcQm1KPV#RYoU)UZ6K1B`u~ufL@v5pOn05hQ@3;NOC3pb` zK-I!S)y3q4qftNRWx)n{ncbLKo(uZqa(K9<`mFWuG1fS8HWLo&vy7w^Doj~x!eo)5 z!uMz-NioZ0PMLwyC^#!{0f*Dt0{bzGtlNI1JWM)SIPu0rq~pVA=*r(rvZGNMaU+L` zkz}%?2FWT=P4F=b0tV!?VAzpo0((Wyazlnw7~~iO`zd9vVpeB5l%K*pdDmr^F>VU# z15|ia97^5-15)^?#9($36fWV0I6)c1ETX_XbbJ6aOf(NAN3xLb{Ko*>#AW`i*k33GKJX%S@35fBd#{in~$(M?;oz>gmY*zm( zy|%zCBbSX^St{F)r$WZK2SU?=^_xB2z{o9VM9wh2@3&Wz3AHP=UJ{Zd`rl^P&92C`EVV z%PL_jafY)c9px~Ye;m6o?=$5(1TRx<@kCW>J>)iRk+mW352VU=4_x{c%hP_ehx9HN z*(>Y@dnqUn!33U2D^G18w|Uz(i-o@1h}E*5nn4A=0d=2s=()~eBA!Ocpy3!1dFRP8 zBmwjrgN)X&z|I&I?ijA zgv5^O>=+!Nm49Vad}E{tLTk_50cVloMR~k*S4Mz^xdl(H_hL;pg){5BRvwbLqr*i= zN3`B^m-QSPk8(UP0+xDU%wYPSJliSI^p20`J=8pk^@n zmm?t%5D`gmi~Az0@Uz+hJ9m^;KAfXZ{Lfx)5_Sc20T{mm(pF_Y82yTs-&yp@ufF7J z?mWo?Y97}#J)VN5sjOXMlx9j(9}EQU*Hjs7h@IO=a_CxSQ+&yA`^h!HfcmsR>}GH$ zBAN6p2koxN*eIfDn68Duby^;FPXUAhUPQ!~5Wox{ISQ8v+i02pYP>Xeq4Zil_a%)n zhRg&Vab99bz`BnP$r|`^$`pKKiX~*(Fd_s_cbhar_yGiXMUX}D`b zaEtANH$|Cu&$AEpR)S3tC=q`WPyM`2O2)6m8azP#Ds&T(o%muGAD9G`!=)JYL+?b0?-O*0ysZrztwO^AT0=aQ-wv z;Ws*slBrUW+cqI}EGL{Yh6g!lwbfrLQhalL98 zdM@|oZ(8|9Rr<%OWhpXy1)HYN-tb0Ljs z2uaf!ncxVE_?fC_Zur3+wENbz^+;Xvq1X~B%Eb;BiViH=xv#6ue(aXuzmus6D_k>f zz05iAN2b?KFas2q;o~Hx9;0w0$Ad<-Do1DUNiyJRk+t(%D(1wDuz3WBh#10nFZ2%m z;4U29$ujS;p8p!Aq$FU$xk>DCvhmimt!xHcSX@ZRtVsa-IUrae-(#Cv&B%p!{szX>0(XY z8;P1PkPiN?jpc*4E0j?1Li&*Sl`v00tdp}fKliiznnD6b{mWb$r7HjtG1S7E8>{G2?KvRuSpBohB<3 z&~H6YzG7Aq1`eY8v!?HeMVvxsALqw$pQ4?p(zt8AE*8%@yLx=pAUcTlog371a3fQP z1KBY$$ComvvYIY1Wkd)gV) zjor=#5ee0DI{vRvWG0g?X`>SzV(0>qld31f7KsnMGc(n??|e8}zy9nZpPbAGwQ9t2 z0Y8#p=Dc`m5%_fzd$B>mGglIMCo@WwJFcOy>w{mg$BLU70z`dO(53dZ<#opT1jqOBKCNI9Uk{ygSeO^z!re_H*_R z@Q^ezcwf0^?x7mR;Xcei!6`!?XzKtEKwVZnvm8jO1LkEes-msSR_v*}x|FGeA*iaE zH<-%Q&erAUbB+zi#2mj3x2B)q?Bx0fdN^;9?&KTheSW>}zrSWboSdw1w}tfx_V(~} zs$D~lb|j>armvj*tji-YPEN05GVW>PQ!lIOV2s_hBr|cLGabKM26wbf(aP9ja^q7R z;@Bh2I{-$QhqtJ02F4%wJgZsQr?_y58V=XnG9@+1qdQem)0fuX=>EgMF#e03s@wd6 zqIcLXN$dBRvjCoOd;dwOWHjJlasxqFnV^#h7nggM5oLazsW+vlMVGwDjW=Y6b%!1U zspYu3aV<5HV#_E@|Kh6%j{sOmcm;#zgK~g+hVyka30LTc6y3k_;`OJw&g2#9`!7=& z_Ic`C;CAQd;fXBlUvHb8;hko{T_$!NwmSWf$>3Vf>A<0IEf&HMdABO|<^Zlmq6o+5 z5?h&rv<|a2ZJaao9g)+SN385mz)>Go!Jcz{BpdmgA!H4fE17a+ehl)igCs|OKWTHi zQgs9^u|#-Fu-C+U>$LKPNU1^HOCW&&l)QlGE;blfT>>g6%kL+cYjL!>hj5;)2+q=l z+q46!GnGz9nQ=~xSl7^NBh@~W7(!SlYA|f1ldzsmaQw%B+gneZ>PXta4AfDMMa1WBfrkJ5b3-Y zO^W_{pNGi3rZ%I&K3T~VJrnziV725o)3peuT4k{$?*78X>NKjL-u_r8asyjy54I>p zZ2(g2VuLCWhl?#8u*w{8JXcnSSR^$HCe8m&%b9WSoI303l0ukm@b+%Pu^K> zF^fu)pF{76UK}=jph_hbeQ8e3_+bVF(V#IKgmhMj7f*-sI>hIe|z&~nrVAe?_ zc!fzoM7kxt4OwKI(H5H>nJA1ZwN90(oUFlBgBp|!SKWRBHOMF+Dt8&Y^dRT$t|AY8 zBX|D#8+4z!hKnyr9jn!~VU70)9Y#_NKngi?9PUAOl`iUA| zFqgK|AHPSOra~0*!c{jA!4TIU3OAUq=kMEQ4Nap|XHj+J!LKjVpk=l!*0szy z1@)#a?e-iS?o-RUrGDk*q&b{%;`I}|!B#cPTZ=wO9GJR(a`;b*VMhutiuGFD$shn1 zZ#1Vkabo015grjM8%8Tb)I*;Cy59bwyKauQ?Sb;r&dE3T(l^N3B{chRx%a5(9pw4k z^5W|a0$pz_)!l;vV}%VoT>_l_J>IVF#@99;)bC?IyF|y^bgm!s(dw3(|oL@anPqGV6 zjo&?-NEbsA^98hlgC*?V$CfAqTnNGi&&anbJpR_wAn!$8!It;Ce=_3e~}Vi5w!>0d;zFbP9_< zy-J&o1(dZ$!iBxwFC4l0HMi9B4-vxAbcKa%m zD&wt6sy!C~!aEk!L|Xazw?emP*zEEsV@s!M%epjNCf3ZeW|*f1Kb&zx;8d!ZVF}ES z0_ffgVhYC4*s=G+-hwi%nw1QvNzE5zrk<{ZuK~J2z3iu#H-v;JY5jG=Lc`Z0=ig}| zA44uO)7tn5Sj!QwhT!4-qTFz(1A|m725<{I+z%h7mE z)U)OT8`~v1j7Z$Mt5kmKA{a7@Z0!Zect%8Y+CsKqZ#!JaaYI?Qb#oVdY<$QE(X#a% z0nBxYd>&}saDNv}-Suvo`jm047S_!zc)~zw`1rN9wqP;nuRGXVtK9Y1TW%f z->`yQ=f6ZoMG4(@@;uoEIQ50(0=QR^Q93$vy9c+g_Z;eLaH@m674LLY>S7+q=hgqw zT*;8}eV|zN9+=?!pTt#o`P*&KGDtos5l0Xrwbjq!P%`9>hzL0#-GL1>5K=dnhMObi0rXz? z*@F0k``4k~?gPoEU?)@Zr^yolf!X`77cx3K1EBMR-#7Ov)ad8sC2GiEzlrB+QN%_! zc*&lVRh_5E87VH|++NT%;q}eU)iX-yHOkh7hX+jePvV%2NGI$DY+qCl=RpF$Tltvz4@D=FWxj}mh>g3-@{RZI%ipXXIPPYWevjfd! z>vuNnC*c+6OH(hogMnP`UHE@D9NqPZo)+1E4H66w8_cn<5@tTVE(pdA0}EL{BJDy1 zwTPQHY|Qa#^_g)kG&g{XVZgDGw^Eb1?1J!tR*F0aI;B=#dGg*?bmh?|QF^rBEg`2m zp4EXZUCK*wwfF#b)VjTy?9-=CZ;5TYHfxtYMPJ*h?xkdMwyl4ZN8(Q~QR4!j34bj#dYr{7||FnJVCFv1F@EO?*2xxsor>(&4xMQ9CD zzg5Cc%wFs981`8`1}Q&d{(hcFt4Rm|p}?ih)uXME81t|i?tz~#f#Ro1SuSabmh8Aq zyN18S7dpYW!NPjGJ*B~Mi>I#}5-+S^GSQ2iOTmTa969SAb}ml;lzNxwQzQA=G+403 zWUD=iqq$17hT;98z)>71CBtaKGsT}?dT~K&EfAHDpO$w|hq@7f>VE>KU~ILcGsn>L zmxs+6IfP|3O;XUsY5;y(M52PQr?+MQMe8DXx(8|&7cq10s=Kp8w&I7|kkw}ni(2k{ zDk|uHl5piVMvmG`e@mM`81vT*F6RaNi4Gpy@j>7))g%89X5%l7+81|CyNBz%{)?hV z#J!Wam6s-t69bPLZi*ctlVjiQF|844O}c#$*{xN!)CBm`T}c#6yRvK7+Od`{gQ?g& zxN#mh{fmRZc~cOyZhuAG((z1C_cK(k*kIK!DQmj7Mc-P&!#c}i#3Q1n_JW+< zrDe;Z>f|XsJ{w%_rQ1@Z2!Q=h!#+OHU4Lu2_E(u|k?Q(K?-kCyI&*0e67uLOk?bYHGmYdz2IK1Dx)+)w>Ke=S=MLLAP) zrlN!{;Wr7UiZ3SEOu=BGr5WMU5QDG4k)@Hy2q-yFMrOr4CdpZAm``1Ft=^cpxLR7~ zXxC-n(e6=%B>ASY{aii#H$_@uA8p}i_;v%Do0}Vw-jpJ6O-QA*_`-bg867VG`UC%- zGF5p;y@=f6)luRp!pYEfyBFUB2~JK^B`D1f<7fVj)%|&E#+33XfZ>9PSmnotHVq-F zG=nP~n1aMT=gpNw$M4Ss#%ej00FGIgd1~N(%HBBd*S>9A+uEtEs*eUw zHE1EU<|eiVDCxm};G$zPS3@4wjG+QyI7D)x;TVLrBN>@JM(>|A4B!!VNQHRs)JF{f11OT2~%cermn|`2s?&QLpe*EpX?Cj;!(IFv+;-S1 zc?~85%&x2Sacld)9?|w2xL;^a&X;^vEZ?_a6$ic#XOBXAjryPNFyjFejmIiZ@Y~Ke z;*7^sAIQFCS}0ud1JIGCrN*Sczr@~WGK-Z1$aYLvtcu?{WwZd|54Eu1gKf3103Ko{ z_1iNYFe#H!A4{4hN0Zr!XHtyNXW&E%Ri@%*7SJ6!{H`6GrS`AU;Z>%3+PMU9x82iJ z_k=lmy;cJ26=#w5C~0%`m40o#L&Wo6Q4OQOqFHItdhj@mzZrxak}ZHNN+L+rgKGrr z_lp8G2a5jTbh}Mi6A56owC5GEPX*%Si=kzvCH%J)WH8Zy82VV+FDRx+nPUcrosiVs z`kKQ1yRq~18fU(!^XMWTv%>ohSP$}1hG;k)0*wM-WJ* zt>a6R3oD9OOC96kGd2fM!;>*|YJqkn*9%xBY<h~tJ^9kc?oS3n4I_E`?rcwDJ z-Wikq>H@Owe}K`x{cE|sG1AP+=lCyn z0CohLCMxq{Gp;U338@!hjqwe}x4{k)igwUIjg`%02CWURsjI{?l%`$-BDjdZlH9B| zhKoHN3cQIC>3BIeE4gO|PPgi%-)@;?o(6wzm*|u0o*HS%BOEaf-1e{6R=o($XV`Zs z#eh;x0#n>1r$Oog+O>T_()0Ma8IvY{caTn9PYgHvuPIi%Dk4OdN*Ho1`ybw@U?cchzR~h`yzkFL{*ipyF?}mqCY*q9M zCPDQQxW#|jYL)l|k>SQUvkOPs|F$#TQJG8S6jg{b8%{f_abINkzCY9vgt;HxWl#wq zO9DD3f{rwP{19QN={PO;+vEB^?QIPh>dH7wYvOmA{EdZ~zuic=M^<(8VnEcGGmRlr zB#cI0sUN8J$G99wRYOj?-M0=|)6w-Ybr{$@a>A-iA_t@6{C$Ic1iH%oI{yTP%m%Is zjzUK9(*=%v+)O0+y62Hj`ejDGxVrS5ZeNg5LHPcK2J|3<2NwKyKRDsQ7and^ zQAtLHjKNyDtWql2mm6R<)*>8cL6_5=XLoDGLeVqn&tS^z0RvHLh@xwkA+En`xCOY5 z@tV{^KoHnlv8&|`oh&nXgR>PxB3SRzd5%zrAJ1Pul}-F5EPzo2%sl8q7$ zoU}wpEMI1}z#Y{-x#S4P0*(`o;jMUfZ*)bPk`wi}pP)FK>0`Sr4@p<#_w9o)9G;g6 zm?>ubd;ZKcKJ1*#=g)zBt?JM~-5Xm~pMgE*UxArmw;d7?V{6c9{sHQAB7Zd*vLO$L ziH<+``%l~G)4q+<;E3kk8ItG>N6!~rOb!ib4KL*XyVaNg@pX$N=o(ximH0Fp;qkX) zrtTfEEO6XwOBjL;WYhkcUH|Z1wTQ3UdG_n{0;fg3#*HRPMj^{D_*dmVK)?>GW1$20 zvsh({bK@o9M;qYMcQ3Uq?1PGDy5q@w8+Y|`NL-4Xbw7Cgc+z66z<|^0=2zl5P&KjO z)LHql^@V?)+rY)K+2Rt?zing3+f3RrFzrflg}a!l=}+2t^br)a5GCHPAOYXw;e`*j z61IZPMoOxxwRCi@RCAMIHFd^=Fxq!*rl@KYg9)^Kal9-$NGee={Ce19kSO$X z!^Sxz+phBmyrmY0N2dHET`d-XYgxTdz}890U39$X2JiG;3C|Z<6FiIhPqk>dOTj_# z6YZBs6>IcTAn)6#(oG%meL4Z3$=wSBp6lzAVi|=x45-6r^ylLZN4te<**e}B+xU7n z)(p+-f_dKpl*q;_Nd-8;hWPJU=mZtMYt%$TQn6u7HJ-x}>2c4&_S2ZsY;CmYGWiy=z6hrdN5(Xh9s~-54swU=E zH;VVAKC?WoC~ebxMojz6arS6JWraK>gGuS6scEhpjSY4fg4}G6Vk#^Di)6+07bjBP zi??{EC}$+^_O*p);FmS`Lmh}k`@ur5urn4E_sH)0M>sKWd27R;kR(Wx`x}qY+YpjX z-X9e3M)ff6?^bWY!#nFERlRDV{Xg61w~7gRA(b2z=n|TT@a>xz54K;Xvb6J~t3f@+ zqFqT;IXA|JhV+oxj0<5}*nFbIkWbcjN%Eraw3Ly`ALm{`d?M;7%H_v7R!5g`wtXjT z$p;1rnUFQY1i(LM7p?ro_YME*?70^z2CtrlI_}F@1`RsN23b=$fb}9W?wMDS{@m6@ zPfac4!9T8V;FPjldSQ09GD)C2xLYx4g9Rn*E{)0i1+WV;qNtbhj+~~4KYAD zpGUh!>S?M%QfQ&LO;DassNL@@aSC#$h($lFWkK`L9Qmwk|Pn->BY94Rqy%EsL0qSwlYJ-CN`ogq&dp$YQJ1 zYPd71R&1txdY<0$_5Enowo1jMHd`q)|Egweu?Q7DSpKjlE%$N46*5k^QIPKJ{)%MI z*OlYY`ZRR3VRb5D*Vf48HXbiOB*j>`x38M&<_rUqrLob}NB8g|nl&;UtsMGP$1SeB z7BTs&f~ZK3UMY>U!eZ9vx9^@`eGn&-mz8h>0Np9}J#tlJ*k*vDnDsDr}`(}7mq zG&1pFgutg*w`Gz3%GlEj1wHkMm(0SXqwN0H+K!We-y{jl%rneAA9TMf3FBqu#AKc` zBQvLH35?sTsjcejm=pf%&GaH0A?OODc@;8v1Ev-?YKRj9)%H;8YQ@*j2JeO;5XaN|>%Mhm;ZR~NPX#*I{O&Q&=u6(cfjjY{AIu$h8(>qYpT(M`D zV>gWzK~2pCXkGeQ09HO(n^G)2K1;P!^gL?vVX_OVuX+r6l@`2ktR`z*HVcBg7*r8w zN_D%LN7eA?A6QAvi-8zfW7NC7u$tyV28uYmDsoi}<}3~IXu%MVVzgp)u*Ya1H*#nM zDf*-6S#^K`nSaVeSp5at2RWjTyp=2HJQI9LU_7(brhUa&a3QhtxgFM6P`&SBC*B4J z7js4F&bY&by*M*-y$QocpR+hWxW}z+lkO}el} zzR)oKaR#Z%Fm))w12Rvc@;eGT_S`lP$`{qAkst{~?9v%3u%P5es%NA?h|oUNxc*3VDLxbBe4NjbvQ=d$K%7p*?(%_=Ar zC*(1Lv&CU?Tj$yCw?`&kar1FMzzlo6bL zREH&Xn1cuUw{Np>vq=yaD-1jJF-5dK&+tNtn_ zqBXr4a!VVFVr;+ENot?_*cT!ZiGfTHVvQ{J0u!-JTRvzv;^F7~jzL=KaRCAP49Uw~tR z)kK1Bo)F$ZEiXR&nx88;7@#K+S}-9F__+&Mr0a4q&Vaf?{IyS+I$<8s`3pMn`2#B% zpRZHeWFu|fWMU@i`3q)2*?AHc(7^?)0$8)ackjv??PB1@*0t8X@edG)KNiF-y13Q7 zrCqCcK7v5{HBl)K@zG7}ig_pADD1XrrxdcUqbU?jm*0nzs0{c5I%uK<%dz@94ZEpU zcCA>n-$!?~s0IX;k8-u$#VBXL=u#!oXFWaO?F1ayL450eIz>VI@fJ?7svO~#yC7-s z!c-DMYQ_iCjf$k275x7--@^Xq|I6R|E|5Dx6V%$dvUZ)i2)fd`3(WWZ+?lC-?aj9M zkCXp%NL)T}C62Ylm|#Qi%-#Do=hT>;Ty-jSELc7QGIx!NO9QGN=?7SH>N;YNs28@M z5oNcgj=|L;U$#cqbm-#hQ|X?EX&nLb)beCf^S}*w`>s5YX6VU$2$NHkGvIAPGKzRK z=jq(4&ALYN~cJ!@)2k^Q7y=+$Eq2H|;r|up{wK_WE2yC@UyToTp zSN-u(*Hr!L)==g2?KbcxXu$HasVP_lMlWnLSJOJ0ev>(tusKLt>IhB@DpH>K6j}Xt zj|_%9{C=2tE<_;>w7LE@lQf9rjfxY$`BU-)nLEQ{cZ>{+IB>fM%K?U@{uvb`xyABy zczHQY29HS-?gbS@`AAkYeT*IA2pg^N8a35*Osc6l!1Y3lh_^1@IvfGinCyOAQ{pVq#~d-3AdF27 z|Jcq~tr&Dv6Xny_PxH=49XFU7Bhox(bQiKZ$%w#hSs)bPdwPFk`V+U=s+Yn-S;n6Y zhXexml*^dEugAJ)xBJATiaqU1gvPOQfo{@w(R~gzjQNl-GEYE_al0DGY!FVB9sl0D z)v~1R+GAbai4Iv7?4pl;-=~eXv+wsQM0JR|MX}vK)=~1fAfA@b)m=)uLkF%pw5Bc+ zAZ$|Og9^Te3Z-5EN@85ay9`0#mQq6_QLglH!UE3pSh^Cg$s_ap@$zoft=bsnxL>~0aE`h*Zf-@h>%@OyB~#rOq!9dd>lt)Ryj=6u6z|h1xo}4AT~jGBYF(o z3Z_i5_pct-o($<2cbXDD@BHJ|rU&e|pV_|;kn&;CeyCdKc+c#?sDw$)%F3Nxtm$KQ z@=V}RK2)rfE#*rQhG2Yh_KoruGvB}IsH?mTXDa(8ABot(eBlTX@ zJJt@Q+0|NfPB2}iceKwLH28V`LOOa*yYTzB9Kt^M_*R&GLF`AuWaSjbq7dT4I$d1X zu0?VbDoOAX46Ge!E=Z4L@6;Y=f4N(@r25U>>pQOc%>;V}`I>hyZF}iqimDtaj4QR{ zxW{+WyLbQ6A58?9hQtS!he%^A5DMl>jy&@`PDB`)rFb>%|A8PhDr|b3!JT|ierK6)IcwSn=<4b@`Yo`}WK&50m(FBKWlMh&E7ZDK?pG*p4R!3jeqN@$y`Np!z&2h!)!1x8t&&Dp-UIQ^Xfh_Yu2s zBJJWz6xu-wDeA{uy0;A4W}^!nItKd}&Gr|1Y%};*2A#HtFXF$MD~o4D^+Am^+o48W^ETaxF>4f2L&%)PPkVKop$c;^Nu3kth`e3Ta zgxW3zR7~sWGY>BM%Y!qGWaa*OAf^_dBI^1sCP?5oqmqrsQD(u;i)fZDLP)2tWvY0j zp_Be?LRN8$P%SVIqmwu2an_&7B978>+bHBYlvppLEq-7TQGLm+u;lWK771Y}3x6Eh ztxqgF@)8m%CPuVstBf9TKNs+JO_%+J-`tB`)b|_NWzGU+n~HP~932y8vGiRBaje>K z4}1k~?h8dx1^Z*Y-fM^IwnlO?4bbd-Ty)n9mger%yIIhL%T|%l5!*l4S7`0;50z@X zTJsb3P^of$4(KO)X%{ope%~*j_fA@S0(dUD07)uet>iC)dYe{g-$5@eo^)TJ)@6{g z65sSS`BAUB(>@I2v;#56v!%u@w8O@EIhri}iTKxl#kRR}(>Axfh6lRAKt*0A^>JE~ zZOMyJqDcjv6RWa@K-)$e0~hKh5j6rS4wVKFNtVe%yQc*=c}`sMkwQkKXTHEfe^rjZUTF)ULTBdf!y z$w1AAb7gO8$%mz5o9Lj}lAf2oLDgiR##o^;4_SqO0Y}=4V~&A_^nRTW)!ABJ^5kZq zF`9HPgefx^*A+3F*U_f-TSbg5*|vpTsul=_Jv_(4n`6=4yu$6YE2w>Fh|W{B!}eQv-o<$QeW zjwYmg&2vfZea%wetEQY z8h#4)zm*Msob|OBv(=p78mj$-hAcQ2cOzF06El-5FPI=b zlBzCF8RJaUhC>20*-|)zU^O|L(=!u22c#xrOV)w@h@QL&qV|>hmRY9#ChcC~xJ)ky zC)A=O7MGt|FpG!Uq(8A)s|_K)P`t_28;cA%ZD##`3NKYVAh$X#7&55qOQE&!Y>lc7 z_{%L`w|&)#8b`pep^wQ&73?L(Il3-_o$^ln8^W&^F!KnqcagY_ZD|VKDQ(oJ>E|Kb?Ff2PvXsf$eQIcTu5TqCHXc88z zFvs14n0~6fJ9JC8qh?u1ncZqforJmm&BS@#Z+FCVeO6~EU(kSd7u#XQmGkhShMh&b zLRR~mA-Y2YVO!V?6-M7-sFD3ZAazQ_=vp|lnl&C&;;CRvVDf7QN_Onq{QPsyJcE9A zZRc!7m2jr^5F#R5Ecj_&KW#)DXVmhhnLGZ@g6V11Ae39tQgxyX{oxVZ>TdFZwmn02 zTuq5;vQ;2UeS%AX;UXyRtY$fH4nwNMDhPUa!8CI|_tStJ z^X~mI!)nKA_FJ9e1RUhnn;1GU%YYj8)0=6X*`kOIGE6_MOMp~3RU{F*?}RgJIIU@s z?PsT*HrV&U-Eu_jMHQCnY8#2}F}G`2wiVb6By%SxBH<9{;znUZ8+~)Ny#LpsPwa4j zM&SF#yJ(FWsPir5xp(F|z_ZL6v{7*%=>PWIi^}}*7%^U=QlGlT(2`n6PBT?#h>dJX zaXe){>0gyFM@Awfr=yL10Zd~@hTTQDvO!p#-)_1iYC#Z` z@aVJbAaJd(vr$zVJ+bg>n=InFtiig(F-z4_IxPjUZLOl}juAN6!G(qlqnhjd^+2Pw ztj(S<#k$lW`d*CcPwBc^_FsbVADxGutc^E9Y=qaItTjeY^sPk;_bP$6YMlxjse#+S zU*W)%h#)VAP(0{vGkTe>03=vGCK~Uq_XUWsh@nehOP?d@t=6h#hAe5Ou|8bi zW{D|$mtm|%ykNQLbW(NAWq`QIm4&+#(WOeOvHOJ|H5}txBCfokmM1Te*GcMk6sluq zIb0_aQ3&NWN+VAm(6J9J2dq@YtlNk!GNoe!`VT-A{vU=n;RlX1o+=?8avuS%oU%B=b^f znX`_K{!5bV&-EtS1^37{Xx}&sTR>2EC&b*vPnUAV?z@!8VP3m z;*%J(>35ONAcNg4!y&QIyDW?%^fO=A(B+iASAAFZetdleYQ6sJ J1#J+*Dywr#towvAKUKDBMzHs1Yq|C^n?-&{ROCX>lbCV3_y zj)4LB-vS1__OtT9=V(0h?fJlrblzdF+-FqI9(9pOOo=roSeHmbzkD~7t;eTev3Gy` zot4BT_4CQ2rs+dYtD}BZ@=VIoH7{5gNT-TvovCt5m|Oqy_?X-jQ`IEk7u_dc-n4p~ zTy&Z%?@-spLlUq-c;(i)-P0qV|5dqo{q(XA4Db%^3zM|`DwjV6rCL9CjeG}UKS->6 z6V6t0m>qGwYSOH&M5hVVYu?dN^r)8${Rj;~{z)%cJ%5rB$f6qms@U%B>atNHD8n31 zb|;BIyJmR1`?z}eq<8jpl9t!k&B-&!?`v--+wEg9J9@Y}K8{(`puTGls*#_q zt7V$)^MX{U53!HQX=Fk68Z1_9ZpC2Rv=-kKm9;`iz%3?~DvPB6f+et$M!Xa;M->+c zSx!C0g9O?4+wPr{J!#2yTmFs_UQV`_yz%^%`aK4!bF@h#&Uq5!Nd!v;P@fLIWZzKl zu{~6UsJ!p|V(T<<3VGu-*9Q~4Q~c=?N{aM!CB1_i9lJFBC;a<_s9dPi16sc8h-2P3d#MNqi0QDptyWHYaFq55e@0Jr z^P@;u{|b0%2N660Y( z-boes z$H7vf@vZ5R^9e0Wm}lv;WxJ46zyzr*=F}$)V`P<3T{$x`!8uUAV$H>uY~wz1QI0#` z$bXK~_@|q|c_@7$k&5#}@JuIxAV0GqfJ!b^T1{8X!t|8#78DCE_6?=u^~)K7d#l<} zTE7LK*c+ud#^b(Fu?+j-;IBz1^{)rxEX@67v}U8Y;>(=|ha#RiJWH!WEXoe|FO zqbA1^^>B*`Q^9)F$-2`K2O%})=>j*5H72N7ugar9V%sC9GrSk35F;K5+$NS_9j`K^ z(Pb!N)vLt-`LS17_6<1=p~NJn#b!l8_ohk-w%iGHr5S(&_2PQE~p=c3ZgAbFwf z$QB1hgN!of-zPe46|pE6Iu|1fpIJCq0Q-eWTd zm=7dD@cKqX;@_jZN=aH&*J9^Jz{ZR&4T%)(=OjW^autB^0Pr@|1VGhmXWj-eXBPrV zwJdl;1jQUb0PK!}7M1J+d{^{RqOTZITYDNxx^TWjq|p%V{um1+bGAAFan?MVlfq-9 zEj<{n;BrY&Xkq?5bowW{L#MWfW=BZOy$Md6}(IgNJSo zTP{3wEM}&t;shT=%`j9%N8;__JH5!kQ8LvvYC%ZGg-kJwJzCT>O%z~J!voE)?ny#& zIKqsv*ar}Pq;^TsA-={~8j3VBBi8*!N5+4_1E>f4xRu&t#}Ua2()8jh&WSsYYm(O3 zoNG|s@4BAwLFK%0oFe{}|HgcnBazUd}1s~gDErT-w5k_*Q6!1 zkBoyAgpa;?|FH}I!@3bQRNur_5~gvoYH7)(-jDUQE32V(tQk8bLwP#{u+n5I3yH^u zQJ52n$n$HLjWmeTtN|G{Ga#6&v4>rp+nJ1QU=P^TCP|EuK|a9 zi^c2(Pq1i}<`SVs+c=XEywFjWu0OnnM;(j0=K;(GE3KN~{|30O4hhPeu6%oOAh+Pt z>XlAG^?qL^bHyAh(ceX(0d#w&F&`0`#ErN(j0c?Jy2TjhYMTU^XqmTn2QHS@eB!6k zNthEYjYUDiR3k4;8BZ^&cVc@@5Py}nA(ZkWqFl_+dm=dNi$cH$hkr2TPZx70!kfGW zqNSv&M%s$cA}ErqO2$i{K7uSw(;%dwP4;(TSn3PD%T~0`9Er=UN5$w3afqC-kXlY9 za*whgQ)?F+>E`<}?yrjG&XK@na-;TG{yr#7ytr?=g7y|x9#Si}L!%{SLd?NCKuQzN zcVlqo4}a$9Opx>h^VtAM4^pE+a2MX;W#%Yv*}U}sYIGxjofi!qVC%L7eMtVA77>;b zy!{tU&Ac2acSI_P4&I##`%BjeGh~QW2#hi1uifYU)dAqS`N?}qQCY4`Hrn_+w?d4n zCYDZmK03UV#qG$dQaTSwu&CbKyH2qX@^?O!`6KR?bC7otla^4Q7-OaluJ!&LYiDx~ z!(>>u39l|13V!A+c2oG41j+oJDPATzSIzH9^6t=N_G-FNm<0~JG9dZ|U+@c=GOsImo6h2LnZq6% ziA+w%!NqR~wNJ^-;I1K9a)^S{Oy$KPwshh5WBEZjs|=x1ImS?>Z7pq;z!rhz0c7N4 z?2~*h_)$0ogoE5?j5DYTRFrjd)HlxtTLZ9qKN^|FT*jH|Irb#o&0h4Amh^Cp(su4K-s*1O+|wybV)E zy>djw(0GRYAaWODg??Y4($<(srnS~=gEQ@R0f@{YLTLer)1+~S=6K4eKRQ(hn+=~rM8Igl zZ9C7xxmZXob2BU@8^sIctBMZvGcB{j8$bN_uxw0CC1Ejc%o6a)+1v|{OcS5QQc+gc zvWASD>NwCdaXSEw#q1R;jHXc=GP=gHIvq@KWp2xf_wW;;>=V3bisUFEirg#8RDB(%wcB=OKm~wnilN>i#eBhwen(W z>XXsGYEp@4Z}Qa-U*cuiC@q+>CL>d9W!LBD>*B8;GU+{X7oU*RNtz^S+=Oe0Wgbp( z6t;$pCQau2@fZ>ka0{s=LFLW_sD)6iR7*70j{EdzVMTJ2+sxB?Pt$HFQkLvF%^i9( zH)J>L`c<-3Z4lIcEJCi0_yiX!}lzVYz6g54@0>etUBYyn643H!Rza3kwYN zmIyPG9xL{Lh&FD@*49%$9s|qQs03$ZaQBjC-~iS;1;$#x1FIq@Vp@XP zuYzeeu(6i#`r*Vws-rJjp&rewoh}Vmi%8e`d&y2UHjlCos~+k9Y!T1a0e=pb+28Nq z9vy$qnuaSu0CPnv<2M%hQhJ zi{LPeIA@KESvvUp{QXx*u$dUMPO*3O^9+1FUcT3d-9mf=+`S%N4`VJ59cJ?L4R-gi zK3={)4z8p-kqN5!^@$Ah^YgpC{e7kMdpmvK4=!Z$S|3`O1GB?2qP#HR;@XfrS;<=l zpWF){y$GgFkPf)yJ!P>h>4(29xN1$9Qdh)Du~?VX*t$-@xVj>F?Uzi)mzMeHwN18T zR=R)DzwQXd@N&?E#pk(jAAsuTUNc7_@JVXI{3$q z8)}Po2Mf=q?vSy0BR-L00}!xz^^t>vGh9S|gMs9Rum^jAad9Y&knIN-+Pn5-@sqsC z@6(d=9bvK-L<&G*3W<%&+OT6cle#~!?ZrofkNO|Er!8!Emxk* z8M+kfgPmMx?qm+p+Rs?Gv(M0VMox$Av%tTHMp&~D_FiZsSkvGBV^?LqCP~6~M-%%Y zMAqHh=OIh7LkUUHI@SPf0cI%VqL1^wMzn;a^u-A|&nH*A zJ~^1WYNrkNT&6@(Q($>6tJhjQovQfDd`tl^lq{6(DI@2fZk7<{tIk2MNfU~$Otp|~ z5&K+yvLyx$J;nrsogoj&`$QEM<6VOC2PSsqCD965K>Up$deYw#A)JH7^R*ddKJCH& z4n&q;ZJk&` zy5>>w5dqHN`Fc5n9ok1w5x4OMy}VtVd;xwCGLb96@4T9HuaK*5$UCGo9w&^jTbIAT z3JSMq7FHk_)FpTg?|DJ&8Cp8RmybqsAbUvwPr;IsWdgxE(rGY_-zVjERV9ID!ny7; zJ(&qrbTzZ{B|0VUcwq{$eSspyosV@F5G`)1D#L8r5d4vEP)MbOoTIHS9PrI#X-2}k z*)fW$7nC3j59H)*D2_suI`ll1CkJclH~6HA#;MlW(U~rOIG0t+s7;LYo+5uqQSbI& zcuy?bp@_N>EyO-fRJi&;GGgKEZw@g}o_eZSW;My7|MbvqX--ZXGNJDR(kG75BB$a-SI=M3kRNbr z2e1j-;L2rQJ&Bh^?c7}I%BSMHHmzRlQD;k@nKec{aBVu*q|o|W-SvkJSSeBk1(dwi zKstzSVw%vRJW)wBm{0Mc%{ev}po>$@GsFy4TjV#UX?p1$oi1;Ds64-R0H;%d0$E#o zR2|O__Z2_D+@9@k{S{ze*Xpg>4>0~d;!=KwsdkpJkB^_r$H!kfFEPIjhO3MB{01>@ zEP3Wr-h=lA>HH@-+_!fZzk3AxGvp`Gd&xzAYcHl}hqTlu;+y(UjX}P>-MEl`H*Xg& zl>GC{$H{Rf-pSG1`y=^65RyFOY+T)JoaE}y8DS#PS7#@GFTX&doyY#b`TAqi?SHFJ^zT>{Cc97!kBWeiJ)Y^oBYeF6eHEQM z=5xdsybItnHKGeC9Yikk=R0bL@xtE-qD}I3&@t%3!_x^76J9VgMYmTQk&q4n&Nag8 zxNc0tUbx+`dA&E|nG%)LXJ`98UD*70uv{O)I*s~`uqj=~CKfS0wq@NlsiUBqKR)CR z@wFfyJ}mD+Q1I>(kdUNF@2C5i1f)B#h`}4;o;_hm6wR8iA64~UXslVxO?d~(6SNjhUX9&LuUDhJ z$Yg>wy?C|>sS#3a5PA?|;R!6nOj8oF0#$Ao&QSc>(DTaMKZi(ITyH$ZGycFm$7VSH z=X+XrXyw;7j4f()k-vS)iUsxjBe%}Xu}GbH0ei%?f%{|&-+oQ9IPF@!st`^AG$}bW zW0G#Aa~2L^jEET@vaOOGG_WgX!DvJlVtl&jm6O&I`K3=F=6jm zf2r((QY(9annEBu*EfhGfcChHad?4pM?E8ShJuHNst}Y3gcz)cB zJt85!PHMcLT+_;(39KuV=sCo7X1i6O1A=O06g}E+7YE)P>sbu(_peWOJVgvgx_rnx z`?~tTGI$Sl5XG~W3pw&dBYwk1BLF7>WiHksgdcExe%OM7VWS>C77~Mv#aAm?P?W?^ zHXjUl*~e0mFNLpD)DF{JD~{P#_7+)I;bm*)#TBz{oJOyRDBWw<>-G?cXxoB+yFzi! z!t!Xm#CKR`i*LO{dNz`;T$|?#4VMNbL=e>jiU^=RHgry+NB!fHaIWJdK68;uW1nd* z7k50nIry)FUHiLxIqsl#ggoZfd9DzVpm%Du>j_RUhs%|E zX=ffK6^g`-B+%y1JvcvmL#&>1SIZ8j8|=#J(WbuvY0nmsJ3m5gF7>;&$S>m1wsisZ z0uRV9on4>c4&4$GKcJW1(8cq6hK_rLp0*zGL|60jyXD0!&z%tw%As@z)?A_BTDg)O zY$1=pkGiYYM@kMWQ|-M+;w`=|+N3R`WkWP3t!7R{RMshzknbOTi`RnHd!A47TSwP5 z!q>BXdk4`j0XY;`7-(hAtUzJ)DFpBmQy4WI_l;af*^|L_9X)wTVd^CN(x`T;Ed0;RMIDfIY^ zv<3bd-tl*s!(zpwmLp&1a6oPiif&aK!(-#Kbkoi?zj8amA8kZ*pk!@om^Jh^9l2K+ zb10jSEtLB&HbhIEpk)&c1Wz)VY0cbhGh><@6f|zqZkn`B2tUk$ns+@7!NCU=+TH;@ zPZqm44SRY6t;l4#;bYyIKNY*nIq(|Loh9W^{CN9<>eXZxG65=fotyh2FC!Xs6E^}& zJjo%c^6{?ml1vNVUq$_$YZI|J``^4$=o7G+_Wc&rssydhr})6UBM4f2Ga?Hb-vdq~ z9C33^i^CJWMY7|4{*opxj(j!*MQ*^S+A}CQ<`+Oy>h~K%cNA?E!;mc;PUcn5O91{j zMD9tU%@{A(daIoD(A!q{toGX!+_gR4jDdGG@9;r6Kg*J{8nVf<_d{RQ7<=9LV45y1 z)u~Qq1lcgO#$p?(jQPVD$5pg4i#(kcHS8{h7IBD3hLnEk%kKYLvWcqnr>#rb%MBrE z7c(p|OP3Ru7p`(Rk6cXnLXp!XLBoOoPzB%~4)sCCc#v6#0fOke`lJ_>Jn-)-y9Un5G*Tm)4&Dtx(6v7wdzK+b3JtcB(T3=^LVL%q2@x`s#xM}l&Q)Sg`?4&qD z&e&IF`$w_Or|@($09SLMV_-+OAM1o{9M>+g9CGs5=n|cc9wD8712^p4u1Wq%WGWO? zrsHlBwsyA0ERCJJhp5kook>b$9Nm2HCmOcV>PR~+BAxw_q80W{Bir-Vw#k~ul zenUm9@nCt*Bk-i0A`6FQLNhP9^umC#1+#+U*6c|O&6@lr&`@>?aaN0OZOt;Ru=OK> zL^`$${Vj9ZPQG45Y8M65Y;WW@;y9F1t8;|;Z=*YCa_U>Jt2%a844zMW-8h_x#Nw2x zZqKQyt4}B02$P(y-BN4Lo?xy&uMv##m>$xw$7HgME&hPx?m-2t(vWwcz@$AgGRaE) zn_HS3UoTnN#n#Tw@0;BVa%HEc=2FsUyjW$0H;!2r<7>CS<0VZ6ZN@@JXK3FM{w>sB zNqBJ0{!;TK9z?@U5?gU(pO8+udvKBdJodsshuS5i3FYA43-zkBGMRgonqym9N#IiqYdrj2+~-`M zfietfUxLagyW@77PG3UtiO5%?tHcriHyKX!pM?0Y&oG1<*71Zd;oc#`8NvHk8vPK& z;VvQwgzL_OU?Z<~$^Pz!MEO2 zsMZ31ltS^sF|#m6VD_4|6&L9f+sT=9r~3pAxBD9-fDE8;++h+vw5{Uu;zn5`n~LY1 zU-;7xi8`JWcCEvVOwfv{%A12T+{i9xE~Mv-VMCds|JpDAF9i}5lr;n)B@*oXZ`ENK zyF1B`eWIj+lMlx7lNi-}n=DFpnkY>Glq)U+TBKe^q9xMmcfa4|FMpV_x*X+X+U$L< z%+vr1w8Z?liVVCwI2%$gy69k(M5FywF9cJ(_WlSd>Dfsm{B%WUi>sio1-3XCyRTt; ziw9!XG{ppoBPPi1FC(hI{uATBk4=x8U@_&G(4s7-eYx~YB?I1n^3@}iu`E#`;|qWu zFE89$-+jC1NOa#omY)qf=jVqfHhfcTeV+&f~||Qwwi|(=D*D%z8LnU440bz+Xtk7iS)-lnH%5DaQu&(bRH02jMt!Gl(RZ0=0zj8ME1wW-Vq-gIHm7XSAf{TGwedWxrNimSO>6ien${gB( z%>n%t1d)o(YNmBRa!YCVL3*tHvz&u|aJw^vIE{^$&to_SgKZ?*_H^USr7-NuVn^ zz>w~*zRlgb86eZ!SH!jpFIszXqeb^;?OS{LDQx3Zy3>=t)Xd~f50Nq%vjjcJSv2I^ zrwcYBiX=HvJ7;ftVBofCCPZ!Oyt@X<>r~oL|gRZGjrL%uC zg8j|Yq%nxBmXA4A_)~;V(2(w`(TqCMQ1;tJ3ApctSmMQF21Pg_|1jq5TV2bwvR2zSOoDwkes`fCGXb7V?wT&#}bX<`)_ zY%nA##gUYx%He(s4S6MM@6>c(k6Yy z9HB3Hw@7;ypMq2&z#D~OM0c1++%$k;$BIyQqqW`DgOppfu%20aDy%Sij__l?lDwObtA~yayiKnSvIX5w?9?D`Tpo;RIl5a~W z-6bui+TTn8=!xljdy!})v1vthT4vzKw|fT69}f(1gR1Ru=qdYL`&nm*%3O|I#M+*f zB`5WZEb=dS94$azN~l;q!2pJYZ8dVN>P#QlPvOJuwpMc8y^3`N`Umq>2!f5 z`-_?6&O%0{l9Kcn|CuNeRi%oY8RrX48-l{!xYCxMbbQoAynZ8d4!m1tU|F*nxt2`s;&v$;qal#vH6_9`+mCC3Tu3hFD7_-CJ`|Hg)(PcdFtN;EpmS z&M#Zq#Qh{jIQ!EENB{aU+&RP=#jksN^5*Ab-u}b@XjFR=(=6s;j8K5 z@FXA(bmRD;CE(Hn{{`;{^na&(9`|#tSL5VT@DZoTBGX%29+Wm3$1} zxHaR+WNRqFz%{n*pQ|C+kwl+)t*fmq4Vq3l7p8~LC5;dAW-A*r6Ag!@h*SuF@C?Nx z`Dpn+#z1UHy4MZ%Pi8Q zW`SVFxDbzZ&6!6$dwHH)SYXcPO(>fI;ROp%qz^$HSDg3*qKz#Go{>reJL^5P4jveL(jVoY*=3F|$ zASO%-p{JajJi_Ahp;4!AOr?_j53R?Y_0I!Zt&LFfSMgIaV8 z5-q@q$H3H`109$L%+m69ze=K35y;?hgY9Tw<=G~>l6>ffD6VYQxDUwRL(lCX%M(~< zrX~aH3RCt{nh+B5%+kn8(x`-E-yjyL; zl$A(cU3WNkK_ssdTs9S7k;g>S1xcS64v=n9P}HEEnYObc3Z)IAF~ubGK)Z0i;Wg6s z9BWq6wIsb1j9 zia={Vux7FF`v8kL@IbP2E$5~f2GfRy%&rnh!ImiBAAtN<(yu*_@mB$cx|XDoF*+$2 zDLaIC@saP?y{fVKm|RsOT& z4#v}B-WX;=!MK0KG%WMf4C26ihW~@^rA~r^UH6Lrqe8wa%3!z8(@_>y=jgV3m#@sU z^-jCvL*(5+$IT!12)8#dm}`nkwme81oOhqVL%j3`i&-ge+r_*1^_cI4i!Xc6dK8Xk zMz6IjGwcS)9tdeqYoHt~o7e)OIY)l-t+DU_-b$fw0);_14_-V`@nY;xFN^GtMBT@z zN)b<*vapO~&TL=tPZ19Oo>8syz)Qaqoyc=a-_7Z&`k!7ogQQ@9==rcS8uwO?doE+cbu!x zEK8T&w1nDXtQyKa=<=mscv9~@IMV07M5@LtI+HLHedyehR!v^gXS)$-jam25i@}@o z-<5@XmuN#@#T$n*mcL3<{Py+IeO*d*B z7-a|f(ru^{`Ng!zhRb>36b$<>b$xI)8LrFxvQ9E8cRWHBE+d33c?Wbo*p+6L-NtTY z(|R!+aIwK+?%V36q%G;q5PQ>QFJ?adn~!DpAJG*-;XJHg6=OA0Aprz3b$Vs~Ym3u3 zVmRzxFhFbJ#P@X?&5gL_5QOebr?Gj~7CGzTEZaQ)%G>h#MUvdt9(lf9N2t}F%Ccv+ zKj{bj;D=OsYL_-5X_sWf&wI_6YEj9~u)>Q>@QM`^M$6pK&S9WiJUW1X*WhO7-vDX; zEWQ`@yV0HW5#sqbDLEFtw(uSD`l%g@epccboemnR*~lne$s&iPR{6#7Nh;}G%fM{Y zHVsj9T8a$6gILA_&FM074}O9KG<~@|R6=R8*RWmz2mm|6zuG5_G56>}BIm0xPQL(% z-M6v8=7qO9XjzbEs-M2q$z$N=_T_WcTOAX{&t;G@h_5AD!74J&mQtAYm%a%5!h52A zfMamUs#iGbnH=qhpsh_%~SK;7c(asd97JN)zxHz+DyHCH1H6ETGh`0vah!>v)M7|NJr8J=W;Kt#@b*p(5o1s=0H6TLp6 zQo_tKGW{2?jH84z;mn7dT7+^N5wTi${FPUoX_?;5Ar~#q!j=DYzobm;pG81wa5ni) z@37vT>m|`RmpxHU^o5+7*z>EhnA+{L@v+??+FoT#j`E?5yiZ?!S#{KVM0Kik7v{Oq zG7U0EV(jIgEV&I*D5QkXS^Dh=-oUNO^>SPZB)%g)UCv+mN4XqVh7&>LA&Q<~UZ2Wq zxW4@x0+Ny&;f2^dJlINuj+MUc0U+>+oEz(;{OB&Vy3nH;R8l952ZK`l9T0W78E70yz)gJ0E}m>^>r?!AZVwvNT>-pd$<)msGE3g z=fs{yMSw9?kgT5W{x>cr-4|7qq=m&O^X(&xmN>k#M5&id-t0M-IcfNHGeo?6i+^p5 zCHZ3w8YSC!<%~IMI53chQr5~%6Yd@N_fHgtxT>M#_;9A?(3QGw+PC4#0e>R)`QZ?W zUWa4Zm4cXZqYq~{rWKq6C&EixQGp!tZFEtuXEYfPPrd$Ghz?2jP}Uk3R`Pb4#G|x@ zx|gXh1ZnH09qsc6sy%vGz?{FZL7`7G1wX!uBUV2MD}(XjzmCKa;=FdsXaq7{DU)Nu zQA+NWY6F4QW$U+aW4Py zz@mAlq@)k;53FH8+!Lgf-^G*FQ#ouz0fYzQofFi#89y;T+{Mgw6#0UGU}&6+e=#@E z>iFgp)zu|(pMwzTS#2$Py2V-}v-De;13Qae{gyGTaB8P9H{Fhblhrk!xU=JC;C0^_ zN&{wyq5^$UHayw}QHh^svmKej^|%%?S2X9mM>=mkKEI49Gv|FYXARtTB0x5FZ`1_)GME3AR1_uL$O(w^3fSwSmtOLY#%!_@%gl@{*7tGxt_SXvz5LJmlFFhpq^fh z6duH2r89ME=DN;?xqzJsJUcOYAXd}(3Apl;oHg|7NE(HP=1l@o@u`M9>YCyY| z8gTyv^ip6;6?;5?Sj@R|aBv!0L$ke-4#2A%7WQljEMdp8|BDBYtYNZ$0&WAS<^>Xy z0|Pwjx&+2ff&cxc0|E?zeFC~^Ujpp{`zKuMx2GbSQvUhE5A-rd{*R8dQx2{C60<{e zQQoPdJrDHNUvTt&gA;Z255a%`4~#CN`yc)Pa{WILh(d`)k3F=T56tf=_o-k}{{&tm zdcS`OboI#pPbpPCx|N7S=OiUJdH-nQtsn#bYXiHN21vnjHj1Y-XRC{YLfQgW)prgv zE=x++GlKlpvm#0$;U88%dhpE3!(3+@XP>5ZIJMj*T@6dM!M}xn+tL`J=B-;UhTLBo zFmUg3*_51ws4|)v(p20SJQPH|ldc&k`ci47pJA<&lFQIwS2P%Bdy5=xg z7Q!=J2PKTK;Tj@`;f|#kljnp+biZ$jN+NtOmU@G~ZWUB83ss41n+U?{_a6X*8D8@g zM|%XwovtU@`QfcZG}SS* zThPn6i)=RF#aO#Uu;+htVMH}j+%@6>5VQtmAp?$3DmD4Of*m3#c- zrGqyckJf8k!r*2sC@PVl7ry;yG|eYuR8hN#sb3F3vF$Xsqj{e)9)MgE<`6S!O;Y0` zJ5_~Y@1Vfjcsh%A19h!@m|%CojMoRl6AKd)H|oSE#Zz)eba&=ruP>9xYl~F-r9ILh zuM>XLRZ@oTc^OlCsTs%4Dt5^yJCecU`6$IfWVJw_M3An)97}*~lPiwN zs9~$8ysxMlPW7#;yw9%bRf1U09dSJo!fKvHAiHnob|Y#s2&RVk2b-|bcx_H?GOUo9 z2Bpe|f@2O8-j2)|1|&xv}^T}sCqv8pt~9;cJydjqgZs&)grIob%>ieg4H<|Ri- z?Og()VQly8anQ`g)X%`%E4POqV9&OH zDG<2w0UVbqUuRJH;o+jTpIewZ5i)U*hGcTuOp_49X#2&#R43zCVRo#4C~EhQHu5-F zTez{rfhwtTM1)E6EvceV(N3>Rc{8b>#Pida*WA)q5R@D*85bSQKCHev&h-USrSav4 zy}YA#NG6t=kOGpw|y6SAvat!^rLaD@_IHED?LjQ+(7>}SZ z3!ZQuijf|5hq~+@e88T+FfT$Jr2zvrn|;g@RIb1tUHCk7PYKr{{ax5urVEx0Tnigy z>}v@CD`(rTMMc|_bLnYh!)K{?8|S3VnwnF(M#JKi!a${_09}z=8AHyCXNiY_;w6_G zF~?C_)Z}4gC5B=tlsY9CyB;Q&%fYS_Ktn}4&aQ__t|AN)V@#6)m|57_$i{EC=A{t$ zrO(064bp)&bA?lBIesOnd9sgpTub6qmRs*RBBE$uw9BMH2KL(l2XM*YxH^GlaRBCH zN3+i;xpZ{niPFDAuwhL*^wg8rO$?~nGQKGh&hPP<(JiS9q9DJ=-k!z(izo%=LHB_r^?x~SYr@?o&~ydvZG zdH!6?h@%F1WyTZLzWFy182#mZ^bah&#in4FC09LBWzV;W0n@D$YL3Do9( z@_|-qrb3jo9Bo*KXqr|GpD4}kU)htom4YQ~@gPfouxY%s1e_;);g0qj<)D;G6zzm& zSv|D?_Lyi6Kj8`2(w57c>ZDh{z%|oR!5!Q94 zKgJEifR?dw#%;_%plA1U;pK<47{>1#iL`e)y?t}sz~_D$hiL-n2E=7|%M=gFbhpyF z{I%GIjQ9(M03Cq}xvKz<{Dq%Y+$)byuTO)%3E=bbCXm1TYLS>KU3f;_UB#YWM2vYM z!d;0iBPwGtnc<~|UpT_|?QJZak&S@qnVh4{H0&6p55z=IsTy5-27@4wzPU=u5Z*^& z)FXrL31uBL``mtFp!csR7iNC?!#-o&0dt#jy+N~@Hh1CWPmHSxhbgH|I}0fS8Wu-F zq3tz^vaA6I<}gi0rS{i2dWe+QX6EcG2^_4BeJtgjx(;oO1dcabLA~EfZL& z8Wx+goqa}e!ru;;|cR9K+ucCUC8of@2c#*GDo$8sD@|a81kc-Tq z27lymnfe!;D~`0F2f_ly0n}IO6|CEM6R4Vjg>kzDn}2zaPsv#{>FQgZQ~!>O8(4^y z$pp9!6gI;HgMPsf?8UwXm7@-__;?1(FB3;bM-~xgw-g7swUvvrKIfefa0qY{!2qF+{t820K4o#p7A!8J zC4GTxA3S2)b{$Q$Q>Z}B%UF*B`r!2~f8~5GWeBK@ Date: Wed, 4 Sep 2024 19:34:14 +0900 Subject: [PATCH 46/94] chore: upgrade solidity linter --- package-lock.json | 250 ++++++++++-------- package.json | 4 +- packages/lsp-smart-contracts/.solhint.json | 3 +- packages/lsp0-contracts/.solhint.json | 3 +- packages/lsp1-contracts/.solhint.json | 3 +- packages/lsp10-contracts/.solhint.json | 3 +- packages/lsp11-contracts/.solhint.json | 3 +- packages/lsp12-contracts/.solhint.json | 3 +- packages/lsp14-contracts/.solhint.json | 3 +- packages/lsp16-contracts/.solhint.json | 3 +- packages/lsp17-contracts/.solhint.json | 3 +- .../.solhint.json | 3 +- packages/lsp1delegate-contracts/.solhint.json | 3 +- packages/lsp2-contracts/.solhint.json | 3 +- packages/lsp20-contracts/.solhint.json | 3 +- packages/lsp23-contracts/.solhint.json | 3 +- packages/lsp25-contracts/.solhint.json | 3 +- packages/lsp26-contracts/.solhint.json | 3 +- packages/lsp3-contracts/.solhint.json | 3 +- packages/lsp4-contracts/.solhint.json | 2 +- packages/lsp5-contracts/.solhint.json | 3 +- packages/lsp6-contracts/.solhint.json | 3 +- packages/lsp7-contracts/.solhint.json | 3 +- .../contracts/LSP7DigitalAsset.sol | 11 +- packages/lsp8-contracts/.solhint.json | 3 +- .../LSP8IdentifiableDigitalAsset.sol | 1 + ...P8IdentifiableDigitalAssetInitAbstract.sol | 1 + packages/lsp9-contracts/.solhint.json | 3 +- .../universalprofile-contracts/.solhint.json | 3 +- template/.solhint.json | 3 +- 30 files changed, 196 insertions(+), 145 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5619a2aa5..d6cc0707d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,9 +40,9 @@ "npm-run-all": "^4.1.5", "pluralize": "^8.0.0", "prettier": "^2.8.8", - "prettier-plugin-solidity": "^1.1.3", + "prettier-plugin-solidity": "^1.4.1", "rollup-plugin-esbuild": "^5.0.0", - "solhint": "^3.6.2", + "solhint": "^5.0.3", "ts-node": "^10.2.0", "turbo": "latest", "typechain": "^8.3.2", @@ -1976,6 +1976,47 @@ "version": "4.9.6", "license": "MIT" }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "dev": true, + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@rollup/plugin-alias": { "version": "5.1.0", "dev": true, @@ -5661,6 +5702,16 @@ "dev": true, "license": "MIT" }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, "node_modules/consola": { "version": "3.2.3", "dev": true, @@ -9283,101 +9334,6 @@ "typechain": "8.x" } }, - "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { - "version": "10.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" - } - }, - "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { - "version": "6.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "^10.2.1", - "ethers": "^5.4.7", - "hardhat": "^2.9.9", - "typechain": "^8.1.1" - } - }, - "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hardhat-packager/node_modules/ethers": { - "version": "5.7.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", "dev": true, @@ -10734,6 +10690,21 @@ "node": ">=0.10.0" } }, + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "dev": true, + "dependencies": { + "package-json": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/level-codec": { "version": "7.0.1", "license": "MIT" @@ -12606,6 +12577,63 @@ "node": ">= 14" } }, + "node_modules/package-json": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "dev": true, + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dev": true, + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/package-json/node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "dev": true, + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/param-case": { "version": "2.1.1", "dev": true, @@ -13386,6 +13414,12 @@ "node": ">=0.10.0" } }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, "node_modules/proxy-addr": { "version": "2.0.7", "license": "MIT", @@ -14790,13 +14824,14 @@ } }, "node_modules/solhint": { - "version": "3.6.2", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/solhint/-/solhint-5.0.4.tgz", + "integrity": "sha512-GzKBjJ8S2utRsEOCJXhY2H35gwHGmoQY2rQXcPGT4XdDlzwgGYz0Ovo9Xm7cmWYgSo121uF+5tiwrqQT2b+Rtw==", "dev": true, - "license": "MIT", "dependencies": { - "@solidity-parser/parser": "^0.16.0", + "@solidity-parser/parser": "^0.19.0", "ajv": "^6.12.6", - "antlr4": "^4.11.0", + "antlr4": "^4.13.1-patch-1", "ast-parents": "^0.0.1", "chalk": "^4.1.2", "commander": "^10.0.0", @@ -14805,6 +14840,7 @@ "glob": "^8.0.3", "ignore": "^5.2.4", "js-yaml": "^4.1.0", + "latest-version": "^7.0.0", "lodash": "^4.17.21", "pluralize": "^8.0.0", "semver": "^7.5.2", @@ -14820,12 +14856,10 @@ } }, "node_modules/solhint/node_modules/@solidity-parser/parser": { - "version": "0.16.2", - "dev": true, - "license": "MIT", - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.19.0.tgz", + "integrity": "sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA==", + "dev": true }, "node_modules/solhint/node_modules/ansi-styles": { "version": "4.3.0", @@ -18785,4 +18819,4 @@ } } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 43eb5f49a..48f390720 100644 --- a/package.json +++ b/package.json @@ -89,9 +89,9 @@ "npm-run-all": "^4.1.5", "pluralize": "^8.0.0", "prettier": "^2.8.8", - "prettier-plugin-solidity": "^1.1.3", + "prettier-plugin-solidity": "^1.4.1", "rollup-plugin-esbuild": "^5.0.0", - "solhint": "^3.6.2", + "solhint": "^5.0.3", "ts-node": "^10.2.0", "turbo": "latest", "typechain": "^8.3.2", diff --git a/packages/lsp-smart-contracts/.solhint.json b/packages/lsp-smart-contracts/.solhint.json index e8a54f742..1b979cd0e 100644 --- a/packages/lsp-smart-contracts/.solhint.json +++ b/packages/lsp-smart-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp0-contracts/.solhint.json b/packages/lsp0-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp0-contracts/.solhint.json +++ b/packages/lsp0-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp1-contracts/.solhint.json b/packages/lsp1-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp1-contracts/.solhint.json +++ b/packages/lsp1-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp10-contracts/.solhint.json b/packages/lsp10-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp10-contracts/.solhint.json +++ b/packages/lsp10-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp11-contracts/.solhint.json b/packages/lsp11-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp11-contracts/.solhint.json +++ b/packages/lsp11-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp12-contracts/.solhint.json b/packages/lsp12-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp12-contracts/.solhint.json +++ b/packages/lsp12-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp14-contracts/.solhint.json b/packages/lsp14-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp14-contracts/.solhint.json +++ b/packages/lsp14-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp16-contracts/.solhint.json b/packages/lsp16-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp16-contracts/.solhint.json +++ b/packages/lsp16-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp17-contracts/.solhint.json b/packages/lsp17-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp17-contracts/.solhint.json +++ b/packages/lsp17-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp17contractextension-contracts/.solhint.json b/packages/lsp17contractextension-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp17contractextension-contracts/.solhint.json +++ b/packages/lsp17contractextension-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp1delegate-contracts/.solhint.json b/packages/lsp1delegate-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp1delegate-contracts/.solhint.json +++ b/packages/lsp1delegate-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp2-contracts/.solhint.json b/packages/lsp2-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp2-contracts/.solhint.json +++ b/packages/lsp2-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp20-contracts/.solhint.json b/packages/lsp20-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp20-contracts/.solhint.json +++ b/packages/lsp20-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp23-contracts/.solhint.json b/packages/lsp23-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp23-contracts/.solhint.json +++ b/packages/lsp23-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp25-contracts/.solhint.json b/packages/lsp25-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp25-contracts/.solhint.json +++ b/packages/lsp25-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp26-contracts/.solhint.json b/packages/lsp26-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp26-contracts/.solhint.json +++ b/packages/lsp26-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp3-contracts/.solhint.json b/packages/lsp3-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp3-contracts/.solhint.json +++ b/packages/lsp3-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp4-contracts/.solhint.json b/packages/lsp4-contracts/.solhint.json index f53620dbf..d93a482ba 100644 --- a/packages/lsp4-contracts/.solhint.json +++ b/packages/lsp4-contracts/.solhint.json @@ -20,7 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off", + "gas-custom-errors": "off", "quotes": "off" } } diff --git a/packages/lsp5-contracts/.solhint.json b/packages/lsp5-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp5-contracts/.solhint.json +++ b/packages/lsp5-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp6-contracts/.solhint.json b/packages/lsp6-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp6-contracts/.solhint.json +++ b/packages/lsp6-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp7-contracts/.solhint.json b/packages/lsp7-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp7-contracts/.solhint.json +++ b/packages/lsp7-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol index b6adb8d84..8a0e4121d 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol @@ -63,19 +63,9 @@ import { LSP7DecreaseAllowanceNotAuthorized } from "./LSP7Errors.sol"; -/** - * @title LSP7DigitalAsset contract - * @author Matthew Stevens - * @dev Core Implementation of a LSP7 compliant contract. - * - * This contract implement the core logic of the functions for the {ILSP7DigitalAsset} interface. - */ - /** * @title Implementation of the LSP7 Digital Asset standard, a contract that represents a fungible token. * @author Matthew Stevens - * -j */ abstract contract LSP7DigitalAsset is ILSP7DigitalAsset, @@ -153,6 +143,7 @@ abstract contract LSP7DigitalAsset is * @dev Reverts whenever someone tries to send native tokens to a LSP7 contract. * @notice LSP7 contract cannot receive native tokens. */ + // solhint-disable-next-line no-complex-fallback receive() external payable virtual { // revert on empty calls with no value if (msg.value == 0) { diff --git a/packages/lsp8-contracts/.solhint.json b/packages/lsp8-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp8-contracts/.solhint.json +++ b/packages/lsp8-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol index ab35e39fa..992fc982c 100644 --- a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol +++ b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol @@ -168,6 +168,7 @@ abstract contract LSP8IdentifiableDigitalAsset is * @dev Reverts whenever someone tries to send native tokens to a LSP8 contract. * @notice LSP8 contract cannot receive native tokens. */ + // solhint-disable-next-line no-complex-fallback receive() external payable virtual { // revert on empty calls with no value if (msg.value == 0) { diff --git a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol index 5b933cc4f..bc277d9de 100644 --- a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol @@ -177,6 +177,7 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is * @dev Reverts whenever someone tries to send native tokens to a LSP8 contract. * @notice LSP8 contract cannot receive native tokens. */ + // solhint-disable-next-line no-complex-fallback receive() external payable virtual { // revert on empty calls with no value if (msg.value == 0) { diff --git a/packages/lsp9-contracts/.solhint.json b/packages/lsp9-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/lsp9-contracts/.solhint.json +++ b/packages/lsp9-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/packages/universalprofile-contracts/.solhint.json b/packages/universalprofile-contracts/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/packages/universalprofile-contracts/.solhint.json +++ b/packages/universalprofile-contracts/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } diff --git a/template/.solhint.json b/template/.solhint.json index 26e01c48a..d93a482ba 100644 --- a/template/.solhint.json +++ b/template/.solhint.json @@ -20,6 +20,7 @@ "reason-string": ["warn", { "maxLength": 120 }], "avoid-low-level-calls": "off", "no-empty-blocks": ["error", { "ignoreConstructors": true }], - "custom-errors": "off" + "gas-custom-errors": "off", + "quotes": "off" } } From 6c66b9e2b9b9513cead6e8a33c4e3a65c9c33eaa Mon Sep 17 00:00:00 2001 From: CJ42 Date: Fri, 6 Sep 2024 10:52:19 +0900 Subject: [PATCH 47/94] refactor!: remove LSP4, 7 and 8 `Core` contracts imported in `@lukso/lsp-smart-contracts` package --- .../LSP4DigitalAssetMetadata/LSP4DigitalAssetMetadataCore.sol | 4 ---- .../contracts/LSP7DigitalAsset/LSP7DigitalAssetCore.sol | 4 ---- .../LSP8IdentifiableDigitalAssetCore.sol | 4 ---- 3 files changed, 12 deletions(-) delete mode 100644 packages/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4DigitalAssetMetadataCore.sol delete mode 100644 packages/lsp-smart-contracts/contracts/LSP7DigitalAsset/LSP7DigitalAssetCore.sol delete mode 100644 packages/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAssetCore.sol diff --git a/packages/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4DigitalAssetMetadataCore.sol b/packages/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4DigitalAssetMetadataCore.sol deleted file mode 100644 index f10ae841f..000000000 --- a/packages/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4DigitalAssetMetadataCore.sol +++ /dev/null @@ -1,4 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.4; - -import "@lukso/lsp4-contracts/contracts/LSP4DigitalAssetMetadataCore.sol"; diff --git a/packages/lsp-smart-contracts/contracts/LSP7DigitalAsset/LSP7DigitalAssetCore.sol b/packages/lsp-smart-contracts/contracts/LSP7DigitalAsset/LSP7DigitalAssetCore.sol deleted file mode 100644 index 8a888e9ea..000000000 --- a/packages/lsp-smart-contracts/contracts/LSP7DigitalAsset/LSP7DigitalAssetCore.sol +++ /dev/null @@ -1,4 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.4; - -import "@lukso/lsp7-contracts/contracts/LSP7DigitalAssetCore.sol"; diff --git a/packages/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAssetCore.sol b/packages/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAssetCore.sol deleted file mode 100644 index 41b3df98e..000000000 --- a/packages/lsp-smart-contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAssetCore.sol +++ /dev/null @@ -1,4 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.12; - -import "@lukso/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetCore.sol"; From a879219187ef8e0a83354b2f3626366cdd04e827 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Fri, 6 Sep 2024 11:10:26 +0900 Subject: [PATCH 48/94] ci: add latest solc versions to test compilation --- .github/workflows/solc_version.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/solc_version.yml b/.github/workflows/solc_version.yml index e1563ae70..a1f28e3d8 100644 --- a/.github/workflows/solc_version.yml +++ b/.github/workflows/solc_version.yml @@ -45,6 +45,10 @@ jobs: "0.8.21", "0.8.22", "0.8.23", + "0.8.24", + "0.8.25", + "0.8.26", + "0.8.27", ] steps: - uses: actions/checkout@v3 From 4e06c6112d2efe6785e86898b735540f3e480d2d Mon Sep 17 00:00:00 2001 From: CJ42 Date: Mon, 7 Oct 2024 16:12:42 +0100 Subject: [PATCH 49/94] build: bump OZ to 4.9.6 everywhere --- package-lock.json | 165 +++++++++++++----- packages/lsp0-contracts/package.json | 2 +- packages/lsp1-contracts/package.json | 2 +- packages/lsp17-contracts/package.json | 2 +- packages/lsp23-contracts/package.json | 2 +- packages/lsp26-contracts/package.json | 2 +- packages/lsp6-contracts/package.json | 2 +- packages/lsp9-contracts/package.json | 2 +- .../universalprofile-contracts/package.json | 2 +- 9 files changed, 133 insertions(+), 48 deletions(-) diff --git a/package-lock.json b/package-lock.json index d6cc0707d..927449ffc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -493,8 +493,7 @@ }, "node_modules/@erc725/smart-contracts-v8": { "version": "8.0.0-rc0", - "resolved": "file:packages/lsp4-contracts/erc725-smart-contracts-v8-rc0.tgz", - "integrity": "sha512-BMz9kaqyohqxu/84b5Dce3pATmoc8DwrDPsfmkbBANMVknwdfLk85u5qUa5D/vt+VSzwaXMgimBrdcglyijL0g==", + "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.6", "@openzeppelin/contracts-upgradeable": "^4.9.6", @@ -1978,18 +1977,16 @@ }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.22.0" } }, "node_modules/@pnpm/network.ca-file": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "4.2.10" }, @@ -1999,15 +1996,13 @@ }, "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@pnpm/npm-conf": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dev": true, + "license": "MIT", "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", @@ -5704,9 +5699,8 @@ }, "node_modules/config-chain": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, + "license": "MIT", "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" @@ -9334,6 +9328,105 @@ "typechain": "8.x" } }, + "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", + "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.1.1", + "typescript": ">=4.3.0" + } + }, + "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", + "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@typechain/ethers-v5": "^10.2.1", + "ethers": "^5.4.7", + "hardhat": "^2.9.9", + "typechain": "^8.1.1" + } + }, + "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hardhat-packager/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", "dev": true, @@ -10692,9 +10785,8 @@ }, "node_modules/latest-version": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", "dev": true, + "license": "MIT", "dependencies": { "package-json": "^8.1.0" }, @@ -12579,9 +12671,8 @@ }, "node_modules/package-json": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", "dev": true, + "license": "MIT", "dependencies": { "got": "^12.1.0", "registry-auth-token": "^5.0.1", @@ -12597,9 +12688,8 @@ }, "node_modules/package-json/node_modules/registry-auth-token": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", "dev": true, + "license": "MIT", "dependencies": { "@pnpm/npm-conf": "^2.1.0" }, @@ -12609,9 +12699,8 @@ }, "node_modules/package-json/node_modules/registry-url": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "dev": true, + "license": "MIT", "dependencies": { "rc": "1.2.8" }, @@ -12624,9 +12713,8 @@ }, "node_modules/package-json/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -13416,9 +13504,8 @@ }, "node_modules/proto-list": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -14825,9 +14912,8 @@ }, "node_modules/solhint": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/solhint/-/solhint-5.0.4.tgz", - "integrity": "sha512-GzKBjJ8S2utRsEOCJXhY2H35gwHGmoQY2rQXcPGT4XdDlzwgGYz0Ovo9Xm7cmWYgSo121uF+5tiwrqQT2b+Rtw==", "dev": true, + "license": "MIT", "dependencies": { "@solidity-parser/parser": "^0.19.0", "ajv": "^6.12.6", @@ -14857,9 +14943,8 @@ }, "node_modules/solhint/node_modules/@solidity-parser/parser": { "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.19.0.tgz", - "integrity": "sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/solhint/node_modules/ansi-styles": { "version": "4.3.0", @@ -18594,7 +18679,7 @@ "@lukso/lsp17contractextension-contracts": "~0.15.0", "@lukso/lsp2-contracts": "~0.15.0", "@lukso/lsp20-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp1-contracts": { @@ -18603,7 +18688,7 @@ "license": "Apache-2.0", "dependencies": { "@lukso/lsp2-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp10-contracts": { @@ -18662,7 +18747,7 @@ "@lukso/lsp14-contracts": "~0.15.0", "@lukso/lsp17contractextension-contracts": "~0.15.0", "@lukso/lsp20-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp17contractextension-contracts": { @@ -18708,7 +18793,7 @@ "dependencies": { "@erc725/smart-contracts": "^7.0.0", "@lukso/universalprofile-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp25-contracts": { @@ -18726,7 +18811,7 @@ "dependencies": { "@lukso/lsp0-contracts": "~0.15.0", "@lukso/lsp1-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp3-contracts": { @@ -18767,7 +18852,7 @@ "@lukso/lsp2-contracts": "~0.15.0", "@lukso/lsp20-contracts": "~0.15.0", "@lukso/lsp25-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp7-contracts": { @@ -18804,7 +18889,7 @@ "@erc725/smart-contracts": "^7.0.0", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp6-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } }, "packages/universalprofile-contracts": { @@ -18815,8 +18900,8 @@ "@erc725/smart-contracts": "^7.0.0", "@lukso/lsp0-contracts": "~0.15.0", "@lukso/lsp3-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } } } -} +} \ No newline at end of file diff --git a/packages/lsp0-contracts/package.json b/packages/lsp0-contracts/package.json index 84ae9b599..13ef84dae 100644 --- a/packages/lsp0-contracts/package.json +++ b/packages/lsp0-contracts/package.json @@ -48,7 +48,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts": "^4.9.6", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp2-contracts": "~0.15.0", "@lukso/lsp14-contracts": "~0.15.0", diff --git a/packages/lsp1-contracts/package.json b/packages/lsp1-contracts/package.json index cbf2395fc..84162f3ea 100644 --- a/packages/lsp1-contracts/package.json +++ b/packages/lsp1-contracts/package.json @@ -44,7 +44,7 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts": "^4.9.6", "@lukso/lsp2-contracts": "~0.15.0" } } diff --git a/packages/lsp17-contracts/package.json b/packages/lsp17-contracts/package.json index 9a60b5b64..9a09a821d 100644 --- a/packages/lsp17-contracts/package.json +++ b/packages/lsp17-contracts/package.json @@ -45,7 +45,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts": "^4.9.6", "@account-abstraction/contracts": "^0.6.0", "@lukso/lsp6-contracts": "~0.15.0", "@lukso/lsp14-contracts": "~0.15.0", diff --git a/packages/lsp23-contracts/package.json b/packages/lsp23-contracts/package.json index 93a799686..d48736e37 100644 --- a/packages/lsp23-contracts/package.json +++ b/packages/lsp23-contracts/package.json @@ -46,7 +46,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts": "^4.9.6", "@lukso/universalprofile-contracts": "~0.15.0" } } diff --git a/packages/lsp26-contracts/package.json b/packages/lsp26-contracts/package.json index fc40553df..32e78413c 100644 --- a/packages/lsp26-contracts/package.json +++ b/packages/lsp26-contracts/package.json @@ -48,7 +48,7 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts": "^4.9.6", "@lukso/lsp0-contracts": "~0.15.0", "@lukso/lsp1-contracts": "~0.15.0" } diff --git a/packages/lsp6-contracts/package.json b/packages/lsp6-contracts/package.json index 297715ee1..7a3c96865 100644 --- a/packages/lsp6-contracts/package.json +++ b/packages/lsp6-contracts/package.json @@ -49,7 +49,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts": "^4.9.6", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp2-contracts": "~0.15.0", "@lukso/lsp14-contracts": "~0.15.0", diff --git a/packages/lsp9-contracts/package.json b/packages/lsp9-contracts/package.json index 2690d4319..9e30750a7 100644 --- a/packages/lsp9-contracts/package.json +++ b/packages/lsp9-contracts/package.json @@ -47,7 +47,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts": "^4.9.6", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp6-contracts": "~0.15.0" } diff --git a/packages/universalprofile-contracts/package.json b/packages/universalprofile-contracts/package.json index 8fa6d9e5e..0ba961452 100644 --- a/packages/universalprofile-contracts/package.json +++ b/packages/universalprofile-contracts/package.json @@ -45,7 +45,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts": "^4.9.6", "@lukso/lsp0-contracts": "~0.15.0", "@lukso/lsp3-contracts": "~0.15.0" } From fde66b80d90f4789cce76021136b9e065e561579 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Fri, 18 Oct 2024 14:14:49 +0200 Subject: [PATCH 50/94] refactor!: upgrade LPS4, 7 and 8 Tokens to `@erc725/smart-contracts` v8.0.0 --- package-lock.json | 57 ++++++++++++------- .../contracts/LSP4DigitalAssetMetadata.sol | 2 +- .../LSP4DigitalAssetMetadataInitAbstract.sol | 2 +- packages/lsp4-contracts/package.json | 2 +- packages/lsp7-contracts/package.json | 2 +- packages/lsp8-contracts/package.json | 2 +- 6 files changed, 42 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 927449ffc..9b7b76138 100644 --- a/package-lock.json +++ b/package-lock.json @@ -491,15 +491,6 @@ "solidity-bytes-utils": "0.8.0" } }, - "node_modules/@erc725/smart-contracts-v8": { - "version": "8.0.0-rc0", - "license": "Apache-2.0", - "dependencies": { - "@openzeppelin/contracts": "^4.9.6", - "@openzeppelin/contracts-upgradeable": "^4.9.6", - "solidity-bytes-utils": "0.8.0" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.17.19", "cpu": [ @@ -9330,9 +9321,8 @@ }, "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", - "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "lodash": "^4.17.15", @@ -9348,9 +9338,8 @@ }, "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", - "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", "dev": true, + "license": "MIT", "dependencies": { "fs-extra": "^9.1.0" }, @@ -9365,9 +9354,8 @@ }, "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -9380,8 +9368,6 @@ }, "node_modules/hardhat-packager/node_modules/ethers": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", "dev": true, "funding": [ { @@ -9393,6 +9379,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "peer": true, "dependencies": { "@ethersproject/abi": "5.7.0", @@ -18827,10 +18814,20 @@ "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts-v8": "file:erc725-smart-contracts-v8-rc0.tgz", + "@erc725/smart-contracts": "^8.0.0", "@lukso/lsp2-contracts": "*" } }, + "packages/lsp4-contracts/node_modules/@erc725/smart-contracts": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-8.0.0.tgz", + "integrity": "sha512-dMYUbnay5sTb2u1Z4BcJdcZylciJw09W//CtCAfLu11BVqjbMdsekwZHFPDWrz5Lna/5uVx0rI4GklVRORdK5g==", + "dependencies": { + "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts-upgradeable": "^4.9.6", + "solidity-bytes-utils": "0.8.0" + } + }, "packages/lsp5-contracts": { "name": "@lukso/lsp5-contracts", "version": "0.15.0", @@ -18860,7 +18857,7 @@ "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts-v8": "file:erc725-smart-contracts-v8-rc0.tgz", + "@erc725/smart-contracts": "^8.0.0", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp17contractextension-contracts": "*", "@lukso/lsp2-contracts": "~0.15.0", @@ -18868,12 +18865,22 @@ "@openzeppelin/contracts": "^4.9.6" } }, + "packages/lsp7-contracts/node_modules/@erc725/smart-contracts": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-8.0.0.tgz", + "integrity": "sha512-dMYUbnay5sTb2u1Z4BcJdcZylciJw09W//CtCAfLu11BVqjbMdsekwZHFPDWrz5Lna/5uVx0rI4GklVRORdK5g==", + "dependencies": { + "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts-upgradeable": "^4.9.6", + "solidity-bytes-utils": "0.8.0" + } + }, "packages/lsp8-contracts": { "name": "@lukso/lsp8-contracts", "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts-v8": "file:erc725-smart-contracts-v8-rc0.tgz", + "@erc725/smart-contracts": "^8.0.0", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp17contractextension-contracts": "*", "@lukso/lsp2-contracts": "~0.15.0", @@ -18881,6 +18888,16 @@ "@openzeppelin/contracts": "^4.9.6" } }, + "packages/lsp8-contracts/node_modules/@erc725/smart-contracts": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-8.0.0.tgz", + "integrity": "sha512-dMYUbnay5sTb2u1Z4BcJdcZylciJw09W//CtCAfLu11BVqjbMdsekwZHFPDWrz5Lna/5uVx0rI4GklVRORdK5g==", + "dependencies": { + "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts-upgradeable": "^4.9.6", + "solidity-bytes-utils": "0.8.0" + } + }, "packages/lsp9-contracts": { "name": "@lukso/lsp9-contracts", "version": "0.15.0", diff --git a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol index fa5d85bd5..cf6119640 100644 --- a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol +++ b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.4; // modules -import {ERC725Y} from "@erc725/smart-contracts-v8/contracts/ERC725Y.sol"; +import {ERC725Y} from "@erc725/smart-contracts/contracts/ERC725Y.sol"; // constants import { diff --git a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol index bbe737a4f..f6bff82ea 100644 --- a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol +++ b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.4; // modules import { ERC725YInitAbstract -} from "@erc725/smart-contracts-v8/contracts/ERC725YInitAbstract.sol"; +} from "@erc725/smart-contracts/contracts/ERC725YInitAbstract.sol"; // constants import { diff --git a/packages/lsp4-contracts/package.json b/packages/lsp4-contracts/package.json index a4e2a24f6..3dd39bb0b 100644 --- a/packages/lsp4-contracts/package.json +++ b/packages/lsp4-contracts/package.json @@ -48,7 +48,7 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@erc725/smart-contracts-v8": "file:erc725-smart-contracts-v8-rc0.tgz", + "@erc725/smart-contracts": "^8.0.0", "@lukso/lsp2-contracts": "*" } } diff --git a/packages/lsp7-contracts/package.json b/packages/lsp7-contracts/package.json index c54c76b82..0aea9b3cd 100644 --- a/packages/lsp7-contracts/package.json +++ b/packages/lsp7-contracts/package.json @@ -47,7 +47,7 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@erc725/smart-contracts-v8": "file:erc725-smart-contracts-v8-rc0.tgz", + "@erc725/smart-contracts": "^8.0.0", "@openzeppelin/contracts": "^4.9.6", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp2-contracts": "~0.15.0", diff --git a/packages/lsp8-contracts/package.json b/packages/lsp8-contracts/package.json index da294b2da..451e08600 100644 --- a/packages/lsp8-contracts/package.json +++ b/packages/lsp8-contracts/package.json @@ -47,7 +47,7 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@erc725/smart-contracts-v8": "file:erc725-smart-contracts-v8-rc0.tgz", + "@erc725/smart-contracts": "^8.0.0", "@openzeppelin/contracts": "^4.9.6", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp2-contracts": "~0.15.0", From 2fa682d441b564666c36857ce60349aa18a81c67 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Fri, 18 Oct 2024 14:17:46 +0200 Subject: [PATCH 51/94] test: repair tests not running for LSP7 and LSP8 --- packages/lsp-smart-contracts/package.json | 2 +- .../LSP6/Admin/PermissionChangeOwner.test.ts | 2 +- .../LSP6/Interactions/AllowedAddresses.test.ts | 2 +- .../LSP6/Interactions/AllowedFunctions.test.ts | 2 +- .../LSP6/Interactions/AllowedStandards.test.ts | 2 +- .../LSP6/Interactions/ERC725XExecuteBatch.test.ts | 2 +- .../LSP6/Interactions/OtherScenarios.test.ts | 2 +- .../LSP6/Interactions/PermissionCall.test.ts | 2 +- .../LSP6/Interactions/PermissionDelegateCall.test.ts | 2 +- .../LSP6/Interactions/PermissionDeploy.test.ts | 2 +- .../LSP6/Interactions/PermissionStaticCall.test.ts | 2 +- .../LSP6/Interactions/PermissionTransferValue.test.ts | 2 +- .../LSP20CallVerification/LSP6/Interactions/Security.test.ts | 2 +- .../LSP6/SetData/PermissionSetData.test.ts | 2 +- .../tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts | 3 ++- 15 files changed, 16 insertions(+), 15 deletions(-) diff --git a/packages/lsp-smart-contracts/package.json b/packages/lsp-smart-contracts/package.json index b28f91f54..a0d0e4c8b 100644 --- a/packages/lsp-smart-contracts/package.json +++ b/packages/lsp-smart-contracts/package.json @@ -62,7 +62,7 @@ "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", "package": "hardhat prepare-package", - "test": "hardhat test --no-compile tests/**/*.test.ts", + "test": "hardhat test --no-compile tests/**/*.test.ts tests/LSP7DigitalAsset/**/*.ts tests/LSP8IdentifiableDigitalAsset/**/*.ts", "test:foundry": "FOUNDRY_PROFILE=lsp_smart_contracts forge test --no-match-test Skip -vvv", "test:coverage": "hardhat coverage", "test:benchmark": "hardhat test --no-compile tests/Benchmark.test.ts" diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Admin/PermissionChangeOwner.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Admin/PermissionChangeOwner.test.ts index ae922613f..b4626a2ab 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Admin/PermissionChangeOwner.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Admin/PermissionChangeOwner.test.ts @@ -8,7 +8,7 @@ import { ERC725YDataKeys } from '../../../../constants'; import { OPERATION_TYPES } from '@lukso/lsp0-contracts'; import { PERMISSIONS } from '@lukso/lsp6-contracts'; -import { LSP6KeyManager, LSP6KeyManager__factory } from '../../types'; +import { LSP6KeyManager, LSP6KeyManager__factory } from '../../../../types'; // setup import { LSP6TestContext } from '../../../utils/context'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedAddresses.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedAddresses.test.ts index 0e99cbf28..acfe2cf14 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedAddresses.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedAddresses.test.ts @@ -2,7 +2,7 @@ import { expect } from 'chai'; import { ethers } from 'hardhat'; import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; -import { TargetContract, TargetContract__factory } from '../../types'; +import { TargetContract, TargetContract__factory } from '../../../../types'; // constants import { ERC725YDataKeys } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedFunctions.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedFunctions.test.ts index f11605ed1..634b1c8b3 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedFunctions.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedFunctions.test.ts @@ -9,7 +9,7 @@ import { LSP7Mintable__factory, LSP8Mintable, LSP8Mintable__factory, -} from '../../types'; +} from '../../../../types'; // constants import { ERC725YDataKeys, INTERFACE_IDS } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedStandards.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedStandards.test.ts index 4e9e71387..a8b011db3 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedStandards.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/AllowedStandards.test.ts @@ -11,7 +11,7 @@ import { LSP7Mintable__factory, UniversalProfile, UniversalProfile__factory, -} from '../../types'; +} from '../../../../types'; // constants import { ERC725YDataKeys, INTERFACE_IDS } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/ERC725XExecuteBatch.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/ERC725XExecuteBatch.test.ts index 549c9b124..acbfce4cc 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/ERC725XExecuteBatch.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/ERC725XExecuteBatch.test.ts @@ -15,7 +15,7 @@ import { LSP7MintableInit, LSP7MintableInit__factory, LSP7Mintable__factory, -} from '../../types'; +} from '../../../../types'; export const shouldBehaveLikeBatchExecute = ( buildContext: (initialFunding?: bigint) => Promise, diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/OtherScenarios.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/OtherScenarios.test.ts index eac90fb33..b43a78b30 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/OtherScenarios.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/OtherScenarios.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; -import { TargetContract__factory, TargetContract } from '../../types'; +import { TargetContract__factory, TargetContract } from '../../../../types'; // constants import { ERC725YDataKeys } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionCall.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionCall.test.ts index 0d88a54b3..0250ffa2f 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionCall.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionCall.test.ts @@ -9,7 +9,7 @@ import { FallbackRevert__factory, TargetContract, TargetContract__factory, -} from '../../types'; +} from '../../../../types'; // constants import { ERC725YDataKeys } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionDelegateCall.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionDelegateCall.test.ts index c937c9f22..0bd7df864 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionDelegateCall.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionDelegateCall.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; -import { ERC725YDelegateCall, ERC725YDelegateCall__factory } from '../../types'; +import { ERC725YDelegateCall, ERC725YDelegateCall__factory } from '../../../../types'; // constants import { ERC725YDataKeys } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionDeploy.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionDeploy.test.ts index 63fd4a5fa..7fd49ca8b 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionDeploy.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionDeploy.test.ts @@ -3,7 +3,7 @@ import { ethers } from 'hardhat'; import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { calculateCreate2 } from 'eth-create2-calculator'; -import { TargetContract__factory } from '../../types'; +import { TargetContract__factory } from '../../../../types'; // constants import { ERC725YDataKeys } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionStaticCall.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionStaticCall.test.ts index 3f5eec98d..9171d907d 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionStaticCall.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionStaticCall.test.ts @@ -1,7 +1,7 @@ import { expect } from 'chai'; import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; -import { TargetContract, TargetContract__factory } from '../../types'; +import { TargetContract, TargetContract__factory } from '../../../../types'; // constants import { ERC725YDataKeys } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionTransferValue.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionTransferValue.test.ts index cc2d96d5e..19bfb4079 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionTransferValue.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/PermissionTransferValue.test.ts @@ -16,7 +16,7 @@ import { UniversalProfile, FallbackContract__factory, FallbackContract, -} from '../../types'; +} from '../../../../types'; // constants import { ERC725YDataKeys } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/Security.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/Security.test.ts index b518c2690..bc25f95dd 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/Security.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/Interactions/Security.test.ts @@ -12,7 +12,7 @@ import { TargetContract, TargetContract__factory, UniversalReceiverDelegateDataUpdater__factory, -} from '../../types'; +} from '../../../../types'; // constants import { ERC725YDataKeys, LSP1_TYPE_IDS } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/SetData/PermissionSetData.test.ts b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/SetData/PermissionSetData.test.ts index 89b252508..d512c38ec 100644 --- a/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/SetData/PermissionSetData.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP20CallVerification/LSP6/SetData/PermissionSetData.test.ts @@ -3,7 +3,7 @@ import { ethers } from 'hardhat'; import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; import { encodeData, ERC725JSONSchema } from '@erc725/erc725.js'; -import { ExecutorLSP20, ExecutorLSP20__factory } from '../../types'; +import { ExecutorLSP20, ExecutorLSP20__factory } from '../../../../types'; // constants import { ERC725YDataKeys } from '../../../../constants'; diff --git a/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts b/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts index 919c0d29c..687f2092b 100644 --- a/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts +++ b/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts @@ -22,6 +22,7 @@ import { ERC725YDataKeys, INTERFACE_IDS, LSP1_TYPE_IDS, SupportedStandards } fro import { abiCoder } from '../utils/helpers'; import { AddressZero } from '../LSP17Extensions/helpers/utils'; +import { build } from 'unbuild'; export type LSP7TestAccounts = { owner: SignerWithAddress; @@ -444,8 +445,8 @@ export const shouldBehaveLikeLSP7 = (buildContext: () => Promise { - const tokenOwner = context.accounts.owner.address; it('should revert', async () => { + const tokenOwner = context.accounts.owner.address; const subtractedAmount = toBigInt(1); await expect( From 0eb99e9a84007e4d3171f1a6573c263f686e8c29 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Fri, 18 Oct 2024 14:27:48 +0200 Subject: [PATCH 52/94] Apply PR fix 976 + Merge branch 'develop' into refactor/lsp7-with-erc725-v8 --- packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol | 2 +- .../lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol index 8a0e4121d..442c0df4d 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol @@ -719,7 +719,7 @@ abstract contract LSP7DigitalAsset is operator ]; - if (amountToSpend > authorizedAmount) { + if (authorizedAmount == 0 || amountToSpend > authorizedAmount) { revert LSP7AmountExceedsAuthorizedAmount( tokenOwner, authorizedAmount, diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol index 1cd27ebee..ab256ade1 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol @@ -733,7 +733,7 @@ abstract contract LSP7DigitalAssetInitAbstract is operator ]; - if (amountToSpend > authorizedAmount) { + if (authorizedAmount == 0 || amountToSpend > authorizedAmount) { revert LSP7AmountExceedsAuthorizedAmount( tokenOwner, authorizedAmount, From 01db7bda85440291fa5f43a30a6eac05374ee6de Mon Sep 17 00:00:00 2001 From: CJ42 Date: Tue, 22 Oct 2024 10:58:42 +0200 Subject: [PATCH 53/94] test: move Foundry tests for LSP0 inside `@lukso/lsp0-contracts` package --- foundry.toml | 5 +++++ .../foundry/AcceptOwnershipCleanState.t.sol} | 0 .../foundry/TwoStepOwnership.t.sol} | 0 .../foundry/TwoStepRenounceOwnership.t.sol} | 0 packages/lsp0-contracts/package.json | 1 + 5 files changed, 6 insertions(+) rename packages/{lsp-smart-contracts/tests/foundry/LSP14Ownable2Step/AcceptOwnershipCleanState.sol => lsp0-contracts/foundry/AcceptOwnershipCleanState.t.sol} (100%) rename packages/{lsp-smart-contracts/tests/foundry/LSP14Ownable2Step/TwoStepOwnership.sol => lsp0-contracts/foundry/TwoStepOwnership.t.sol} (100%) rename packages/{lsp-smart-contracts/tests/foundry/LSP14Ownable2Step/TwoStepRenounceOwnership.sol => lsp0-contracts/foundry/TwoStepRenounceOwnership.t.sol} (100%) diff --git a/foundry.toml b/foundry.toml index 960257678..2873a92a8 100644 --- a/foundry.toml +++ b/foundry.toml @@ -11,6 +11,11 @@ solc = "0.8.17" runs = 10_000 max_test_rejects = 200_000 +[profile.lsp0] +src = 'packages/lsp0-contracts/contracts' +test = 'packages/lsp0-contracts/foundry' +out = 'packages/lsp0-contracts/contracts/foundry_artifacts' + [profile.lsp2] src = 'packages/lsp2-contracts/contracts' test = 'packages/lsp2-contracts/foundry' diff --git a/packages/lsp-smart-contracts/tests/foundry/LSP14Ownable2Step/AcceptOwnershipCleanState.sol b/packages/lsp0-contracts/foundry/AcceptOwnershipCleanState.t.sol similarity index 100% rename from packages/lsp-smart-contracts/tests/foundry/LSP14Ownable2Step/AcceptOwnershipCleanState.sol rename to packages/lsp0-contracts/foundry/AcceptOwnershipCleanState.t.sol diff --git a/packages/lsp-smart-contracts/tests/foundry/LSP14Ownable2Step/TwoStepOwnership.sol b/packages/lsp0-contracts/foundry/TwoStepOwnership.t.sol similarity index 100% rename from packages/lsp-smart-contracts/tests/foundry/LSP14Ownable2Step/TwoStepOwnership.sol rename to packages/lsp0-contracts/foundry/TwoStepOwnership.t.sol diff --git a/packages/lsp-smart-contracts/tests/foundry/LSP14Ownable2Step/TwoStepRenounceOwnership.sol b/packages/lsp0-contracts/foundry/TwoStepRenounceOwnership.t.sol similarity index 100% rename from packages/lsp-smart-contracts/tests/foundry/LSP14Ownable2Step/TwoStepRenounceOwnership.sol rename to packages/lsp0-contracts/foundry/TwoStepRenounceOwnership.t.sol diff --git a/packages/lsp0-contracts/package.json b/packages/lsp0-contracts/package.json index 13ef84dae..462c3a23a 100644 --- a/packages/lsp0-contracts/package.json +++ b/packages/lsp0-contracts/package.json @@ -44,6 +44,7 @@ "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", + "test:foundry": "FOUNDRY_PROFILE=lsp0 forge test -vvv", "package": "hardhat prepare-package" }, "dependencies": { From 743c1b089f512a2328ab6008a2590e2a26a8ef45 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Tue, 22 Oct 2024 11:48:25 +0200 Subject: [PATCH 54/94] test: move LSP6 tests for permissions in LSP6 package + rename file --- .../LSP6RestrictedController.t.sol | 75 ------------- .../foundry/LSP6Permissions.t.sol | 100 ++++++++++++++++++ 2 files changed, 100 insertions(+), 75 deletions(-) delete mode 100644 packages/lsp-smart-contracts/tests/foundry/LSP6KeyManager/LSP6RestrictedController.t.sol create mode 100644 packages/lsp6-contracts/foundry/LSP6Permissions.t.sol diff --git a/packages/lsp-smart-contracts/tests/foundry/LSP6KeyManager/LSP6RestrictedController.t.sol b/packages/lsp-smart-contracts/tests/foundry/LSP6KeyManager/LSP6RestrictedController.t.sol deleted file mode 100644 index 82eabbbcc..000000000 --- a/packages/lsp-smart-contracts/tests/foundry/LSP6KeyManager/LSP6RestrictedController.t.sol +++ /dev/null @@ -1,75 +0,0 @@ -pragma solidity ^0.8.13; - -import "@lukso/lsp6-contracts/contracts/LSP6KeyManager.sol"; -import { - LSP0ERC725Account -} from "@lukso/lsp0-contracts/contracts/LSP0ERC725Account.sol"; -import "@lukso/lsp2-contracts/contracts/LSP2Utils.sol"; -import "@lukso/lsp6-contracts/contracts/LSP6Constants.sol"; -import { - UniversalProfileTestsHelper -} from "../GasTests/UniversalProfileTestsHelper.sol"; - -import {NotAuthorised} from "@lukso/lsp6-contracts/contracts/LSP6Errors.sol"; - -import { - OPERATION_4_DELEGATECALL -} from "@erc725/smart-contracts/contracts/constants.sol"; - -contract LSP6RestrictedController is UniversalProfileTestsHelper { - LSP0ERC725Account public mainUniversalProfile; - LSP6KeyManager public keyManagerMainUP; - address public mainUniversalProfileOwner; - address public combineController; - - function setUp() public { - mainUniversalProfileOwner = vm.addr(1); - vm.label(mainUniversalProfileOwner, "mainUniversalProfileOwner"); - combineController = vm.addr(10); - vm.label(combineController, "combineController"); - mainUniversalProfile = new LSP0ERC725Account(mainUniversalProfileOwner); - - // deploy LSP6KeyManager - keyManagerMainUP = new LSP6KeyManager(address(mainUniversalProfile)); - transferOwnership( - mainUniversalProfile, - mainUniversalProfileOwner, - address(keyManagerMainUP) - ); - } - - function testFail_evenWhenPermissionsGivenTwice() public { - bytes32[] memory ownerPermissions = new bytes32[](3); - ownerPermissions[0] = _PERMISSION_DEPLOY; - ownerPermissions[1] = _PERMISSION_DEPLOY; - givePermissionsToController( - mainUniversalProfile, - combineController, - address(keyManagerMainUP), - ownerPermissions - ); - bytes32 controllerPermissionDataKey = LSP2Utils - .generateMappingWithGroupingKey( - _LSP6KEY_ADDRESSPERMISSIONS_PERMISSIONS_PREFIX, - bytes20(combineController) - ); - bytes32 controllerPermissions = bytes32( - mainUniversalProfile.getData(controllerPermissionDataKey) - ); - - // CHECK that granting permission `DEPLOY` twice should not result in granting permission `SUPER_SETDATA` - // - _PERMISSION_DEPLOY = 0x0000000000000000000000000000000000000000000000000000000000010000; - // - _PERMISSION_SUPER_SETDATA = 0x0000000000000000000000000000000000000000000000000000000000020000; - assert(controllerPermissions == _PERMISSION_DEPLOY); - - vm.prank(combineController); - - // This should revert as the controller is only allowed to setData but only deploy contracts - mainUniversalProfile.setData( - bytes32( - 0xcafecafecafecafecafecafecafecafecafecafecafecafecafecafecafecafe - ), - hex"deadbeef" - ); - } -} diff --git a/packages/lsp6-contracts/foundry/LSP6Permissions.t.sol b/packages/lsp6-contracts/foundry/LSP6Permissions.t.sol new file mode 100644 index 000000000..9f81a0acb --- /dev/null +++ b/packages/lsp6-contracts/foundry/LSP6Permissions.t.sol @@ -0,0 +1,100 @@ +pragma solidity ^0.8.13; + +// Testing utilities +import {Test} from "forge-std/Test.sol"; +import {LSP2Utils} from "@lukso/lsp2-contracts/contracts/LSP2Utils.sol"; +import {LSP6Utils} from "@lukso/lsp6-contracts/contracts/LSP6Utils.sol"; + +// Test setup +import { + IERC725Y +} from "@erc725/smart-contracts/contracts/interfaces/IERC725Y.sol"; +import {ERC725} from "@erc725/smart-contracts/contracts/ERC725.sol"; +import { + LSP6KeyManager +} from "@lukso/lsp6-contracts/contracts/LSP6KeyManager.sol"; + +// errors +import {NotAuthorised} from "@lukso/lsp6-contracts/contracts/LSP6Errors.sol"; + +// constants +import { + OPERATION_4_DELEGATECALL +} from "@erc725/smart-contracts/contracts/constants.sol"; +import { + _PERMISSION_DEPLOY, + _LSP6KEY_ADDRESSPERMISSIONS_PERMISSIONS_PREFIX +} from "@lukso/lsp6-contracts/contracts/LSP6Constants.sol"; + +contract LSP6Permissions is Test { + ERC725 public mainAccount; + LSP6KeyManager public keyManagerForAccount; + address public mainAccountController; + address public combineController; + + function setUp() public { + mainAccountController = vm.addr(1); + vm.label(mainAccountController, "mainAccountController"); + combineController = vm.addr(10); + vm.label(combineController, "combineController"); + mainAccount = new ERC725(mainAccountController); + + // deploy LSP6KeyManager and link it to this account + keyManagerForAccount = new LSP6KeyManager(address(mainAccount)); + vm.prank(mainAccountController); + mainAccount.transferOwnership(address(keyManagerForAccount)); + } + + function testFail_evenWhenPermissionsGivenTwice() public { + bytes32[] memory ownerPermissions = new bytes32[](3); + ownerPermissions[0] = _PERMISSION_DEPLOY; + ownerPermissions[1] = _PERMISSION_DEPLOY; + _givePermissionsToController( + mainAccount, + combineController, + address(keyManagerForAccount), + ownerPermissions + ); + bytes32 controllerPermissionDataKey = LSP2Utils + .generateMappingWithGroupingKey( + _LSP6KEY_ADDRESSPERMISSIONS_PERMISSIONS_PREFIX, + bytes20(combineController) + ); + bytes32 controllerPermissions = bytes32( + mainAccount.getData(controllerPermissionDataKey) + ); + + // CHECK that granting permission `DEPLOY` twice should not result in granting permission `SUPER_SETDATA` + // - _PERMISSION_DEPLOY = 0x0000000000000000000000000000000000000000000000000000000000010000; + // - _PERMISSION_SUPER_SETDATA = 0x0000000000000000000000000000000000000000000000000000000000020000; + assert(controllerPermissions == _PERMISSION_DEPLOY); + + vm.prank(combineController); + + // This should revert as the controller does not have the permission to setData but is only authorised to deploy contracts + mainAccount.setData( + bytes32( + 0xcafecafecafecafecafecafecafecafecafecafecafecafecafecafecafecafe + ), + hex"deadbeef" + ); + } + + function _givePermissionsToController( + IERC725Y account, + address controller, + address permissionGiver, + bytes32[] memory permissions + ) internal { + bytes32 dataKey = LSP2Utils.generateMappingWithGroupingKey( + _LSP6KEY_ADDRESSPERMISSIONS_PERMISSIONS_PREFIX, + bytes20(controller) + ); + + bytes32 combinedPermissions = LSP6Utils.combinePermissions(permissions); + bytes memory dataValue = abi.encodePacked(combinedPermissions); + vm.prank(permissionGiver); + + account.setData(dataKey, dataValue); + } +} From 3aca30bb0794432d274ffbd59787b05baef07ca9 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Tue, 22 Oct 2024 14:03:33 +0200 Subject: [PATCH 55/94] build: use workspace version as dependency in all `package.json` files --- package-lock.json | 97 +++++++++--------- packages/lsp-smart-contracts/package.json | 44 ++++---- packages/lsp0-contracts/package.json | 10 +- .../erc725-smart-contracts-v8-rc0.tgz | Bin 14333 -> 0 bytes .../erc725-smart-contracts-v8-rc0.tgz | Bin 14333 -> 0 bytes packages/lsp7-contracts/package.json | 4 +- .../erc725-smart-contracts-v8-rc0.tgz | Bin 14333 -> 0 bytes packages/lsp8-contracts/package.json | 4 +- .../universalprofile-contracts/package.json | 4 +- 9 files changed, 80 insertions(+), 83 deletions(-) delete mode 100644 packages/lsp4-contracts/erc725-smart-contracts-v8-rc0.tgz delete mode 100644 packages/lsp7-contracts/erc725-smart-contracts-v8-rc0.tgz delete mode 100644 packages/lsp8-contracts/erc725-smart-contracts-v8-rc0.tgz diff --git a/package-lock.json b/package-lock.json index 9b7b76138..ea89154d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18631,28 +18631,28 @@ "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@lukso/lsp0-contracts": "~0.15.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp10-contracts": "~0.15.0", - "@lukso/lsp12-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp16-contracts": "~0.15.0", - "@lukso/lsp17-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp1delegate-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@lukso/lsp23-contracts": "~0.15.0", - "@lukso/lsp25-contracts": "~0.15.0", - "@lukso/lsp26-contracts": "~0.15.0", - "@lukso/lsp3-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", - "@lukso/lsp5-contracts": "~0.15.0", - "@lukso/lsp6-contracts": "~0.15.0", - "@lukso/lsp7-contracts": "~0.15.0", - "@lukso/lsp8-contracts": "~0.15.0", - "@lukso/lsp9-contracts": "~0.15.0", - "@lukso/universalprofile-contracts": "~0.15.0" + "@lukso/lsp0-contracts": "*", + "@lukso/lsp1-contracts": "*", + "@lukso/lsp10-contracts": "*", + "@lukso/lsp12-contracts": "*", + "@lukso/lsp14-contracts": "*", + "@lukso/lsp16-contracts": "*", + "@lukso/lsp17-contracts": "*", + "@lukso/lsp17contractextension-contracts": "*", + "@lukso/lsp1delegate-contracts": "*", + "@lukso/lsp2-contracts": "*", + "@lukso/lsp20-contracts": "*", + "@lukso/lsp23-contracts": "*", + "@lukso/lsp25-contracts": "*", + "@lukso/lsp26-contracts": "*", + "@lukso/lsp3-contracts": "*", + "@lukso/lsp4-contracts": "*", + "@lukso/lsp5-contracts": "*", + "@lukso/lsp6-contracts": "*", + "@lukso/lsp7-contracts": "*", + "@lukso/lsp8-contracts": "*", + "@lukso/lsp9-contracts": "*", + "@lukso/universalprofile-contracts": "*" } }, "packages/lsp0-contracts": { @@ -18661,11 +18661,11 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "*", + "@lukso/lsp14-contracts": "*", + "@lukso/lsp17contractextension-contracts": "*", + "@lukso/lsp2-contracts": "*", + "@lukso/lsp20-contracts": "*", "@openzeppelin/contracts": "^4.9.6" } }, @@ -18684,7 +18684,7 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "~0.15.0" + "@lukso/lsp2-contracts": "*" } }, "packages/lsp11-contracts": { @@ -18693,7 +18693,7 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp25-contracts": "~0.15.0", + "@lukso/lsp25-contracts": "*", "@openzeppelin/contracts": "^4.9.3" } }, @@ -18731,9 +18731,9 @@ "dependencies": { "@account-abstraction/contracts": "^0.6.0", "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "*", + "@lukso/lsp17contractextension-contracts": "*", + "@lukso/lsp20-contracts": "*", "@openzeppelin/contracts": "^4.9.6" } }, @@ -18751,12 +18751,12 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp10-contracts": "~0.15.0", - "@lukso/lsp5-contracts": "~0.15.0", - "@lukso/lsp7-contracts": "~0.15.0", - "@lukso/lsp8-contracts": "~0.15.0", - "@lukso/lsp9-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "*", + "@lukso/lsp10-contracts": "*", + "@lukso/lsp5-contracts": "*", + "@lukso/lsp7-contracts": "*", + "@lukso/lsp8-contracts": "*", + "@lukso/lsp9-contracts": "*", "@openzeppelin/contracts": "^4.9.6" } }, @@ -18820,8 +18820,7 @@ }, "packages/lsp4-contracts/node_modules/@erc725/smart-contracts": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-8.0.0.tgz", - "integrity": "sha512-dMYUbnay5sTb2u1Z4BcJdcZylciJw09W//CtCAfLu11BVqjbMdsekwZHFPDWrz5Lna/5uVx0rI4GklVRORdK5g==", + "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.6", "@openzeppelin/contracts-upgradeable": "^4.9.6", @@ -18858,17 +18857,16 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^8.0.0", - "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "*", "@lukso/lsp17contractextension-contracts": "*", - "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "*", "@lukso/lsp4-contracts": "*", "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp7-contracts/node_modules/@erc725/smart-contracts": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-8.0.0.tgz", - "integrity": "sha512-dMYUbnay5sTb2u1Z4BcJdcZylciJw09W//CtCAfLu11BVqjbMdsekwZHFPDWrz5Lna/5uVx0rI4GklVRORdK5g==", + "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.6", "@openzeppelin/contracts-upgradeable": "^4.9.6", @@ -18881,17 +18879,16 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^8.0.0", - "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "*", "@lukso/lsp17contractextension-contracts": "*", - "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "*", "@lukso/lsp4-contracts": "*", "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp8-contracts/node_modules/@erc725/smart-contracts": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-8.0.0.tgz", - "integrity": "sha512-dMYUbnay5sTb2u1Z4BcJdcZylciJw09W//CtCAfLu11BVqjbMdsekwZHFPDWrz5Lna/5uVx0rI4GklVRORdK5g==", + "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.6", "@openzeppelin/contracts-upgradeable": "^4.9.6", @@ -18915,8 +18912,8 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp0-contracts": "~0.15.0", - "@lukso/lsp3-contracts": "~0.15.0", + "@lukso/lsp0-contracts": "*", + "@lukso/lsp3-contracts": "*", "@openzeppelin/contracts": "^4.9.6" } } diff --git a/packages/lsp-smart-contracts/package.json b/packages/lsp-smart-contracts/package.json index a0d0e4c8b..5dead1d92 100644 --- a/packages/lsp-smart-contracts/package.json +++ b/packages/lsp-smart-contracts/package.json @@ -68,27 +68,27 @@ "test:benchmark": "hardhat test --no-compile tests/Benchmark.test.ts" }, "dependencies": { - "@lukso/lsp0-contracts": "~0.15.0", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp10-contracts": "~0.15.0", - "@lukso/lsp12-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp16-contracts": "~0.15.0", - "@lukso/lsp17-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp1delegate-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0", - "@lukso/lsp23-contracts": "~0.15.0", - "@lukso/lsp25-contracts": "~0.15.0", - "@lukso/lsp26-contracts": "~0.15.0", - "@lukso/lsp3-contracts": "~0.15.0", - "@lukso/lsp4-contracts": "~0.15.0", - "@lukso/lsp5-contracts": "~0.15.0", - "@lukso/lsp6-contracts": "~0.15.0", - "@lukso/lsp7-contracts": "~0.15.0", - "@lukso/lsp8-contracts": "~0.15.0", - "@lukso/lsp9-contracts": "~0.15.0", - "@lukso/universalprofile-contracts": "~0.15.0" + "@lukso/lsp0-contracts": "*", + "@lukso/lsp1-contracts": "*", + "@lukso/lsp10-contracts": "*", + "@lukso/lsp12-contracts": "*", + "@lukso/lsp14-contracts": "*", + "@lukso/lsp16-contracts": "*", + "@lukso/lsp17-contracts": "*", + "@lukso/lsp17contractextension-contracts": "*", + "@lukso/lsp1delegate-contracts": "*", + "@lukso/lsp2-contracts": "*", + "@lukso/lsp20-contracts": "*", + "@lukso/lsp23-contracts": "*", + "@lukso/lsp25-contracts": "*", + "@lukso/lsp26-contracts": "*", + "@lukso/lsp3-contracts": "*", + "@lukso/lsp4-contracts": "*", + "@lukso/lsp5-contracts": "*", + "@lukso/lsp6-contracts": "*", + "@lukso/lsp7-contracts": "*", + "@lukso/lsp8-contracts": "*", + "@lukso/lsp9-contracts": "*", + "@lukso/universalprofile-contracts": "*" } } diff --git a/packages/lsp0-contracts/package.json b/packages/lsp0-contracts/package.json index 462c3a23a..d15f4c3ff 100644 --- a/packages/lsp0-contracts/package.json +++ b/packages/lsp0-contracts/package.json @@ -50,10 +50,10 @@ "dependencies": { "@erc725/smart-contracts": "^7.0.0", "@openzeppelin/contracts": "^4.9.6", - "@lukso/lsp1-contracts": "~0.15.0", - "@lukso/lsp2-contracts": "~0.15.0", - "@lukso/lsp14-contracts": "~0.15.0", - "@lukso/lsp17contractextension-contracts": "~0.15.0", - "@lukso/lsp20-contracts": "~0.15.0" + "@lukso/lsp1-contracts": "*", + "@lukso/lsp2-contracts": "*", + "@lukso/lsp14-contracts": "*", + "@lukso/lsp17contractextension-contracts": "*", + "@lukso/lsp20-contracts": "*" } } diff --git a/packages/lsp4-contracts/erc725-smart-contracts-v8-rc0.tgz b/packages/lsp4-contracts/erc725-smart-contracts-v8-rc0.tgz deleted file mode 100644 index b63c8186ac8db85184efe929c2cedd5ae11746d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14333 zcmcI}Q*bT}%w}!dcHio>J+*Dywr#towvAKUKDBMzHs1Yq|C^n?-&{ROCX>lbCV3_y zj)4LB-vS1__OtT9=V(0h?fJlrblzdF+-FqI9(9pOOo=roSeHmbzkD~7t;eTev3Gy` zot4BT_4CQ2rs+dYtD}BZ@=VIoH7{5gNT-TvovCt5m|Oqy_?X-jQ`IEk7u_dc-n4p~ zTy&Z%?@-spLlUq-c;(i)-P0qV|5dqo{q(XA4Db%^3zM|`DwjV6rCL9CjeG}UKS->6 z6V6t0m>qGwYSOH&M5hVVYu?dN^r)8${Rj;~{z)%cJ%5rB$f6qms@U%B>atNHD8n31 zb|;BIyJmR1`?z}eq<8jpl9t!k&B-&!?`v--+wEg9J9@Y}K8{(`puTGls*#_q zt7V$)^MX{U53!HQX=Fk68Z1_9ZpC2Rv=-kKm9;`iz%3?~DvPB6f+et$M!Xa;M->+c zSx!C0g9O?4+wPr{J!#2yTmFs_UQV`_yz%^%`aK4!bF@h#&Uq5!Nd!v;P@fLIWZzKl zu{~6UsJ!p|V(T<<3VGu-*9Q~4Q~c=?N{aM!CB1_i9lJFBC;a<_s9dPi16sc8h-2P3d#MNqi0QDptyWHYaFq55e@0Jr z^P@;u{|b0%2N660Y( z-boes z$H7vf@vZ5R^9e0Wm}lv;WxJ46zyzr*=F}$)V`P<3T{$x`!8uUAV$H>uY~wz1QI0#` z$bXK~_@|q|c_@7$k&5#}@JuIxAV0GqfJ!b^T1{8X!t|8#78DCE_6?=u^~)K7d#l<} zTE7LK*c+ud#^b(Fu?+j-;IBz1^{)rxEX@67v}U8Y;>(=|ha#RiJWH!WEXoe|FO zqbA1^^>B*`Q^9)F$-2`K2O%})=>j*5H72N7ugar9V%sC9GrSk35F;K5+$NS_9j`K^ z(Pb!N)vLt-`LS17_6<1=p~NJn#b!l8_ohk-w%iGHr5S(&_2PQE~p=c3ZgAbFwf z$QB1hgN!of-zPe46|pE6Iu|1fpIJCq0Q-eWTd zm=7dD@cKqX;@_jZN=aH&*J9^Jz{ZR&4T%)(=OjW^autB^0Pr@|1VGhmXWj-eXBPrV zwJdl;1jQUb0PK!}7M1J+d{^{RqOTZITYDNxx^TWjq|p%V{um1+bGAAFan?MVlfq-9 zEj<{n;BrY&Xkq?5bowW{L#MWfW=BZOy$Md6}(IgNJSo zTP{3wEM}&t;shT=%`j9%N8;__JH5!kQ8LvvYC%ZGg-kJwJzCT>O%z~J!voE)?ny#& zIKqsv*ar}Pq;^TsA-={~8j3VBBi8*!N5+4_1E>f4xRu&t#}Ua2()8jh&WSsYYm(O3 zoNG|s@4BAwLFK%0oFe{}|HgcnBazUd}1s~gDErT-w5k_*Q6!1 zkBoyAgpa;?|FH}I!@3bQRNur_5~gvoYH7)(-jDUQE32V(tQk8bLwP#{u+n5I3yH^u zQJ52n$n$HLjWmeTtN|G{Ga#6&v4>rp+nJ1QU=P^TCP|EuK|a9 zi^c2(Pq1i}<`SVs+c=XEywFjWu0OnnM;(j0=K;(GE3KN~{|30O4hhPeu6%oOAh+Pt z>XlAG^?qL^bHyAh(ceX(0d#w&F&`0`#ErN(j0c?Jy2TjhYMTU^XqmTn2QHS@eB!6k zNthEYjYUDiR3k4;8BZ^&cVc@@5Py}nA(ZkWqFl_+dm=dNi$cH$hkr2TPZx70!kfGW zqNSv&M%s$cA}ErqO2$i{K7uSw(;%dwP4;(TSn3PD%T~0`9Er=UN5$w3afqC-kXlY9 za*whgQ)?F+>E`<}?yrjG&XK@na-;TG{yr#7ytr?=g7y|x9#Si}L!%{SLd?NCKuQzN zcVlqo4}a$9Opx>h^VtAM4^pE+a2MX;W#%Yv*}U}sYIGxjofi!qVC%L7eMtVA77>;b zy!{tU&Ac2acSI_P4&I##`%BjeGh~QW2#hi1uifYU)dAqS`N?}qQCY4`Hrn_+w?d4n zCYDZmK03UV#qG$dQaTSwu&CbKyH2qX@^?O!`6KR?bC7otla^4Q7-OaluJ!&LYiDx~ z!(>>u39l|13V!A+c2oG41j+oJDPATzSIzH9^6t=N_G-FNm<0~JG9dZ|U+@c=GOsImo6h2LnZq6% ziA+w%!NqR~wNJ^-;I1K9a)^S{Oy$KPwshh5WBEZjs|=x1ImS?>Z7pq;z!rhz0c7N4 z?2~*h_)$0ogoE5?j5DYTRFrjd)HlxtTLZ9qKN^|FT*jH|Irb#o&0h4Amh^Cp(su4K-s*1O+|wybV)E zy>djw(0GRYAaWODg??Y4($<(srnS~=gEQ@R0f@{YLTLer)1+~S=6K4eKRQ(hn+=~rM8Igl zZ9C7xxmZXob2BU@8^sIctBMZvGcB{j8$bN_uxw0CC1Ejc%o6a)+1v|{OcS5QQc+gc zvWASD>NwCdaXSEw#q1R;jHXc=GP=gHIvq@KWp2xf_wW;;>=V3bisUFEirg#8RDB(%wcB=OKm~wnilN>i#eBhwen(W z>XXsGYEp@4Z}Qa-U*cuiC@q+>CL>d9W!LBD>*B8;GU+{X7oU*RNtz^S+=Oe0Wgbp( z6t;$pCQau2@fZ>ka0{s=LFLW_sD)6iR7*70j{EdzVMTJ2+sxB?Pt$HFQkLvF%^i9( zH)J>L`c<-3Z4lIcEJCi0_yiX!}lzVYz6g54@0>etUBYyn643H!Rza3kwYN zmIyPG9xL{Lh&FD@*49%$9s|qQs03$ZaQBjC-~iS;1;$#x1FIq@Vp@XP zuYzeeu(6i#`r*Vws-rJjp&rewoh}Vmi%8e`d&y2UHjlCos~+k9Y!T1a0e=pb+28Nq z9vy$qnuaSu0CPnv<2M%hQhJ zi{LPeIA@KESvvUp{QXx*u$dUMPO*3O^9+1FUcT3d-9mf=+`S%N4`VJ59cJ?L4R-gi zK3={)4z8p-kqN5!^@$Ah^YgpC{e7kMdpmvK4=!Z$S|3`O1GB?2qP#HR;@XfrS;<=l zpWF){y$GgFkPf)yJ!P>h>4(29xN1$9Qdh)Du~?VX*t$-@xVj>F?Uzi)mzMeHwN18T zR=R)DzwQXd@N&?E#pk(jAAsuTUNc7_@JVXI{3$q z8)}Po2Mf=q?vSy0BR-L00}!xz^^t>vGh9S|gMs9Rum^jAad9Y&knIN-+Pn5-@sqsC z@6(d=9bvK-L<&G*3W<%&+OT6cle#~!?ZrofkNO|Er!8!Emxk* z8M+kfgPmMx?qm+p+Rs?Gv(M0VMox$Av%tTHMp&~D_FiZsSkvGBV^?LqCP~6~M-%%Y zMAqHh=OIh7LkUUHI@SPf0cI%VqL1^wMzn;a^u-A|&nH*A zJ~^1WYNrkNT&6@(Q($>6tJhjQovQfDd`tl^lq{6(DI@2fZk7<{tIk2MNfU~$Otp|~ z5&K+yvLyx$J;nrsogoj&`$QEM<6VOC2PSsqCD965K>Up$deYw#A)JH7^R*ddKJCH& z4n&q;ZJk&` zy5>>w5dqHN`Fc5n9ok1w5x4OMy}VtVd;xwCGLb96@4T9HuaK*5$UCGo9w&^jTbIAT z3JSMq7FHk_)FpTg?|DJ&8Cp8RmybqsAbUvwPr;IsWdgxE(rGY_-zVjERV9ID!ny7; zJ(&qrbTzZ{B|0VUcwq{$eSspyosV@F5G`)1D#L8r5d4vEP)MbOoTIHS9PrI#X-2}k z*)fW$7nC3j59H)*D2_suI`ll1CkJclH~6HA#;MlW(U~rOIG0t+s7;LYo+5uqQSbI& zcuy?bp@_N>EyO-fRJi&;GGgKEZw@g}o_eZSW;My7|MbvqX--ZXGNJDR(kG75BB$a-SI=M3kRNbr z2e1j-;L2rQJ&Bh^?c7}I%BSMHHmzRlQD;k@nKec{aBVu*q|o|W-SvkJSSeBk1(dwi zKstzSVw%vRJW)wBm{0Mc%{ev}po>$@GsFy4TjV#UX?p1$oi1;Ds64-R0H;%d0$E#o zR2|O__Z2_D+@9@k{S{ze*Xpg>4>0~d;!=KwsdkpJkB^_r$H!kfFEPIjhO3MB{01>@ zEP3Wr-h=lA>HH@-+_!fZzk3AxGvp`Gd&xzAYcHl}hqTlu;+y(UjX}P>-MEl`H*Xg& zl>GC{$H{Rf-pSG1`y=^65RyFOY+T)JoaE}y8DS#PS7#@GFTX&doyY#b`TAqi?SHFJ^zT>{Cc97!kBWeiJ)Y^oBYeF6eHEQM z=5xdsybItnHKGeC9Yikk=R0bL@xtE-qD}I3&@t%3!_x^76J9VgMYmTQk&q4n&Nag8 zxNc0tUbx+`dA&E|nG%)LXJ`98UD*70uv{O)I*s~`uqj=~CKfS0wq@NlsiUBqKR)CR z@wFfyJ}mD+Q1I>(kdUNF@2C5i1f)B#h`}4;o;_hm6wR8iA64~UXslVxO?d~(6SNjhUX9&LuUDhJ z$Yg>wy?C|>sS#3a5PA?|;R!6nOj8oF0#$Ao&QSc>(DTaMKZi(ITyH$ZGycFm$7VSH z=X+XrXyw;7j4f()k-vS)iUsxjBe%}Xu}GbH0ei%?f%{|&-+oQ9IPF@!st`^AG$}bW zW0G#Aa~2L^jEET@vaOOGG_WgX!DvJlVtl&jm6O&I`K3=F=6jm zf2r((QY(9annEBu*EfhGfcChHad?4pM?E8ShJuHNst}Y3gcz)cB zJt85!PHMcLT+_;(39KuV=sCo7X1i6O1A=O06g}E+7YE)P>sbu(_peWOJVgvgx_rnx z`?~tTGI$Sl5XG~W3pw&dBYwk1BLF7>WiHksgdcExe%OM7VWS>C77~Mv#aAm?P?W?^ zHXjUl*~e0mFNLpD)DF{JD~{P#_7+)I;bm*)#TBz{oJOyRDBWw<>-G?cXxoB+yFzi! z!t!Xm#CKR`i*LO{dNz`;T$|?#4VMNbL=e>jiU^=RHgry+NB!fHaIWJdK68;uW1nd* z7k50nIry)FUHiLxIqsl#ggoZfd9DzVpm%Du>j_RUhs%|E zX=ffK6^g`-B+%y1JvcvmL#&>1SIZ8j8|=#J(WbuvY0nmsJ3m5gF7>;&$S>m1wsisZ z0uRV9on4>c4&4$GKcJW1(8cq6hK_rLp0*zGL|60jyXD0!&z%tw%As@z)?A_BTDg)O zY$1=pkGiYYM@kMWQ|-M+;w`=|+N3R`WkWP3t!7R{RMshzknbOTi`RnHd!A47TSwP5 z!q>BXdk4`j0XY;`7-(hAtUzJ)DFpBmQy4WI_l;af*^|L_9X)wTVd^CN(x`T;Ed0;RMIDfIY^ zv<3bd-tl*s!(zpwmLp&1a6oPiif&aK!(-#Kbkoi?zj8amA8kZ*pk!@om^Jh^9l2K+ zb10jSEtLB&HbhIEpk)&c1Wz)VY0cbhGh><@6f|zqZkn`B2tUk$ns+@7!NCU=+TH;@ zPZqm44SRY6t;l4#;bYyIKNY*nIq(|Loh9W^{CN9<>eXZxG65=fotyh2FC!Xs6E^}& zJjo%c^6{?ml1vNVUq$_$YZI|J``^4$=o7G+_Wc&rssydhr})6UBM4f2Ga?Hb-vdq~ z9C33^i^CJWMY7|4{*opxj(j!*MQ*^S+A}CQ<`+Oy>h~K%cNA?E!;mc;PUcn5O91{j zMD9tU%@{A(daIoD(A!q{toGX!+_gR4jDdGG@9;r6Kg*J{8nVf<_d{RQ7<=9LV45y1 z)u~Qq1lcgO#$p?(jQPVD$5pg4i#(kcHS8{h7IBD3hLnEk%kKYLvWcqnr>#rb%MBrE z7c(p|OP3Ru7p`(Rk6cXnLXp!XLBoOoPzB%~4)sCCc#v6#0fOke`lJ_>Jn-)-y9Un5G*Tm)4&Dtx(6v7wdzK+b3JtcB(T3=^LVL%q2@x`s#xM}l&Q)Sg`?4&qD z&e&IF`$w_Or|@($09SLMV_-+OAM1o{9M>+g9CGs5=n|cc9wD8712^p4u1Wq%WGWO? zrsHlBwsyA0ERCJJhp5kook>b$9Nm2HCmOcV>PR~+BAxw_q80W{Bir-Vw#k~ul zenUm9@nCt*Bk-i0A`6FQLNhP9^umC#1+#+U*6c|O&6@lr&`@>?aaN0OZOt;Ru=OK> zL^`$${Vj9ZPQG45Y8M65Y;WW@;y9F1t8;|;Z=*YCa_U>Jt2%a844zMW-8h_x#Nw2x zZqKQyt4}B02$P(y-BN4Lo?xy&uMv##m>$xw$7HgME&hPx?m-2t(vWwcz@$AgGRaE) zn_HS3UoTnN#n#Tw@0;BVa%HEc=2FsUyjW$0H;!2r<7>CS<0VZ6ZN@@JXK3FM{w>sB zNqBJ0{!;TK9z?@U5?gU(pO8+udvKBdJodsshuS5i3FYA43-zkBGMRgonqym9N#IiqYdrj2+~-`M zfietfUxLagyW@77PG3UtiO5%?tHcriHyKX!pM?0Y&oG1<*71Zd;oc#`8NvHk8vPK& z;VvQwgzL_OU?Z<~$^Pz!MEO2 zsMZ31ltS^sF|#m6VD_4|6&L9f+sT=9r~3pAxBD9-fDE8;++h+vw5{Uu;zn5`n~LY1 zU-;7xi8`JWcCEvVOwfv{%A12T+{i9xE~Mv-VMCds|JpDAF9i}5lr;n)B@*oXZ`ENK zyF1B`eWIj+lMlx7lNi-}n=DFpnkY>Glq)U+TBKe^q9xMmcfa4|FMpV_x*X+X+U$L< z%+vr1w8Z?liVVCwI2%$gy69k(M5FywF9cJ(_WlSd>Dfsm{B%WUi>sio1-3XCyRTt; ziw9!XG{ppoBPPi1FC(hI{uATBk4=x8U@_&G(4s7-eYx~YB?I1n^3@}iu`E#`;|qWu zFE89$-+jC1NOa#omY)qf=jVqfHhfcTeV+&f~||Qwwi|(=D*D%z8LnU440bz+Xtk7iS)-lnH%5DaQu&(bRH02jMt!Gl(RZ0=0zj8ME1wW-Vq-gIHm7XSAf{TGwedWxrNimSO>6ien${gB( z%>n%t1d)o(YNmBRa!YCVL3*tHvz&u|aJw^vIE{^$&to_SgKZ?*_H^USr7-NuVn^ zz>w~*zRlgb86eZ!SH!jpFIszXqeb^;?OS{LDQx3Zy3>=t)Xd~f50Nq%vjjcJSv2I^ zrwcYBiX=HvJ7;ftVBofCCPZ!Oyt@X<>r~oL|gRZGjrL%uC zg8j|Yq%nxBmXA4A_)~;V(2(w`(TqCMQ1;tJ3ApctSmMQF21Pg_|1jq5TV2bwvR2zSOoDwkes`fCGXb7V?wT&#}bX<`)_ zY%nA##gUYx%He(s4S6MM@6>c(k6Yy z9HB3Hw@7;ypMq2&z#D~OM0c1++%$k;$BIyQqqW`DgOppfu%20aDy%Sij__l?lDwObtA~yayiKnSvIX5w?9?D`Tpo;RIl5a~W z-6bui+TTn8=!xljdy!})v1vthT4vzKw|fT69}f(1gR1Ru=qdYL`&nm*%3O|I#M+*f zB`5WZEb=dS94$azN~l;q!2pJYZ8dVN>P#QlPvOJuwpMc8y^3`N`Umq>2!f5 z`-_?6&O%0{l9Kcn|CuNeRi%oY8RrX48-l{!xYCxMbbQoAynZ8d4!m1tU|F*nxt2`s;&v$;qal#vH6_9`+mCC3Tu3hFD7_-CJ`|Hg)(PcdFtN;EpmS z&M#Zq#Qh{jIQ!EENB{aU+&RP=#jksN^5*Ab-u}b@XjFR=(=6s;j8K5 z@FXA(bmRD;CE(Hn{{`;{^na&(9`|#tSL5VT@DZoTBGX%29+Wm3$1} zxHaR+WNRqFz%{n*pQ|C+kwl+)t*fmq4Vq3l7p8~LC5;dAW-A*r6Ag!@h*SuF@C?Nx z`Dpn+#z1UHy4MZ%Pi8Q zW`SVFxDbzZ&6!6$dwHH)SYXcPO(>fI;ROp%qz^$HSDg3*qKz#Go{>reJL^5P4jveL(jVoY*=3F|$ zASO%-p{JajJi_Ahp;4!AOr?_j53R?Y_0I!Zt&LFfSMgIaV8 z5-q@q$H3H`109$L%+m69ze=K35y;?hgY9Tw<=G~>l6>ffD6VYQxDUwRL(lCX%M(~< zrX~aH3RCt{nh+B5%+kn8(x`-E-yjyL; zl$A(cU3WNkK_ssdTs9S7k;g>S1xcS64v=n9P}HEEnYObc3Z)IAF~ubGK)Z0i;Wg6s z9BWq6wIsb1j9 zia={Vux7FF`v8kL@IbP2E$5~f2GfRy%&rnh!ImiBAAtN<(yu*_@mB$cx|XDoF*+$2 zDLaIC@saP?y{fVKm|RsOT& z4#v}B-WX;=!MK0KG%WMf4C26ihW~@^rA~r^UH6Lrqe8wa%3!z8(@_>y=jgV3m#@sU z^-jCvL*(5+$IT!12)8#dm}`nkwme81oOhqVL%j3`i&-ge+r_*1^_cI4i!Xc6dK8Xk zMz6IjGwcS)9tdeqYoHt~o7e)OIY)l-t+DU_-b$fw0);_14_-V`@nY;xFN^GtMBT@z zN)b<*vapO~&TL=tPZ19Oo>8syz)Qaqoyc=a-_7Z&`k!7ogQQ@9==rcS8uwO?doE+cbu!x zEK8T&w1nDXtQyKa=<=mscv9~@IMV07M5@LtI+HLHedyehR!v^gXS)$-jam25i@}@o z-<5@XmuN#@#T$n*mcL3<{Py+IeO*d*B z7-a|f(ru^{`Ng!zhRb>36b$<>b$xI)8LrFxvQ9E8cRWHBE+d33c?Wbo*p+6L-NtTY z(|R!+aIwK+?%V36q%G;q5PQ>QFJ?adn~!DpAJG*-;XJHg6=OA0Aprz3b$Vs~Ym3u3 zVmRzxFhFbJ#P@X?&5gL_5QOebr?Gj~7CGzTEZaQ)%G>h#MUvdt9(lf9N2t}F%Ccv+ zKj{bj;D=OsYL_-5X_sWf&wI_6YEj9~u)>Q>@QM`^M$6pK&S9WiJUW1X*WhO7-vDX; zEWQ`@yV0HW5#sqbDLEFtw(uSD`l%g@epccboemnR*~lne$s&iPR{6#7Nh;}G%fM{Y zHVsj9T8a$6gILA_&FM074}O9KG<~@|R6=R8*RWmz2mm|6zuG5_G56>}BIm0xPQL(% z-M6v8=7qO9XjzbEs-M2q$z$N=_T_WcTOAX{&t;G@h_5AD!74J&mQtAYm%a%5!h52A zfMamUs#iGbnH=qhpsh_%~SK;7c(asd97JN)zxHz+DyHCH1H6ETGh`0vah!>v)M7|NJr8J=W;Kt#@b*p(5o1s=0H6TLp6 zQo_tKGW{2?jH84z;mn7dT7+^N5wTi${FPUoX_?;5Ar~#q!j=DYzobm;pG81wa5ni) z@37vT>m|`RmpxHU^o5+7*z>EhnA+{L@v+??+FoT#j`E?5yiZ?!S#{KVM0Kik7v{Oq zG7U0EV(jIgEV&I*D5QkXS^Dh=-oUNO^>SPZB)%g)UCv+mN4XqVh7&>LA&Q<~UZ2Wq zxW4@x0+Ny&;f2^dJlINuj+MUc0U+>+oEz(;{OB&Vy3nH;R8l952ZK`l9T0W78E70yz)gJ0E}m>^>r?!AZVwvNT>-pd$<)msGE3g z=fs{yMSw9?kgT5W{x>cr-4|7qq=m&O^X(&xmN>k#M5&id-t0M-IcfNHGeo?6i+^p5 zCHZ3w8YSC!<%~IMI53chQr5~%6Yd@N_fHgtxT>M#_;9A?(3QGw+PC4#0e>R)`QZ?W zUWa4Zm4cXZqYq~{rWKq6C&EixQGp!tZFEtuXEYfPPrd$Ghz?2jP}Uk3R`Pb4#G|x@ zx|gXh1ZnH09qsc6sy%vGz?{FZL7`7G1wX!uBUV2MD}(XjzmCKa;=FdsXaq7{DU)Nu zQA+NWY6F4QW$U+aW4Py zz@mAlq@)k;53FH8+!Lgf-^G*FQ#ouz0fYzQofFi#89y;T+{Mgw6#0UGU}&6+e=#@E z>iFgp)zu|(pMwzTS#2$Py2V-}v-De;13Qae{gyGTaB8P9H{Fhblhrk!xU=JC;C0^_ zN&{wyq5^$UHayw}QHh^svmKej^|%%?S2X9mM>=mkKEI49Gv|FYXARtTB0x5FZ`1_)GME3AR1_uL$O(w^3fSwSmtOLY#%!_@%gl@{*7tGxt_SXvz5LJmlFFhpq^fh z6duH2r89ME=DN;?xqzJsJUcOYAXd}(3Apl;oHg|7NE(HP=1l@o@u`M9>YCyY| z8gTyv^ip6;6?;5?Sj@R|aBv!0L$ke-4#2A%7WQljEMdp8|BDBYtYNZ$0&WAS<^>Xy z0|Pwjx&+2ff&cxc0|E?zeFC~^Ujpp{`zKuMx2GbSQvUhE5A-rd{*R8dQx2{C60<{e zQQoPdJrDHNUvTt&gA;Z255a%`4~#CN`yc)Pa{WILh(d`)k3F=T56tf=_o-k}{{&tm zdcS`OboI#pPbpPCx|N7S=OiUJdH-nQtsn#bYXiHN21vnjHj1Y-XRC{YLfQgW)prgv zE=x++GlKlpvm#0$;U88%dhpE3!(3+@XP>5ZIJMj*T@6dM!M}xn+tL`J=B-;UhTLBo zFmUg3*_51ws4|)v(p20SJQPH|ldc&k`ci47pJA<&lFQIwS2P%Bdy5=xg z7Q!=J2PKTK;Tj@`;f|#kljnp+biZ$jN+NtOmU@G~ZWUB83ss41n+U?{_a6X*8D8@g zM|%XwovtU@`QfcZG}SS* zThPn6i)=RF#aO#Uu;+htVMH}j+%@6>5VQtmAp?$3DmD4Of*m3#c- zrGqyckJf8k!r*2sC@PVl7ry;yG|eYuR8hN#sb3F3vF$Xsqj{e)9)MgE<`6S!O;Y0` zJ5_~Y@1Vfjcsh%A19h!@m|%CojMoRl6AKd)H|oSE#Zz)eba&=ruP>9xYl~F-r9ILh zuM>XLRZ@oTc^OlCsTs%4Dt5^yJCecU`6$IfWVJw_M3An)97}*~lPiwN zs9~$8ysxMlPW7#;yw9%bRf1U09dSJo!fKvHAiHnob|Y#s2&RVk2b-|bcx_H?GOUo9 z2Bpe|f@2O8-j2)|1|&xv}^T}sCqv8pt~9;cJydjqgZs&)grIob%>ieg4H<|Ri- z?Og()VQly8anQ`g)X%`%E4POqV9&OH zDG<2w0UVbqUuRJH;o+jTpIewZ5i)U*hGcTuOp_49X#2&#R43zCVRo#4C~EhQHu5-F zTez{rfhwtTM1)E6EvceV(N3>Rc{8b>#Pida*WA)q5R@D*85bSQKCHev&h-USrSav4 zy}YA#NG6t=kOGpw|y6SAvat!^rLaD@_IHED?LjQ+(7>}SZ z3!ZQuijf|5hq~+@e88T+FfT$Jr2zvrn|;g@RIb1tUHCk7PYKr{{ax5urVEx0Tnigy z>}v@CD`(rTMMc|_bLnYh!)K{?8|S3VnwnF(M#JKi!a${_09}z=8AHyCXNiY_;w6_G zF~?C_)Z}4gC5B=tlsY9CyB;Q&%fYS_Ktn}4&aQ__t|AN)V@#6)m|57_$i{EC=A{t$ zrO(064bp)&bA?lBIesOnd9sgpTub6qmRs*RBBE$uw9BMH2KL(l2XM*YxH^GlaRBCH zN3+i;xpZ{niPFDAuwhL*^wg8rO$?~nGQKGh&hPP<(JiS9q9DJ=-k!z(izo%=LHB_r^?x~SYr@?o&~ydvZG zdH!6?h@%F1WyTZLzWFy182#mZ^bah&#in4FC09LBWzV;W0n@D$YL3Do9( z@_|-qrb3jo9Bo*KXqr|GpD4}kU)htom4YQ~@gPfouxY%s1e_;);g0qj<)D;G6zzm& zSv|D?_Lyi6Kj8`2(w57c>ZDh{z%|oR!5!Q94 zKgJEifR?dw#%;_%plA1U;pK<47{>1#iL`e)y?t}sz~_D$hiL-n2E=7|%M=gFbhpyF z{I%GIjQ9(M03Cq}xvKz<{Dq%Y+$)byuTO)%3E=bbCXm1TYLS>KU3f;_UB#YWM2vYM z!d;0iBPwGtnc<~|UpT_|?QJZak&S@qnVh4{H0&6p55z=IsTy5-27@4wzPU=u5Z*^& z)FXrL31uBL``mtFp!csR7iNC?!#-o&0dt#jy+N~@Hh1CWPmHSxhbgH|I}0fS8Wu-F zq3tz^vaA6I<}gi0rS{i2dWe+QX6EcG2^_4BeJtgjx(;oO1dcabLA~EfZL& z8Wx+goqa}e!ru;;|cR9K+ucCUC8of@2c#*GDo$8sD@|a81kc-Tq z27lymnfe!;D~`0F2f_ly0n}IO6|CEM6R4Vjg>kzDn}2zaPsv#{>FQgZQ~!>O8(4^y z$pp9!6gI;HgMPsf?8UwXm7@-__;?1(FB3;bM-~xgw-g7swUvvrKIfefa0qY{!2qF+{t820K4o#p7A!8J zC4GTxA3S2)b{$Q$Q>Z}B%UF*B`r!2~f8~5GWeBK@J+*Dywr#towvAKUKDBMzHs1Yq|C^n?-&{ROCX>lbCV3_y zj)4LB-vS1__OtT9=V(0h?fJlrblzdF+-FqI9(9pOOo=roSeHmbzkD~7t;eTev3Gy` zot4BT_4CQ2rs+dYtD}BZ@=VIoH7{5gNT-TvovCt5m|Oqy_?X-jQ`IEk7u_dc-n4p~ zTy&Z%?@-spLlUq-c;(i)-P0qV|5dqo{q(XA4Db%^3zM|`DwjV6rCL9CjeG}UKS->6 z6V6t0m>qGwYSOH&M5hVVYu?dN^r)8${Rj;~{z)%cJ%5rB$f6qms@U%B>atNHD8n31 zb|;BIyJmR1`?z}eq<8jpl9t!k&B-&!?`v--+wEg9J9@Y}K8{(`puTGls*#_q zt7V$)^MX{U53!HQX=Fk68Z1_9ZpC2Rv=-kKm9;`iz%3?~DvPB6f+et$M!Xa;M->+c zSx!C0g9O?4+wPr{J!#2yTmFs_UQV`_yz%^%`aK4!bF@h#&Uq5!Nd!v;P@fLIWZzKl zu{~6UsJ!p|V(T<<3VGu-*9Q~4Q~c=?N{aM!CB1_i9lJFBC;a<_s9dPi16sc8h-2P3d#MNqi0QDptyWHYaFq55e@0Jr z^P@;u{|b0%2N660Y( z-boes z$H7vf@vZ5R^9e0Wm}lv;WxJ46zyzr*=F}$)V`P<3T{$x`!8uUAV$H>uY~wz1QI0#` z$bXK~_@|q|c_@7$k&5#}@JuIxAV0GqfJ!b^T1{8X!t|8#78DCE_6?=u^~)K7d#l<} zTE7LK*c+ud#^b(Fu?+j-;IBz1^{)rxEX@67v}U8Y;>(=|ha#RiJWH!WEXoe|FO zqbA1^^>B*`Q^9)F$-2`K2O%})=>j*5H72N7ugar9V%sC9GrSk35F;K5+$NS_9j`K^ z(Pb!N)vLt-`LS17_6<1=p~NJn#b!l8_ohk-w%iGHr5S(&_2PQE~p=c3ZgAbFwf z$QB1hgN!of-zPe46|pE6Iu|1fpIJCq0Q-eWTd zm=7dD@cKqX;@_jZN=aH&*J9^Jz{ZR&4T%)(=OjW^autB^0Pr@|1VGhmXWj-eXBPrV zwJdl;1jQUb0PK!}7M1J+d{^{RqOTZITYDNxx^TWjq|p%V{um1+bGAAFan?MVlfq-9 zEj<{n;BrY&Xkq?5bowW{L#MWfW=BZOy$Md6}(IgNJSo zTP{3wEM}&t;shT=%`j9%N8;__JH5!kQ8LvvYC%ZGg-kJwJzCT>O%z~J!voE)?ny#& zIKqsv*ar}Pq;^TsA-={~8j3VBBi8*!N5+4_1E>f4xRu&t#}Ua2()8jh&WSsYYm(O3 zoNG|s@4BAwLFK%0oFe{}|HgcnBazUd}1s~gDErT-w5k_*Q6!1 zkBoyAgpa;?|FH}I!@3bQRNur_5~gvoYH7)(-jDUQE32V(tQk8bLwP#{u+n5I3yH^u zQJ52n$n$HLjWmeTtN|G{Ga#6&v4>rp+nJ1QU=P^TCP|EuK|a9 zi^c2(Pq1i}<`SVs+c=XEywFjWu0OnnM;(j0=K;(GE3KN~{|30O4hhPeu6%oOAh+Pt z>XlAG^?qL^bHyAh(ceX(0d#w&F&`0`#ErN(j0c?Jy2TjhYMTU^XqmTn2QHS@eB!6k zNthEYjYUDiR3k4;8BZ^&cVc@@5Py}nA(ZkWqFl_+dm=dNi$cH$hkr2TPZx70!kfGW zqNSv&M%s$cA}ErqO2$i{K7uSw(;%dwP4;(TSn3PD%T~0`9Er=UN5$w3afqC-kXlY9 za*whgQ)?F+>E`<}?yrjG&XK@na-;TG{yr#7ytr?=g7y|x9#Si}L!%{SLd?NCKuQzN zcVlqo4}a$9Opx>h^VtAM4^pE+a2MX;W#%Yv*}U}sYIGxjofi!qVC%L7eMtVA77>;b zy!{tU&Ac2acSI_P4&I##`%BjeGh~QW2#hi1uifYU)dAqS`N?}qQCY4`Hrn_+w?d4n zCYDZmK03UV#qG$dQaTSwu&CbKyH2qX@^?O!`6KR?bC7otla^4Q7-OaluJ!&LYiDx~ z!(>>u39l|13V!A+c2oG41j+oJDPATzSIzH9^6t=N_G-FNm<0~JG9dZ|U+@c=GOsImo6h2LnZq6% ziA+w%!NqR~wNJ^-;I1K9a)^S{Oy$KPwshh5WBEZjs|=x1ImS?>Z7pq;z!rhz0c7N4 z?2~*h_)$0ogoE5?j5DYTRFrjd)HlxtTLZ9qKN^|FT*jH|Irb#o&0h4Amh^Cp(su4K-s*1O+|wybV)E zy>djw(0GRYAaWODg??Y4($<(srnS~=gEQ@R0f@{YLTLer)1+~S=6K4eKRQ(hn+=~rM8Igl zZ9C7xxmZXob2BU@8^sIctBMZvGcB{j8$bN_uxw0CC1Ejc%o6a)+1v|{OcS5QQc+gc zvWASD>NwCdaXSEw#q1R;jHXc=GP=gHIvq@KWp2xf_wW;;>=V3bisUFEirg#8RDB(%wcB=OKm~wnilN>i#eBhwen(W z>XXsGYEp@4Z}Qa-U*cuiC@q+>CL>d9W!LBD>*B8;GU+{X7oU*RNtz^S+=Oe0Wgbp( z6t;$pCQau2@fZ>ka0{s=LFLW_sD)6iR7*70j{EdzVMTJ2+sxB?Pt$HFQkLvF%^i9( zH)J>L`c<-3Z4lIcEJCi0_yiX!}lzVYz6g54@0>etUBYyn643H!Rza3kwYN zmIyPG9xL{Lh&FD@*49%$9s|qQs03$ZaQBjC-~iS;1;$#x1FIq@Vp@XP zuYzeeu(6i#`r*Vws-rJjp&rewoh}Vmi%8e`d&y2UHjlCos~+k9Y!T1a0e=pb+28Nq z9vy$qnuaSu0CPnv<2M%hQhJ zi{LPeIA@KESvvUp{QXx*u$dUMPO*3O^9+1FUcT3d-9mf=+`S%N4`VJ59cJ?L4R-gi zK3={)4z8p-kqN5!^@$Ah^YgpC{e7kMdpmvK4=!Z$S|3`O1GB?2qP#HR;@XfrS;<=l zpWF){y$GgFkPf)yJ!P>h>4(29xN1$9Qdh)Du~?VX*t$-@xVj>F?Uzi)mzMeHwN18T zR=R)DzwQXd@N&?E#pk(jAAsuTUNc7_@JVXI{3$q z8)}Po2Mf=q?vSy0BR-L00}!xz^^t>vGh9S|gMs9Rum^jAad9Y&knIN-+Pn5-@sqsC z@6(d=9bvK-L<&G*3W<%&+OT6cle#~!?ZrofkNO|Er!8!Emxk* z8M+kfgPmMx?qm+p+Rs?Gv(M0VMox$Av%tTHMp&~D_FiZsSkvGBV^?LqCP~6~M-%%Y zMAqHh=OIh7LkUUHI@SPf0cI%VqL1^wMzn;a^u-A|&nH*A zJ~^1WYNrkNT&6@(Q($>6tJhjQovQfDd`tl^lq{6(DI@2fZk7<{tIk2MNfU~$Otp|~ z5&K+yvLyx$J;nrsogoj&`$QEM<6VOC2PSsqCD965K>Up$deYw#A)JH7^R*ddKJCH& z4n&q;ZJk&` zy5>>w5dqHN`Fc5n9ok1w5x4OMy}VtVd;xwCGLb96@4T9HuaK*5$UCGo9w&^jTbIAT z3JSMq7FHk_)FpTg?|DJ&8Cp8RmybqsAbUvwPr;IsWdgxE(rGY_-zVjERV9ID!ny7; zJ(&qrbTzZ{B|0VUcwq{$eSspyosV@F5G`)1D#L8r5d4vEP)MbOoTIHS9PrI#X-2}k z*)fW$7nC3j59H)*D2_suI`ll1CkJclH~6HA#;MlW(U~rOIG0t+s7;LYo+5uqQSbI& zcuy?bp@_N>EyO-fRJi&;GGgKEZw@g}o_eZSW;My7|MbvqX--ZXGNJDR(kG75BB$a-SI=M3kRNbr z2e1j-;L2rQJ&Bh^?c7}I%BSMHHmzRlQD;k@nKec{aBVu*q|o|W-SvkJSSeBk1(dwi zKstzSVw%vRJW)wBm{0Mc%{ev}po>$@GsFy4TjV#UX?p1$oi1;Ds64-R0H;%d0$E#o zR2|O__Z2_D+@9@k{S{ze*Xpg>4>0~d;!=KwsdkpJkB^_r$H!kfFEPIjhO3MB{01>@ zEP3Wr-h=lA>HH@-+_!fZzk3AxGvp`Gd&xzAYcHl}hqTlu;+y(UjX}P>-MEl`H*Xg& zl>GC{$H{Rf-pSG1`y=^65RyFOY+T)JoaE}y8DS#PS7#@GFTX&doyY#b`TAqi?SHFJ^zT>{Cc97!kBWeiJ)Y^oBYeF6eHEQM z=5xdsybItnHKGeC9Yikk=R0bL@xtE-qD}I3&@t%3!_x^76J9VgMYmTQk&q4n&Nag8 zxNc0tUbx+`dA&E|nG%)LXJ`98UD*70uv{O)I*s~`uqj=~CKfS0wq@NlsiUBqKR)CR z@wFfyJ}mD+Q1I>(kdUNF@2C5i1f)B#h`}4;o;_hm6wR8iA64~UXslVxO?d~(6SNjhUX9&LuUDhJ z$Yg>wy?C|>sS#3a5PA?|;R!6nOj8oF0#$Ao&QSc>(DTaMKZi(ITyH$ZGycFm$7VSH z=X+XrXyw;7j4f()k-vS)iUsxjBe%}Xu}GbH0ei%?f%{|&-+oQ9IPF@!st`^AG$}bW zW0G#Aa~2L^jEET@vaOOGG_WgX!DvJlVtl&jm6O&I`K3=F=6jm zf2r((QY(9annEBu*EfhGfcChHad?4pM?E8ShJuHNst}Y3gcz)cB zJt85!PHMcLT+_;(39KuV=sCo7X1i6O1A=O06g}E+7YE)P>sbu(_peWOJVgvgx_rnx z`?~tTGI$Sl5XG~W3pw&dBYwk1BLF7>WiHksgdcExe%OM7VWS>C77~Mv#aAm?P?W?^ zHXjUl*~e0mFNLpD)DF{JD~{P#_7+)I;bm*)#TBz{oJOyRDBWw<>-G?cXxoB+yFzi! z!t!Xm#CKR`i*LO{dNz`;T$|?#4VMNbL=e>jiU^=RHgry+NB!fHaIWJdK68;uW1nd* z7k50nIry)FUHiLxIqsl#ggoZfd9DzVpm%Du>j_RUhs%|E zX=ffK6^g`-B+%y1JvcvmL#&>1SIZ8j8|=#J(WbuvY0nmsJ3m5gF7>;&$S>m1wsisZ z0uRV9on4>c4&4$GKcJW1(8cq6hK_rLp0*zGL|60jyXD0!&z%tw%As@z)?A_BTDg)O zY$1=pkGiYYM@kMWQ|-M+;w`=|+N3R`WkWP3t!7R{RMshzknbOTi`RnHd!A47TSwP5 z!q>BXdk4`j0XY;`7-(hAtUzJ)DFpBmQy4WI_l;af*^|L_9X)wTVd^CN(x`T;Ed0;RMIDfIY^ zv<3bd-tl*s!(zpwmLp&1a6oPiif&aK!(-#Kbkoi?zj8amA8kZ*pk!@om^Jh^9l2K+ zb10jSEtLB&HbhIEpk)&c1Wz)VY0cbhGh><@6f|zqZkn`B2tUk$ns+@7!NCU=+TH;@ zPZqm44SRY6t;l4#;bYyIKNY*nIq(|Loh9W^{CN9<>eXZxG65=fotyh2FC!Xs6E^}& zJjo%c^6{?ml1vNVUq$_$YZI|J``^4$=o7G+_Wc&rssydhr})6UBM4f2Ga?Hb-vdq~ z9C33^i^CJWMY7|4{*opxj(j!*MQ*^S+A}CQ<`+Oy>h~K%cNA?E!;mc;PUcn5O91{j zMD9tU%@{A(daIoD(A!q{toGX!+_gR4jDdGG@9;r6Kg*J{8nVf<_d{RQ7<=9LV45y1 z)u~Qq1lcgO#$p?(jQPVD$5pg4i#(kcHS8{h7IBD3hLnEk%kKYLvWcqnr>#rb%MBrE z7c(p|OP3Ru7p`(Rk6cXnLXp!XLBoOoPzB%~4)sCCc#v6#0fOke`lJ_>Jn-)-y9Un5G*Tm)4&Dtx(6v7wdzK+b3JtcB(T3=^LVL%q2@x`s#xM}l&Q)Sg`?4&qD z&e&IF`$w_Or|@($09SLMV_-+OAM1o{9M>+g9CGs5=n|cc9wD8712^p4u1Wq%WGWO? zrsHlBwsyA0ERCJJhp5kook>b$9Nm2HCmOcV>PR~+BAxw_q80W{Bir-Vw#k~ul zenUm9@nCt*Bk-i0A`6FQLNhP9^umC#1+#+U*6c|O&6@lr&`@>?aaN0OZOt;Ru=OK> zL^`$${Vj9ZPQG45Y8M65Y;WW@;y9F1t8;|;Z=*YCa_U>Jt2%a844zMW-8h_x#Nw2x zZqKQyt4}B02$P(y-BN4Lo?xy&uMv##m>$xw$7HgME&hPx?m-2t(vWwcz@$AgGRaE) zn_HS3UoTnN#n#Tw@0;BVa%HEc=2FsUyjW$0H;!2r<7>CS<0VZ6ZN@@JXK3FM{w>sB zNqBJ0{!;TK9z?@U5?gU(pO8+udvKBdJodsshuS5i3FYA43-zkBGMRgonqym9N#IiqYdrj2+~-`M zfietfUxLagyW@77PG3UtiO5%?tHcriHyKX!pM?0Y&oG1<*71Zd;oc#`8NvHk8vPK& z;VvQwgzL_OU?Z<~$^Pz!MEO2 zsMZ31ltS^sF|#m6VD_4|6&L9f+sT=9r~3pAxBD9-fDE8;++h+vw5{Uu;zn5`n~LY1 zU-;7xi8`JWcCEvVOwfv{%A12T+{i9xE~Mv-VMCds|JpDAF9i}5lr;n)B@*oXZ`ENK zyF1B`eWIj+lMlx7lNi-}n=DFpnkY>Glq)U+TBKe^q9xMmcfa4|FMpV_x*X+X+U$L< z%+vr1w8Z?liVVCwI2%$gy69k(M5FywF9cJ(_WlSd>Dfsm{B%WUi>sio1-3XCyRTt; ziw9!XG{ppoBPPi1FC(hI{uATBk4=x8U@_&G(4s7-eYx~YB?I1n^3@}iu`E#`;|qWu zFE89$-+jC1NOa#omY)qf=jVqfHhfcTeV+&f~||Qwwi|(=D*D%z8LnU440bz+Xtk7iS)-lnH%5DaQu&(bRH02jMt!Gl(RZ0=0zj8ME1wW-Vq-gIHm7XSAf{TGwedWxrNimSO>6ien${gB( z%>n%t1d)o(YNmBRa!YCVL3*tHvz&u|aJw^vIE{^$&to_SgKZ?*_H^USr7-NuVn^ zz>w~*zRlgb86eZ!SH!jpFIszXqeb^;?OS{LDQx3Zy3>=t)Xd~f50Nq%vjjcJSv2I^ zrwcYBiX=HvJ7;ftVBofCCPZ!Oyt@X<>r~oL|gRZGjrL%uC zg8j|Yq%nxBmXA4A_)~;V(2(w`(TqCMQ1;tJ3ApctSmMQF21Pg_|1jq5TV2bwvR2zSOoDwkes`fCGXb7V?wT&#}bX<`)_ zY%nA##gUYx%He(s4S6MM@6>c(k6Yy z9HB3Hw@7;ypMq2&z#D~OM0c1++%$k;$BIyQqqW`DgOppfu%20aDy%Sij__l?lDwObtA~yayiKnSvIX5w?9?D`Tpo;RIl5a~W z-6bui+TTn8=!xljdy!})v1vthT4vzKw|fT69}f(1gR1Ru=qdYL`&nm*%3O|I#M+*f zB`5WZEb=dS94$azN~l;q!2pJYZ8dVN>P#QlPvOJuwpMc8y^3`N`Umq>2!f5 z`-_?6&O%0{l9Kcn|CuNeRi%oY8RrX48-l{!xYCxMbbQoAynZ8d4!m1tU|F*nxt2`s;&v$;qal#vH6_9`+mCC3Tu3hFD7_-CJ`|Hg)(PcdFtN;EpmS z&M#Zq#Qh{jIQ!EENB{aU+&RP=#jksN^5*Ab-u}b@XjFR=(=6s;j8K5 z@FXA(bmRD;CE(Hn{{`;{^na&(9`|#tSL5VT@DZoTBGX%29+Wm3$1} zxHaR+WNRqFz%{n*pQ|C+kwl+)t*fmq4Vq3l7p8~LC5;dAW-A*r6Ag!@h*SuF@C?Nx z`Dpn+#z1UHy4MZ%Pi8Q zW`SVFxDbzZ&6!6$dwHH)SYXcPO(>fI;ROp%qz^$HSDg3*qKz#Go{>reJL^5P4jveL(jVoY*=3F|$ zASO%-p{JajJi_Ahp;4!AOr?_j53R?Y_0I!Zt&LFfSMgIaV8 z5-q@q$H3H`109$L%+m69ze=K35y;?hgY9Tw<=G~>l6>ffD6VYQxDUwRL(lCX%M(~< zrX~aH3RCt{nh+B5%+kn8(x`-E-yjyL; zl$A(cU3WNkK_ssdTs9S7k;g>S1xcS64v=n9P}HEEnYObc3Z)IAF~ubGK)Z0i;Wg6s z9BWq6wIsb1j9 zia={Vux7FF`v8kL@IbP2E$5~f2GfRy%&rnh!ImiBAAtN<(yu*_@mB$cx|XDoF*+$2 zDLaIC@saP?y{fVKm|RsOT& z4#v}B-WX;=!MK0KG%WMf4C26ihW~@^rA~r^UH6Lrqe8wa%3!z8(@_>y=jgV3m#@sU z^-jCvL*(5+$IT!12)8#dm}`nkwme81oOhqVL%j3`i&-ge+r_*1^_cI4i!Xc6dK8Xk zMz6IjGwcS)9tdeqYoHt~o7e)OIY)l-t+DU_-b$fw0);_14_-V`@nY;xFN^GtMBT@z zN)b<*vapO~&TL=tPZ19Oo>8syz)Qaqoyc=a-_7Z&`k!7ogQQ@9==rcS8uwO?doE+cbu!x zEK8T&w1nDXtQyKa=<=mscv9~@IMV07M5@LtI+HLHedyehR!v^gXS)$-jam25i@}@o z-<5@XmuN#@#T$n*mcL3<{Py+IeO*d*B z7-a|f(ru^{`Ng!zhRb>36b$<>b$xI)8LrFxvQ9E8cRWHBE+d33c?Wbo*p+6L-NtTY z(|R!+aIwK+?%V36q%G;q5PQ>QFJ?adn~!DpAJG*-;XJHg6=OA0Aprz3b$Vs~Ym3u3 zVmRzxFhFbJ#P@X?&5gL_5QOebr?Gj~7CGzTEZaQ)%G>h#MUvdt9(lf9N2t}F%Ccv+ zKj{bj;D=OsYL_-5X_sWf&wI_6YEj9~u)>Q>@QM`^M$6pK&S9WiJUW1X*WhO7-vDX; zEWQ`@yV0HW5#sqbDLEFtw(uSD`l%g@epccboemnR*~lne$s&iPR{6#7Nh;}G%fM{Y zHVsj9T8a$6gILA_&FM074}O9KG<~@|R6=R8*RWmz2mm|6zuG5_G56>}BIm0xPQL(% z-M6v8=7qO9XjzbEs-M2q$z$N=_T_WcTOAX{&t;G@h_5AD!74J&mQtAYm%a%5!h52A zfMamUs#iGbnH=qhpsh_%~SK;7c(asd97JN)zxHz+DyHCH1H6ETGh`0vah!>v)M7|NJr8J=W;Kt#@b*p(5o1s=0H6TLp6 zQo_tKGW{2?jH84z;mn7dT7+^N5wTi${FPUoX_?;5Ar~#q!j=DYzobm;pG81wa5ni) z@37vT>m|`RmpxHU^o5+7*z>EhnA+{L@v+??+FoT#j`E?5yiZ?!S#{KVM0Kik7v{Oq zG7U0EV(jIgEV&I*D5QkXS^Dh=-oUNO^>SPZB)%g)UCv+mN4XqVh7&>LA&Q<~UZ2Wq zxW4@x0+Ny&;f2^dJlINuj+MUc0U+>+oEz(;{OB&Vy3nH;R8l952ZK`l9T0W78E70yz)gJ0E}m>^>r?!AZVwvNT>-pd$<)msGE3g z=fs{yMSw9?kgT5W{x>cr-4|7qq=m&O^X(&xmN>k#M5&id-t0M-IcfNHGeo?6i+^p5 zCHZ3w8YSC!<%~IMI53chQr5~%6Yd@N_fHgtxT>M#_;9A?(3QGw+PC4#0e>R)`QZ?W zUWa4Zm4cXZqYq~{rWKq6C&EixQGp!tZFEtuXEYfPPrd$Ghz?2jP}Uk3R`Pb4#G|x@ zx|gXh1ZnH09qsc6sy%vGz?{FZL7`7G1wX!uBUV2MD}(XjzmCKa;=FdsXaq7{DU)Nu zQA+NWY6F4QW$U+aW4Py zz@mAlq@)k;53FH8+!Lgf-^G*FQ#ouz0fYzQofFi#89y;T+{Mgw6#0UGU}&6+e=#@E z>iFgp)zu|(pMwzTS#2$Py2V-}v-De;13Qae{gyGTaB8P9H{Fhblhrk!xU=JC;C0^_ zN&{wyq5^$UHayw}QHh^svmKej^|%%?S2X9mM>=mkKEI49Gv|FYXARtTB0x5FZ`1_)GME3AR1_uL$O(w^3fSwSmtOLY#%!_@%gl@{*7tGxt_SXvz5LJmlFFhpq^fh z6duH2r89ME=DN;?xqzJsJUcOYAXd}(3Apl;oHg|7NE(HP=1l@o@u`M9>YCyY| z8gTyv^ip6;6?;5?Sj@R|aBv!0L$ke-4#2A%7WQljEMdp8|BDBYtYNZ$0&WAS<^>Xy z0|Pwjx&+2ff&cxc0|E?zeFC~^Ujpp{`zKuMx2GbSQvUhE5A-rd{*R8dQx2{C60<{e zQQoPdJrDHNUvTt&gA;Z255a%`4~#CN`yc)Pa{WILh(d`)k3F=T56tf=_o-k}{{&tm zdcS`OboI#pPbpPCx|N7S=OiUJdH-nQtsn#bYXiHN21vnjHj1Y-XRC{YLfQgW)prgv zE=x++GlKlpvm#0$;U88%dhpE3!(3+@XP>5ZIJMj*T@6dM!M}xn+tL`J=B-;UhTLBo zFmUg3*_51ws4|)v(p20SJQPH|ldc&k`ci47pJA<&lFQIwS2P%Bdy5=xg z7Q!=J2PKTK;Tj@`;f|#kljnp+biZ$jN+NtOmU@G~ZWUB83ss41n+U?{_a6X*8D8@g zM|%XwovtU@`QfcZG}SS* zThPn6i)=RF#aO#Uu;+htVMH}j+%@6>5VQtmAp?$3DmD4Of*m3#c- zrGqyckJf8k!r*2sC@PVl7ry;yG|eYuR8hN#sb3F3vF$Xsqj{e)9)MgE<`6S!O;Y0` zJ5_~Y@1Vfjcsh%A19h!@m|%CojMoRl6AKd)H|oSE#Zz)eba&=ruP>9xYl~F-r9ILh zuM>XLRZ@oTc^OlCsTs%4Dt5^yJCecU`6$IfWVJw_M3An)97}*~lPiwN zs9~$8ysxMlPW7#;yw9%bRf1U09dSJo!fKvHAiHnob|Y#s2&RVk2b-|bcx_H?GOUo9 z2Bpe|f@2O8-j2)|1|&xv}^T}sCqv8pt~9;cJydjqgZs&)grIob%>ieg4H<|Ri- z?Og()VQly8anQ`g)X%`%E4POqV9&OH zDG<2w0UVbqUuRJH;o+jTpIewZ5i)U*hGcTuOp_49X#2&#R43zCVRo#4C~EhQHu5-F zTez{rfhwtTM1)E6EvceV(N3>Rc{8b>#Pida*WA)q5R@D*85bSQKCHev&h-USrSav4 zy}YA#NG6t=kOGpw|y6SAvat!^rLaD@_IHED?LjQ+(7>}SZ z3!ZQuijf|5hq~+@e88T+FfT$Jr2zvrn|;g@RIb1tUHCk7PYKr{{ax5urVEx0Tnigy z>}v@CD`(rTMMc|_bLnYh!)K{?8|S3VnwnF(M#JKi!a${_09}z=8AHyCXNiY_;w6_G zF~?C_)Z}4gC5B=tlsY9CyB;Q&%fYS_Ktn}4&aQ__t|AN)V@#6)m|57_$i{EC=A{t$ zrO(064bp)&bA?lBIesOnd9sgpTub6qmRs*RBBE$uw9BMH2KL(l2XM*YxH^GlaRBCH zN3+i;xpZ{niPFDAuwhL*^wg8rO$?~nGQKGh&hPP<(JiS9q9DJ=-k!z(izo%=LHB_r^?x~SYr@?o&~ydvZG zdH!6?h@%F1WyTZLzWFy182#mZ^bah&#in4FC09LBWzV;W0n@D$YL3Do9( z@_|-qrb3jo9Bo*KXqr|GpD4}kU)htom4YQ~@gPfouxY%s1e_;);g0qj<)D;G6zzm& zSv|D?_Lyi6Kj8`2(w57c>ZDh{z%|oR!5!Q94 zKgJEifR?dw#%;_%plA1U;pK<47{>1#iL`e)y?t}sz~_D$hiL-n2E=7|%M=gFbhpyF z{I%GIjQ9(M03Cq}xvKz<{Dq%Y+$)byuTO)%3E=bbCXm1TYLS>KU3f;_UB#YWM2vYM z!d;0iBPwGtnc<~|UpT_|?QJZak&S@qnVh4{H0&6p55z=IsTy5-27@4wzPU=u5Z*^& z)FXrL31uBL``mtFp!csR7iNC?!#-o&0dt#jy+N~@Hh1CWPmHSxhbgH|I}0fS8Wu-F zq3tz^vaA6I<}gi0rS{i2dWe+QX6EcG2^_4BeJtgjx(;oO1dcabLA~EfZL& z8Wx+goqa}e!ru;;|cR9K+ucCUC8of@2c#*GDo$8sD@|a81kc-Tq z27lymnfe!;D~`0F2f_ly0n}IO6|CEM6R4Vjg>kzDn}2zaPsv#{>FQgZQ~!>O8(4^y z$pp9!6gI;HgMPsf?8UwXm7@-__;?1(FB3;bM-~xgw-g7swUvvrKIfefa0qY{!2qF+{t820K4o#p7A!8J zC4GTxA3S2)b{$Q$Q>Z}B%UF*B`r!2~f8~5GWeBK@J+*Dywr#towvAKUKDBMzHs1Yq|C^n?-&{ROCX>lbCV3_y zj)4LB-vS1__OtT9=V(0h?fJlrblzdF+-FqI9(9pOOo=roSeHmbzkD~7t;eTev3Gy` zot4BT_4CQ2rs+dYtD}BZ@=VIoH7{5gNT-TvovCt5m|Oqy_?X-jQ`IEk7u_dc-n4p~ zTy&Z%?@-spLlUq-c;(i)-P0qV|5dqo{q(XA4Db%^3zM|`DwjV6rCL9CjeG}UKS->6 z6V6t0m>qGwYSOH&M5hVVYu?dN^r)8${Rj;~{z)%cJ%5rB$f6qms@U%B>atNHD8n31 zb|;BIyJmR1`?z}eq<8jpl9t!k&B-&!?`v--+wEg9J9@Y}K8{(`puTGls*#_q zt7V$)^MX{U53!HQX=Fk68Z1_9ZpC2Rv=-kKm9;`iz%3?~DvPB6f+et$M!Xa;M->+c zSx!C0g9O?4+wPr{J!#2yTmFs_UQV`_yz%^%`aK4!bF@h#&Uq5!Nd!v;P@fLIWZzKl zu{~6UsJ!p|V(T<<3VGu-*9Q~4Q~c=?N{aM!CB1_i9lJFBC;a<_s9dPi16sc8h-2P3d#MNqi0QDptyWHYaFq55e@0Jr z^P@;u{|b0%2N660Y( z-boes z$H7vf@vZ5R^9e0Wm}lv;WxJ46zyzr*=F}$)V`P<3T{$x`!8uUAV$H>uY~wz1QI0#` z$bXK~_@|q|c_@7$k&5#}@JuIxAV0GqfJ!b^T1{8X!t|8#78DCE_6?=u^~)K7d#l<} zTE7LK*c+ud#^b(Fu?+j-;IBz1^{)rxEX@67v}U8Y;>(=|ha#RiJWH!WEXoe|FO zqbA1^^>B*`Q^9)F$-2`K2O%})=>j*5H72N7ugar9V%sC9GrSk35F;K5+$NS_9j`K^ z(Pb!N)vLt-`LS17_6<1=p~NJn#b!l8_ohk-w%iGHr5S(&_2PQE~p=c3ZgAbFwf z$QB1hgN!of-zPe46|pE6Iu|1fpIJCq0Q-eWTd zm=7dD@cKqX;@_jZN=aH&*J9^Jz{ZR&4T%)(=OjW^autB^0Pr@|1VGhmXWj-eXBPrV zwJdl;1jQUb0PK!}7M1J+d{^{RqOTZITYDNxx^TWjq|p%V{um1+bGAAFan?MVlfq-9 zEj<{n;BrY&Xkq?5bowW{L#MWfW=BZOy$Md6}(IgNJSo zTP{3wEM}&t;shT=%`j9%N8;__JH5!kQ8LvvYC%ZGg-kJwJzCT>O%z~J!voE)?ny#& zIKqsv*ar}Pq;^TsA-={~8j3VBBi8*!N5+4_1E>f4xRu&t#}Ua2()8jh&WSsYYm(O3 zoNG|s@4BAwLFK%0oFe{}|HgcnBazUd}1s~gDErT-w5k_*Q6!1 zkBoyAgpa;?|FH}I!@3bQRNur_5~gvoYH7)(-jDUQE32V(tQk8bLwP#{u+n5I3yH^u zQJ52n$n$HLjWmeTtN|G{Ga#6&v4>rp+nJ1QU=P^TCP|EuK|a9 zi^c2(Pq1i}<`SVs+c=XEywFjWu0OnnM;(j0=K;(GE3KN~{|30O4hhPeu6%oOAh+Pt z>XlAG^?qL^bHyAh(ceX(0d#w&F&`0`#ErN(j0c?Jy2TjhYMTU^XqmTn2QHS@eB!6k zNthEYjYUDiR3k4;8BZ^&cVc@@5Py}nA(ZkWqFl_+dm=dNi$cH$hkr2TPZx70!kfGW zqNSv&M%s$cA}ErqO2$i{K7uSw(;%dwP4;(TSn3PD%T~0`9Er=UN5$w3afqC-kXlY9 za*whgQ)?F+>E`<}?yrjG&XK@na-;TG{yr#7ytr?=g7y|x9#Si}L!%{SLd?NCKuQzN zcVlqo4}a$9Opx>h^VtAM4^pE+a2MX;W#%Yv*}U}sYIGxjofi!qVC%L7eMtVA77>;b zy!{tU&Ac2acSI_P4&I##`%BjeGh~QW2#hi1uifYU)dAqS`N?}qQCY4`Hrn_+w?d4n zCYDZmK03UV#qG$dQaTSwu&CbKyH2qX@^?O!`6KR?bC7otla^4Q7-OaluJ!&LYiDx~ z!(>>u39l|13V!A+c2oG41j+oJDPATzSIzH9^6t=N_G-FNm<0~JG9dZ|U+@c=GOsImo6h2LnZq6% ziA+w%!NqR~wNJ^-;I1K9a)^S{Oy$KPwshh5WBEZjs|=x1ImS?>Z7pq;z!rhz0c7N4 z?2~*h_)$0ogoE5?j5DYTRFrjd)HlxtTLZ9qKN^|FT*jH|Irb#o&0h4Amh^Cp(su4K-s*1O+|wybV)E zy>djw(0GRYAaWODg??Y4($<(srnS~=gEQ@R0f@{YLTLer)1+~S=6K4eKRQ(hn+=~rM8Igl zZ9C7xxmZXob2BU@8^sIctBMZvGcB{j8$bN_uxw0CC1Ejc%o6a)+1v|{OcS5QQc+gc zvWASD>NwCdaXSEw#q1R;jHXc=GP=gHIvq@KWp2xf_wW;;>=V3bisUFEirg#8RDB(%wcB=OKm~wnilN>i#eBhwen(W z>XXsGYEp@4Z}Qa-U*cuiC@q+>CL>d9W!LBD>*B8;GU+{X7oU*RNtz^S+=Oe0Wgbp( z6t;$pCQau2@fZ>ka0{s=LFLW_sD)6iR7*70j{EdzVMTJ2+sxB?Pt$HFQkLvF%^i9( zH)J>L`c<-3Z4lIcEJCi0_yiX!}lzVYz6g54@0>etUBYyn643H!Rza3kwYN zmIyPG9xL{Lh&FD@*49%$9s|qQs03$ZaQBjC-~iS;1;$#x1FIq@Vp@XP zuYzeeu(6i#`r*Vws-rJjp&rewoh}Vmi%8e`d&y2UHjlCos~+k9Y!T1a0e=pb+28Nq z9vy$qnuaSu0CPnv<2M%hQhJ zi{LPeIA@KESvvUp{QXx*u$dUMPO*3O^9+1FUcT3d-9mf=+`S%N4`VJ59cJ?L4R-gi zK3={)4z8p-kqN5!^@$Ah^YgpC{e7kMdpmvK4=!Z$S|3`O1GB?2qP#HR;@XfrS;<=l zpWF){y$GgFkPf)yJ!P>h>4(29xN1$9Qdh)Du~?VX*t$-@xVj>F?Uzi)mzMeHwN18T zR=R)DzwQXd@N&?E#pk(jAAsuTUNc7_@JVXI{3$q z8)}Po2Mf=q?vSy0BR-L00}!xz^^t>vGh9S|gMs9Rum^jAad9Y&knIN-+Pn5-@sqsC z@6(d=9bvK-L<&G*3W<%&+OT6cle#~!?ZrofkNO|Er!8!Emxk* z8M+kfgPmMx?qm+p+Rs?Gv(M0VMox$Av%tTHMp&~D_FiZsSkvGBV^?LqCP~6~M-%%Y zMAqHh=OIh7LkUUHI@SPf0cI%VqL1^wMzn;a^u-A|&nH*A zJ~^1WYNrkNT&6@(Q($>6tJhjQovQfDd`tl^lq{6(DI@2fZk7<{tIk2MNfU~$Otp|~ z5&K+yvLyx$J;nrsogoj&`$QEM<6VOC2PSsqCD965K>Up$deYw#A)JH7^R*ddKJCH& z4n&q;ZJk&` zy5>>w5dqHN`Fc5n9ok1w5x4OMy}VtVd;xwCGLb96@4T9HuaK*5$UCGo9w&^jTbIAT z3JSMq7FHk_)FpTg?|DJ&8Cp8RmybqsAbUvwPr;IsWdgxE(rGY_-zVjERV9ID!ny7; zJ(&qrbTzZ{B|0VUcwq{$eSspyosV@F5G`)1D#L8r5d4vEP)MbOoTIHS9PrI#X-2}k z*)fW$7nC3j59H)*D2_suI`ll1CkJclH~6HA#;MlW(U~rOIG0t+s7;LYo+5uqQSbI& zcuy?bp@_N>EyO-fRJi&;GGgKEZw@g}o_eZSW;My7|MbvqX--ZXGNJDR(kG75BB$a-SI=M3kRNbr z2e1j-;L2rQJ&Bh^?c7}I%BSMHHmzRlQD;k@nKec{aBVu*q|o|W-SvkJSSeBk1(dwi zKstzSVw%vRJW)wBm{0Mc%{ev}po>$@GsFy4TjV#UX?p1$oi1;Ds64-R0H;%d0$E#o zR2|O__Z2_D+@9@k{S{ze*Xpg>4>0~d;!=KwsdkpJkB^_r$H!kfFEPIjhO3MB{01>@ zEP3Wr-h=lA>HH@-+_!fZzk3AxGvp`Gd&xzAYcHl}hqTlu;+y(UjX}P>-MEl`H*Xg& zl>GC{$H{Rf-pSG1`y=^65RyFOY+T)JoaE}y8DS#PS7#@GFTX&doyY#b`TAqi?SHFJ^zT>{Cc97!kBWeiJ)Y^oBYeF6eHEQM z=5xdsybItnHKGeC9Yikk=R0bL@xtE-qD}I3&@t%3!_x^76J9VgMYmTQk&q4n&Nag8 zxNc0tUbx+`dA&E|nG%)LXJ`98UD*70uv{O)I*s~`uqj=~CKfS0wq@NlsiUBqKR)CR z@wFfyJ}mD+Q1I>(kdUNF@2C5i1f)B#h`}4;o;_hm6wR8iA64~UXslVxO?d~(6SNjhUX9&LuUDhJ z$Yg>wy?C|>sS#3a5PA?|;R!6nOj8oF0#$Ao&QSc>(DTaMKZi(ITyH$ZGycFm$7VSH z=X+XrXyw;7j4f()k-vS)iUsxjBe%}Xu}GbH0ei%?f%{|&-+oQ9IPF@!st`^AG$}bW zW0G#Aa~2L^jEET@vaOOGG_WgX!DvJlVtl&jm6O&I`K3=F=6jm zf2r((QY(9annEBu*EfhGfcChHad?4pM?E8ShJuHNst}Y3gcz)cB zJt85!PHMcLT+_;(39KuV=sCo7X1i6O1A=O06g}E+7YE)P>sbu(_peWOJVgvgx_rnx z`?~tTGI$Sl5XG~W3pw&dBYwk1BLF7>WiHksgdcExe%OM7VWS>C77~Mv#aAm?P?W?^ zHXjUl*~e0mFNLpD)DF{JD~{P#_7+)I;bm*)#TBz{oJOyRDBWw<>-G?cXxoB+yFzi! z!t!Xm#CKR`i*LO{dNz`;T$|?#4VMNbL=e>jiU^=RHgry+NB!fHaIWJdK68;uW1nd* z7k50nIry)FUHiLxIqsl#ggoZfd9DzVpm%Du>j_RUhs%|E zX=ffK6^g`-B+%y1JvcvmL#&>1SIZ8j8|=#J(WbuvY0nmsJ3m5gF7>;&$S>m1wsisZ z0uRV9on4>c4&4$GKcJW1(8cq6hK_rLp0*zGL|60jyXD0!&z%tw%As@z)?A_BTDg)O zY$1=pkGiYYM@kMWQ|-M+;w`=|+N3R`WkWP3t!7R{RMshzknbOTi`RnHd!A47TSwP5 z!q>BXdk4`j0XY;`7-(hAtUzJ)DFpBmQy4WI_l;af*^|L_9X)wTVd^CN(x`T;Ed0;RMIDfIY^ zv<3bd-tl*s!(zpwmLp&1a6oPiif&aK!(-#Kbkoi?zj8amA8kZ*pk!@om^Jh^9l2K+ zb10jSEtLB&HbhIEpk)&c1Wz)VY0cbhGh><@6f|zqZkn`B2tUk$ns+@7!NCU=+TH;@ zPZqm44SRY6t;l4#;bYyIKNY*nIq(|Loh9W^{CN9<>eXZxG65=fotyh2FC!Xs6E^}& zJjo%c^6{?ml1vNVUq$_$YZI|J``^4$=o7G+_Wc&rssydhr})6UBM4f2Ga?Hb-vdq~ z9C33^i^CJWMY7|4{*opxj(j!*MQ*^S+A}CQ<`+Oy>h~K%cNA?E!;mc;PUcn5O91{j zMD9tU%@{A(daIoD(A!q{toGX!+_gR4jDdGG@9;r6Kg*J{8nVf<_d{RQ7<=9LV45y1 z)u~Qq1lcgO#$p?(jQPVD$5pg4i#(kcHS8{h7IBD3hLnEk%kKYLvWcqnr>#rb%MBrE z7c(p|OP3Ru7p`(Rk6cXnLXp!XLBoOoPzB%~4)sCCc#v6#0fOke`lJ_>Jn-)-y9Un5G*Tm)4&Dtx(6v7wdzK+b3JtcB(T3=^LVL%q2@x`s#xM}l&Q)Sg`?4&qD z&e&IF`$w_Or|@($09SLMV_-+OAM1o{9M>+g9CGs5=n|cc9wD8712^p4u1Wq%WGWO? zrsHlBwsyA0ERCJJhp5kook>b$9Nm2HCmOcV>PR~+BAxw_q80W{Bir-Vw#k~ul zenUm9@nCt*Bk-i0A`6FQLNhP9^umC#1+#+U*6c|O&6@lr&`@>?aaN0OZOt;Ru=OK> zL^`$${Vj9ZPQG45Y8M65Y;WW@;y9F1t8;|;Z=*YCa_U>Jt2%a844zMW-8h_x#Nw2x zZqKQyt4}B02$P(y-BN4Lo?xy&uMv##m>$xw$7HgME&hPx?m-2t(vWwcz@$AgGRaE) zn_HS3UoTnN#n#Tw@0;BVa%HEc=2FsUyjW$0H;!2r<7>CS<0VZ6ZN@@JXK3FM{w>sB zNqBJ0{!;TK9z?@U5?gU(pO8+udvKBdJodsshuS5i3FYA43-zkBGMRgonqym9N#IiqYdrj2+~-`M zfietfUxLagyW@77PG3UtiO5%?tHcriHyKX!pM?0Y&oG1<*71Zd;oc#`8NvHk8vPK& z;VvQwgzL_OU?Z<~$^Pz!MEO2 zsMZ31ltS^sF|#m6VD_4|6&L9f+sT=9r~3pAxBD9-fDE8;++h+vw5{Uu;zn5`n~LY1 zU-;7xi8`JWcCEvVOwfv{%A12T+{i9xE~Mv-VMCds|JpDAF9i}5lr;n)B@*oXZ`ENK zyF1B`eWIj+lMlx7lNi-}n=DFpnkY>Glq)U+TBKe^q9xMmcfa4|FMpV_x*X+X+U$L< z%+vr1w8Z?liVVCwI2%$gy69k(M5FywF9cJ(_WlSd>Dfsm{B%WUi>sio1-3XCyRTt; ziw9!XG{ppoBPPi1FC(hI{uATBk4=x8U@_&G(4s7-eYx~YB?I1n^3@}iu`E#`;|qWu zFE89$-+jC1NOa#omY)qf=jVqfHhfcTeV+&f~||Qwwi|(=D*D%z8LnU440bz+Xtk7iS)-lnH%5DaQu&(bRH02jMt!Gl(RZ0=0zj8ME1wW-Vq-gIHm7XSAf{TGwedWxrNimSO>6ien${gB( z%>n%t1d)o(YNmBRa!YCVL3*tHvz&u|aJw^vIE{^$&to_SgKZ?*_H^USr7-NuVn^ zz>w~*zRlgb86eZ!SH!jpFIszXqeb^;?OS{LDQx3Zy3>=t)Xd~f50Nq%vjjcJSv2I^ zrwcYBiX=HvJ7;ftVBofCCPZ!Oyt@X<>r~oL|gRZGjrL%uC zg8j|Yq%nxBmXA4A_)~;V(2(w`(TqCMQ1;tJ3ApctSmMQF21Pg_|1jq5TV2bwvR2zSOoDwkes`fCGXb7V?wT&#}bX<`)_ zY%nA##gUYx%He(s4S6MM@6>c(k6Yy z9HB3Hw@7;ypMq2&z#D~OM0c1++%$k;$BIyQqqW`DgOppfu%20aDy%Sij__l?lDwObtA~yayiKnSvIX5w?9?D`Tpo;RIl5a~W z-6bui+TTn8=!xljdy!})v1vthT4vzKw|fT69}f(1gR1Ru=qdYL`&nm*%3O|I#M+*f zB`5WZEb=dS94$azN~l;q!2pJYZ8dVN>P#QlPvOJuwpMc8y^3`N`Umq>2!f5 z`-_?6&O%0{l9Kcn|CuNeRi%oY8RrX48-l{!xYCxMbbQoAynZ8d4!m1tU|F*nxt2`s;&v$;qal#vH6_9`+mCC3Tu3hFD7_-CJ`|Hg)(PcdFtN;EpmS z&M#Zq#Qh{jIQ!EENB{aU+&RP=#jksN^5*Ab-u}b@XjFR=(=6s;j8K5 z@FXA(bmRD;CE(Hn{{`;{^na&(9`|#tSL5VT@DZoTBGX%29+Wm3$1} zxHaR+WNRqFz%{n*pQ|C+kwl+)t*fmq4Vq3l7p8~LC5;dAW-A*r6Ag!@h*SuF@C?Nx z`Dpn+#z1UHy4MZ%Pi8Q zW`SVFxDbzZ&6!6$dwHH)SYXcPO(>fI;ROp%qz^$HSDg3*qKz#Go{>reJL^5P4jveL(jVoY*=3F|$ zASO%-p{JajJi_Ahp;4!AOr?_j53R?Y_0I!Zt&LFfSMgIaV8 z5-q@q$H3H`109$L%+m69ze=K35y;?hgY9Tw<=G~>l6>ffD6VYQxDUwRL(lCX%M(~< zrX~aH3RCt{nh+B5%+kn8(x`-E-yjyL; zl$A(cU3WNkK_ssdTs9S7k;g>S1xcS64v=n9P}HEEnYObc3Z)IAF~ubGK)Z0i;Wg6s z9BWq6wIsb1j9 zia={Vux7FF`v8kL@IbP2E$5~f2GfRy%&rnh!ImiBAAtN<(yu*_@mB$cx|XDoF*+$2 zDLaIC@saP?y{fVKm|RsOT& z4#v}B-WX;=!MK0KG%WMf4C26ihW~@^rA~r^UH6Lrqe8wa%3!z8(@_>y=jgV3m#@sU z^-jCvL*(5+$IT!12)8#dm}`nkwme81oOhqVL%j3`i&-ge+r_*1^_cI4i!Xc6dK8Xk zMz6IjGwcS)9tdeqYoHt~o7e)OIY)l-t+DU_-b$fw0);_14_-V`@nY;xFN^GtMBT@z zN)b<*vapO~&TL=tPZ19Oo>8syz)Qaqoyc=a-_7Z&`k!7ogQQ@9==rcS8uwO?doE+cbu!x zEK8T&w1nDXtQyKa=<=mscv9~@IMV07M5@LtI+HLHedyehR!v^gXS)$-jam25i@}@o z-<5@XmuN#@#T$n*mcL3<{Py+IeO*d*B z7-a|f(ru^{`Ng!zhRb>36b$<>b$xI)8LrFxvQ9E8cRWHBE+d33c?Wbo*p+6L-NtTY z(|R!+aIwK+?%V36q%G;q5PQ>QFJ?adn~!DpAJG*-;XJHg6=OA0Aprz3b$Vs~Ym3u3 zVmRzxFhFbJ#P@X?&5gL_5QOebr?Gj~7CGzTEZaQ)%G>h#MUvdt9(lf9N2t}F%Ccv+ zKj{bj;D=OsYL_-5X_sWf&wI_6YEj9~u)>Q>@QM`^M$6pK&S9WiJUW1X*WhO7-vDX; zEWQ`@yV0HW5#sqbDLEFtw(uSD`l%g@epccboemnR*~lne$s&iPR{6#7Nh;}G%fM{Y zHVsj9T8a$6gILA_&FM074}O9KG<~@|R6=R8*RWmz2mm|6zuG5_G56>}BIm0xPQL(% z-M6v8=7qO9XjzbEs-M2q$z$N=_T_WcTOAX{&t;G@h_5AD!74J&mQtAYm%a%5!h52A zfMamUs#iGbnH=qhpsh_%~SK;7c(asd97JN)zxHz+DyHCH1H6ETGh`0vah!>v)M7|NJr8J=W;Kt#@b*p(5o1s=0H6TLp6 zQo_tKGW{2?jH84z;mn7dT7+^N5wTi${FPUoX_?;5Ar~#q!j=DYzobm;pG81wa5ni) z@37vT>m|`RmpxHU^o5+7*z>EhnA+{L@v+??+FoT#j`E?5yiZ?!S#{KVM0Kik7v{Oq zG7U0EV(jIgEV&I*D5QkXS^Dh=-oUNO^>SPZB)%g)UCv+mN4XqVh7&>LA&Q<~UZ2Wq zxW4@x0+Ny&;f2^dJlINuj+MUc0U+>+oEz(;{OB&Vy3nH;R8l952ZK`l9T0W78E70yz)gJ0E}m>^>r?!AZVwvNT>-pd$<)msGE3g z=fs{yMSw9?kgT5W{x>cr-4|7qq=m&O^X(&xmN>k#M5&id-t0M-IcfNHGeo?6i+^p5 zCHZ3w8YSC!<%~IMI53chQr5~%6Yd@N_fHgtxT>M#_;9A?(3QGw+PC4#0e>R)`QZ?W zUWa4Zm4cXZqYq~{rWKq6C&EixQGp!tZFEtuXEYfPPrd$Ghz?2jP}Uk3R`Pb4#G|x@ zx|gXh1ZnH09qsc6sy%vGz?{FZL7`7G1wX!uBUV2MD}(XjzmCKa;=FdsXaq7{DU)Nu zQA+NWY6F4QW$U+aW4Py zz@mAlq@)k;53FH8+!Lgf-^G*FQ#ouz0fYzQofFi#89y;T+{Mgw6#0UGU}&6+e=#@E z>iFgp)zu|(pMwzTS#2$Py2V-}v-De;13Qae{gyGTaB8P9H{Fhblhrk!xU=JC;C0^_ zN&{wyq5^$UHayw}QHh^svmKej^|%%?S2X9mM>=mkKEI49Gv|FYXARtTB0x5FZ`1_)GME3AR1_uL$O(w^3fSwSmtOLY#%!_@%gl@{*7tGxt_SXvz5LJmlFFhpq^fh z6duH2r89ME=DN;?xqzJsJUcOYAXd}(3Apl;oHg|7NE(HP=1l@o@u`M9>YCyY| z8gTyv^ip6;6?;5?Sj@R|aBv!0L$ke-4#2A%7WQljEMdp8|BDBYtYNZ$0&WAS<^>Xy z0|Pwjx&+2ff&cxc0|E?zeFC~^Ujpp{`zKuMx2GbSQvUhE5A-rd{*R8dQx2{C60<{e zQQoPdJrDHNUvTt&gA;Z255a%`4~#CN`yc)Pa{WILh(d`)k3F=T56tf=_o-k}{{&tm zdcS`OboI#pPbpPCx|N7S=OiUJdH-nQtsn#bYXiHN21vnjHj1Y-XRC{YLfQgW)prgv zE=x++GlKlpvm#0$;U88%dhpE3!(3+@XP>5ZIJMj*T@6dM!M}xn+tL`J=B-;UhTLBo zFmUg3*_51ws4|)v(p20SJQPH|ldc&k`ci47pJA<&lFQIwS2P%Bdy5=xg z7Q!=J2PKTK;Tj@`;f|#kljnp+biZ$jN+NtOmU@G~ZWUB83ss41n+U?{_a6X*8D8@g zM|%XwovtU@`QfcZG}SS* zThPn6i)=RF#aO#Uu;+htVMH}j+%@6>5VQtmAp?$3DmD4Of*m3#c- zrGqyckJf8k!r*2sC@PVl7ry;yG|eYuR8hN#sb3F3vF$Xsqj{e)9)MgE<`6S!O;Y0` zJ5_~Y@1Vfjcsh%A19h!@m|%CojMoRl6AKd)H|oSE#Zz)eba&=ruP>9xYl~F-r9ILh zuM>XLRZ@oTc^OlCsTs%4Dt5^yJCecU`6$IfWVJw_M3An)97}*~lPiwN zs9~$8ysxMlPW7#;yw9%bRf1U09dSJo!fKvHAiHnob|Y#s2&RVk2b-|bcx_H?GOUo9 z2Bpe|f@2O8-j2)|1|&xv}^T}sCqv8pt~9;cJydjqgZs&)grIob%>ieg4H<|Ri- z?Og()VQly8anQ`g)X%`%E4POqV9&OH zDG<2w0UVbqUuRJH;o+jTpIewZ5i)U*hGcTuOp_49X#2&#R43zCVRo#4C~EhQHu5-F zTez{rfhwtTM1)E6EvceV(N3>Rc{8b>#Pida*WA)q5R@D*85bSQKCHev&h-USrSav4 zy}YA#NG6t=kOGpw|y6SAvat!^rLaD@_IHED?LjQ+(7>}SZ z3!ZQuijf|5hq~+@e88T+FfT$Jr2zvrn|;g@RIb1tUHCk7PYKr{{ax5urVEx0Tnigy z>}v@CD`(rTMMc|_bLnYh!)K{?8|S3VnwnF(M#JKi!a${_09}z=8AHyCXNiY_;w6_G zF~?C_)Z}4gC5B=tlsY9CyB;Q&%fYS_Ktn}4&aQ__t|AN)V@#6)m|57_$i{EC=A{t$ zrO(064bp)&bA?lBIesOnd9sgpTub6qmRs*RBBE$uw9BMH2KL(l2XM*YxH^GlaRBCH zN3+i;xpZ{niPFDAuwhL*^wg8rO$?~nGQKGh&hPP<(JiS9q9DJ=-k!z(izo%=LHB_r^?x~SYr@?o&~ydvZG zdH!6?h@%F1WyTZLzWFy182#mZ^bah&#in4FC09LBWzV;W0n@D$YL3Do9( z@_|-qrb3jo9Bo*KXqr|GpD4}kU)htom4YQ~@gPfouxY%s1e_;);g0qj<)D;G6zzm& zSv|D?_Lyi6Kj8`2(w57c>ZDh{z%|oR!5!Q94 zKgJEifR?dw#%;_%plA1U;pK<47{>1#iL`e)y?t}sz~_D$hiL-n2E=7|%M=gFbhpyF z{I%GIjQ9(M03Cq}xvKz<{Dq%Y+$)byuTO)%3E=bbCXm1TYLS>KU3f;_UB#YWM2vYM z!d;0iBPwGtnc<~|UpT_|?QJZak&S@qnVh4{H0&6p55z=IsTy5-27@4wzPU=u5Z*^& z)FXrL31uBL``mtFp!csR7iNC?!#-o&0dt#jy+N~@Hh1CWPmHSxhbgH|I}0fS8Wu-F zq3tz^vaA6I<}gi0rS{i2dWe+QX6EcG2^_4BeJtgjx(;oO1dcabLA~EfZL& z8Wx+goqa}e!ru;;|cR9K+ucCUC8of@2c#*GDo$8sD@|a81kc-Tq z27lymnfe!;D~`0F2f_ly0n}IO6|CEM6R4Vjg>kzDn}2zaPsv#{>FQgZQ~!>O8(4^y z$pp9!6gI;HgMPsf?8UwXm7@-__;?1(FB3;bM-~xgw-g7swUvvrKIfefa0qY{!2qF+{t820K4o#p7A!8J zC4GTxA3S2)b{$Q$Q>Z}B%UF*B`r!2~f8~5GWeBK@ Date: Tue, 22 Oct 2024 15:16:46 +0200 Subject: [PATCH 56/94] build: fix Foundry compile failing using different version --- package-lock.json | 25 +++++++++++-------- package.json | 3 +++ .../contracts/LSP4DigitalAssetMetadata.sol | 2 +- .../LSP4DigitalAssetMetadataInitAbstract.sol | 2 +- packages/lsp4-contracts/package.json | 2 +- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index ea89154d0..84701e074 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,9 @@ "config/*", "packages/*" ], + "dependencies": { + "@erc725/smart-contracts-v8": "npm:@erc725/smart-contracts@8.0.0" + }, "devDependencies": { "@b00ste/hardhat-dodoc": "^0.3.16", "@erc725/erc725.js": "0.23.0", @@ -491,6 +494,17 @@ "solidity-bytes-utils": "0.8.0" } }, + "node_modules/@erc725/smart-contracts-v8": { + "name": "@erc725/smart-contracts", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-8.0.0.tgz", + "integrity": "sha512-dMYUbnay5sTb2u1Z4BcJdcZylciJw09W//CtCAfLu11BVqjbMdsekwZHFPDWrz5Lna/5uVx0rI4GklVRORdK5g==", + "dependencies": { + "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts-upgradeable": "^4.9.6", + "solidity-bytes-utils": "0.8.0" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.17.19", "cpu": [ @@ -18814,19 +18828,10 @@ "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "^8.0.0", + "@erc725/smart-contracts-v8": "npm:@erc725/smart-contracts@8.0.0", "@lukso/lsp2-contracts": "*" } }, - "packages/lsp4-contracts/node_modules/@erc725/smart-contracts": { - "version": "8.0.0", - "license": "Apache-2.0", - "dependencies": { - "@openzeppelin/contracts": "^4.9.6", - "@openzeppelin/contracts-upgradeable": "^4.9.6", - "solidity-bytes-utils": "0.8.0" - } - }, "packages/lsp5-contracts": { "name": "@lukso/lsp5-contracts", "version": "0.15.0", diff --git a/package.json b/package.json index 48f390720..95c32f60f 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,9 @@ "test:reentrancy": "hardhat test --no-compile packages/lsp-smart-contracts/tests/Reentrancy/Reentrancy.test.ts", "test:reentrancyinit": "hardhat test --no-compile packages/lsp-smart-contracts/tests/Reentrancy/ReentrancyInit.test.ts" }, + "dependencies": { + "@erc725/smart-contracts-v8": "npm:@erc725/smart-contracts@8.0.0" + }, "devDependencies": { "@b00ste/hardhat-dodoc": "^0.3.16", "@erc725/erc725.js": "0.23.0", diff --git a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol index cf6119640..fa5d85bd5 100644 --- a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol +++ b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadata.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.4; // modules -import {ERC725Y} from "@erc725/smart-contracts/contracts/ERC725Y.sol"; +import {ERC725Y} from "@erc725/smart-contracts-v8/contracts/ERC725Y.sol"; // constants import { diff --git a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol index f6bff82ea..bbe737a4f 100644 --- a/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol +++ b/packages/lsp4-contracts/contracts/LSP4DigitalAssetMetadataInitAbstract.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.4; // modules import { ERC725YInitAbstract -} from "@erc725/smart-contracts/contracts/ERC725YInitAbstract.sol"; +} from "@erc725/smart-contracts-v8/contracts/ERC725YInitAbstract.sol"; // constants import { diff --git a/packages/lsp4-contracts/package.json b/packages/lsp4-contracts/package.json index 3dd39bb0b..105ad4a8d 100644 --- a/packages/lsp4-contracts/package.json +++ b/packages/lsp4-contracts/package.json @@ -48,7 +48,7 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@erc725/smart-contracts": "^8.0.0", + "@erc725/smart-contracts-v8": "npm:@erc725/smart-contracts@8.0.0", "@lukso/lsp2-contracts": "*" } } From 2c3fd0d899f3ca857088e6cc30140e874d885b61 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Wed, 23 Oct 2024 10:41:51 +0200 Subject: [PATCH 57/94] build: re-generate `package-lock.json` to fix dependencies error --- package-lock.json | 65 ----------------------------------------------- 1 file changed, 65 deletions(-) diff --git a/package-lock.json b/package-lock.json index 84701e074..68ed47242 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16206,19 +16206,6 @@ "turbo-windows-arm64": "2.3.3" } }, - "node_modules/turbo-darwin-64": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.3.3.tgz", - "integrity": "sha512-bxX82xe6du/3rPmm4aCC5RdEilIN99VUld4HkFQuw+mvFg6darNBuQxyWSHZTtc25XgYjQrjsV05888w1grpaA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, "node_modules/turbo-darwin-arm64": { "version": "2.3.3", "cpu": [ @@ -16231,58 +16218,6 @@ "darwin" ] }, - "node_modules/turbo-linux-64": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.3.3.tgz", - "integrity": "sha512-eHj9OIB0dFaP6BxB88jSuaCLsOQSYWBgmhy2ErCu6D2GG6xW3b6e2UWHl/1Ho9FsTg4uVgo4DB9wGsKa5erjUA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/turbo-linux-arm64": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.3.3.tgz", - "integrity": "sha512-NmDE/NjZoDj1UWBhMtOPmqFLEBKhzGS61KObfrDEbXvU3lekwHeoPvAMfcovzswzch+kN2DrtbNIlz+/rp8OCg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/turbo-windows-64": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.3.3.tgz", - "integrity": "sha512-O2+BS4QqjK3dOERscXqv7N2GXNcqHr9hXumkMxDj/oGx9oCatIwnnwx34UmzodloSnJpgSqjl8iRWiY65SmYoQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/turbo-windows-arm64": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.3.3.tgz", - "integrity": "sha512-dW4ZK1r6XLPNYLIKjC4o87HxYidtRRcBeo/hZ9Wng2XM/MqqYkAyzJXJGgRMsc0MMEN9z4+ZIfnSNBrA0b08ag==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/tweetnacl": { "version": "1.0.3", "license": "Unlicense" From ddb4316c6d312904832ff09278356e57518ae141 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Wed, 23 Oct 2024 10:42:08 +0200 Subject: [PATCH 58/94] build: add missing constants for previous interface IDs for LSP7 and 8 --- packages/lsp-smart-contracts/constants.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/lsp-smart-contracts/constants.ts b/packages/lsp-smart-contracts/constants.ts index 7c01753be..34e7ef65f 100644 --- a/packages/lsp-smart-contracts/constants.ts +++ b/packages/lsp-smart-contracts/constants.ts @@ -17,8 +17,8 @@ export type { LSP4DigitalAssetMetadataJSON, LSP4DigitalAssetMetadata, AttributeMetadata, - AssetFile, - DigitalAsset, + FileAsset, + ContractAsset, } from '@lukso/lsp4-contracts'; export type { LSP6PermissionName } from '@lukso/lsp6-contracts'; From 30b1e0f5af0e59fe51adc59b14432701ff321974 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Wed, 23 Oct 2024 10:45:47 +0200 Subject: [PATCH 59/94] test: fix tests back from custom error to revert reason string for `Ownable` --- .../LSP6KeyManager/LSP6ControlledToken.test.ts | 6 +++--- .../LSP7DigitalAsset.behaviour.ts | 16 ++++++++-------- .../LSP7DigitalAsset/LSP7Mintable.behaviour.ts | 2 +- .../LSP8IdentifiableDigitalAsset.behaviour.ts | 18 +++++++++--------- .../LSP8Mintable.behaviour.ts | 2 +- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/lsp-smart-contracts/tests/LSP6KeyManager/LSP6ControlledToken.test.ts b/packages/lsp-smart-contracts/tests/LSP6KeyManager/LSP6ControlledToken.test.ts index aa1f1bb5b..cd29d880a 100644 --- a/packages/lsp-smart-contracts/tests/LSP6KeyManager/LSP6ControlledToken.test.ts +++ b/packages/lsp-smart-contracts/tests/LSP6KeyManager/LSP6ControlledToken.test.ts @@ -170,7 +170,7 @@ describe('When deploying LSP7 with LSP6 as owner', () => { await expect( context.keyManager.connect(context.mainController).execute(payload), - ).to.be.revertedWithCustomError(context.token, 'OwnableCallerNotTheOwner'); + ).to.be.revertedWith('Ownable: caller is not the owner'); }); it('should allow the new owner to call setData(..)', async () => { @@ -212,7 +212,7 @@ describe('When deploying LSP7 with LSP6 as owner', () => { await expect( context.keyManager.connect(context.mainController).execute(transferOwnershipPayload), - ).to.be.revertedWithCustomError(context.token, 'OwnableCallerNotTheOwner'); + ).to.be.revertedWith('Ownable: caller is not the owner'); }); it('should allow the new owner to call transferOwnership(..)', async () => { @@ -227,7 +227,7 @@ describe('When deploying LSP7 with LSP6 as owner', () => { await expect( context.keyManager.connect(context.mainController).execute(renounceOwnershipPayload), - ).to.be.revertedWithCustomError(context.token, 'OwnableCallerNotTheOwner'); + ).to.be.revertedWith('Ownable: caller is not the owner'); }); it('should allow the new owner to call renounceOwnership(..)', async () => { diff --git a/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts b/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts index 687f2092b..1274ece10 100644 --- a/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts +++ b/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7DigitalAsset.behaviour.ts @@ -2128,7 +2128,7 @@ export const shouldBehaveLikeLSP7 = (buildContext: () => Promise { @@ -2140,21 +2140,21 @@ export const shouldBehaveLikeLSP7 = (buildContext: () => Promise { - await expect( - context.lsp7.connect(oldOwner).renounceOwnership(), - ).to.be.revertedWithCustomError(context.lsp7, 'OwnableCallerNotTheOwner'); + await expect(context.lsp7.connect(oldOwner).renounceOwnership()).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); it('old owner should not be allowed to use `setData(..)`', async () => { const key = ethers.keccak256(ethers.toUtf8Bytes('key')); const value = ethers.keccak256(ethers.toUtf8Bytes('value')); - await expect( - context.lsp7.connect(oldOwner).setData(key, value), - ).to.be.revertedWithCustomError(context.lsp7, 'OwnableCallerNotTheOwner'); + await expect(context.lsp7.connect(oldOwner).setData(key, value)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); it('new owner should be allowed to use `transferOwnership(..)`', async () => { diff --git a/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7Mintable.behaviour.ts b/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7Mintable.behaviour.ts index e465f422e..0889670ba 100644 --- a/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7Mintable.behaviour.ts +++ b/packages/lsp-smart-contracts/tests/LSP7DigitalAsset/LSP7Mintable.behaviour.ts @@ -87,7 +87,7 @@ export const shouldBehaveLikeLSP7Mintable = ( await expect( context.lsp7Mintable.connect(nonOwner).mint(nonOwner.address, amountToMint, true, '0x'), - ).to.be.revertedWithCustomError(context.lsp7Mintable, 'OwnableCallerNotTheOwner'); + ).to.be.revertedWith('Ownable: caller is not the owner'); }); }); diff --git a/packages/lsp-smart-contracts/tests/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.behaviour.ts b/packages/lsp-smart-contracts/tests/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.behaviour.ts index 15544b9a5..1c6937370 100644 --- a/packages/lsp-smart-contracts/tests/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.behaviour.ts +++ b/packages/lsp-smart-contracts/tests/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.behaviour.ts @@ -119,7 +119,7 @@ export const shouldBehaveLikeLSP8 = ( context.lsp8 .connect(context.accounts.anyone) .setDataForTokenId(tokenId, dataKey, dataValue), - ).to.be.revertedWithCustomError(context.lsp8, 'OwnableCallerNotTheOwner'); + ).to.be.revertedWith('Ownable: caller is not the owner'); }); it('TokenIdDataChanged emitted when data is set for a specific tokenId', async () => { @@ -1795,7 +1795,7 @@ export const shouldBehaveLikeLSP8 = ( const newOwner = context.accounts.anyone; await expect( context.lsp8.connect(newOwner).transferOwnership(newOwner.address), - ).to.be.revertedWithCustomError(context.lsp8, 'OwnableCallerNotTheOwner'); + ).to.be.revertedWith('Ownable: caller is not the owner'); }); it('should transfer ownership of the contract', async () => { @@ -1814,21 +1814,21 @@ export const shouldBehaveLikeLSP8 = ( const randomAddress = context.accounts.anyone.address; await expect( context.lsp8.connect(oldOwner).transferOwnership(randomAddress), - ).to.be.revertedWithCustomError(context.lsp8, 'OwnableCallerNotTheOwner'); + ).to.be.revertedWith('Ownable: caller is not the owner'); }); it('old owner should not be allowed to use `renounceOwnership(..)`', async () => { - await expect( - context.lsp8.connect(oldOwner).renounceOwnership(), - ).to.be.revertedWithCustomError(context.lsp8, 'OwnableCallerNotTheOwner'); + await expect(context.lsp8.connect(oldOwner).renounceOwnership()).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); it('old owner should not be allowed to use `setData(..)`', async () => { const key = ethers.keccak256(ethers.toUtf8Bytes('key')); const value = ethers.keccak256(ethers.toUtf8Bytes('value')); - await expect( - context.lsp8.connect(oldOwner).setData(key, value), - ).to.be.revertedWithCustomError(context.lsp8, 'OwnableCallerNotTheOwner'); + await expect(context.lsp8.connect(oldOwner).setData(key, value)).to.be.revertedWith( + 'Ownable: caller is not the owner', + ); }); it('new owner should be allowed to use `transferOwnership(..)`', async () => { diff --git a/packages/lsp-smart-contracts/tests/LSP8IdentifiableDigitalAsset/LSP8Mintable.behaviour.ts b/packages/lsp-smart-contracts/tests/LSP8IdentifiableDigitalAsset/LSP8Mintable.behaviour.ts index b1477a821..049ae4b50 100644 --- a/packages/lsp-smart-contracts/tests/LSP8IdentifiableDigitalAsset/LSP8Mintable.behaviour.ts +++ b/packages/lsp-smart-contracts/tests/LSP8IdentifiableDigitalAsset/LSP8Mintable.behaviour.ts @@ -87,7 +87,7 @@ export const shouldBehaveLikeLSP8Mintable = ( context.lsp8Mintable .connect(nonOwner) .mint(context.accounts.tokenReceiver.address, randomTokenId, true, '0x'), - ).to.be.revertedWithCustomError(context.lsp8Mintable, 'OwnableCallerNotTheOwner'); + ).to.be.revertedWith('Ownable: caller is not the owner'); }); }); From 12c195356a6d19835c1bd4ff17980fbc2482ff43 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Wed, 23 Oct 2024 11:02:36 +0200 Subject: [PATCH 60/94] chore: revert changing version 0.16.0 in some package.json and put back to initial rc version From e78a490ae42fae9f50b57cf7843304fe36588731 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Wed, 28 Aug 2024 13:50:24 +0300 Subject: [PATCH 61/94] feat: add ERCTokenCallbacks Extension --- .../contracts/ERCTokenCallbacks.sol | 62 +++++++++++++++++++ .../tests/ERCTokenCallbacks.test.ts | 31 ++++++++++ 2 files changed, 93 insertions(+) create mode 100644 packages/lsp17-contracts/contracts/ERCTokenCallbacks.sol create mode 100644 packages/lsp17-contracts/tests/ERCTokenCallbacks.test.ts diff --git a/packages/lsp17-contracts/contracts/ERCTokenCallbacks.sol b/packages/lsp17-contracts/contracts/ERCTokenCallbacks.sol new file mode 100644 index 000000000..144718598 --- /dev/null +++ b/packages/lsp17-contracts/contracts/ERCTokenCallbacks.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +import { + ERC721Holder, + IERC721Receiver +} from "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol"; + +import { + ERC1155Holder, + ERC1155Receiver +} from "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol"; + +import { + IERC777Recipient +} from "@openzeppelin/contracts/token/ERC777/IERC777Recipient.sol"; + +import { + LSP17Extension +} from "@lukso/lsp17contractextension-contracts/contracts/LSP17Extension.sol"; + +/** + * @dev LSP17 Extension that can be attached to a LSP17Extendable contract + * to allow it to receive ERC721 tokens via `safeTransferFrom`. + */ +// solhint-disable-next-line no-empty-blocks +contract ERCTokenCallbacks is + ERC721Holder, + ERC1155Holder, + IERC777Recipient, + LSP17Extension +{ + function tokensReceived( + address operator, + address from, + address to, + uint256 amount, + bytes calldata userData, + bytes calldata operatorData + ) external override { + // solhint-disable-previous-line no-empty-blocks + } + + /** + * @notice Implements ERC165 interface support for ERC1155TokenReceiver, ERC721TokenReceiver and IERC165. + * @param interfaceId Id of the interface. + * @return if the interface is supported. + */ + function supportsInterface( + bytes4 interfaceId + ) + public + view + virtual + override(ERC1155Receiver, LSP17Extension) + returns (bool) + { + return + interfaceId == type(IERC721Receiver).interfaceId || + super.supportsInterface(interfaceId); + } +} diff --git a/packages/lsp17-contracts/tests/ERCTokenCallbacks.test.ts b/packages/lsp17-contracts/tests/ERCTokenCallbacks.test.ts new file mode 100644 index 000000000..252af5c5e --- /dev/null +++ b/packages/lsp17-contracts/tests/ERCTokenCallbacks.test.ts @@ -0,0 +1,31 @@ +import { expect } from 'chai'; +import { ethers } from 'hardhat'; +import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; +import { ERCTokenCallbacks, ERCTokenCallbacks__factory } from '../types'; +import { INTERFACE_ID_LSP17Extension } from '../constants.ts'; + +describe('testing `ERCTokenCallbacks`', () => { + let context: { + tokenCallbacks: ERCTokenCallbacks; + owner: SignerWithAddress; + }; + + before(async () => { + const [owner] = await ethers.getSigners(); + const tokenCallbacks = await new ERCTokenCallbacks__factory(owner).deploy(); + + context = { + tokenCallbacks, + owner, + }; + }); + + describe('testing `supportsInterface`', () => { + it('should return true for supported interface IDs', async () => { + expect(await context.tokenCallbacks.supportsInterface(INTERFACE_ID_LSP17Extension)).to.be + .true; // LSP17Extension interface ID + expect(await context.tokenCallbacks.supportsInterface('0x01ffc9a7')).to.be.true; // ERC721Holder interface ID + expect(await context.tokenCallbacks.supportsInterface('0x4e2312e0')).to.be.true; // ERC1155Holder interface ID + }); + }); +}); From 247899117258dad2564d4ee339eab9e79c60c82d Mon Sep 17 00:00:00 2001 From: CJ42 Date: Thu, 24 Oct 2024 10:17:35 +0200 Subject: [PATCH 62/94] chore: update incorrect version for LSP17 package in `package-lock.json` --- package-lock.json | 97 +---------------------------------------------- 1 file changed, 1 insertion(+), 96 deletions(-) diff --git a/package-lock.json b/package-lock.json index 68ed47242..e68fbca68 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9333,101 +9333,6 @@ "typechain": "8.x" } }, - "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { - "version": "10.2.1", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" - } - }, - "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { - "version": "6.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "^10.2.1", - "ethers": "^5.4.7", - "hardhat": "^2.9.9", - "typechain": "^8.1.1" - } - }, - "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hardhat-packager/node_modules/ethers": { - "version": "5.7.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", "dev": true, @@ -18858,4 +18763,4 @@ } } } -} \ No newline at end of file +} From 35713557e132c7c347ddd380dfb19a500a621ec4 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Mon, 14 Oct 2024 11:23:54 +0300 Subject: [PATCH 63/94] feat: Add LSP7Votes and LSP8Votes extensions --- .../contracts/extensions/LSP7Votes.sol | 372 ++++++++++++++++++ .../contracts/extensions/LSP8Votes.sol | 42 ++ 2 files changed, 414 insertions(+) create mode 100644 packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol create mode 100644 packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol new file mode 100644 index 000000000..29310bdd6 --- /dev/null +++ b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol @@ -0,0 +1,372 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "../LSP7DigitalAsset.sol"; +import "@openzeppelin/contracts/interfaces/IERC5805.sol"; +import "@openzeppelin/contracts/utils/math/Math.sol"; +import "@openzeppelin/contracts/utils/math/SafeCast.sol"; +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; +import "@openzeppelin/contracts/utils/Counters.sol"; + +/** + * @dev Extension of LSP7 to support Compound-like voting and delegation. This version is more generic than Compound's, + * and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1. + * + * This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either + * by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting + * power can be queried through the public accessors {getVotes} and {getPastVotes}. + * + * By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it + * requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked. + */ +abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { + using Counters for Counters.Counter; + mapping(address => Counters.Counter) private _nonces; + + struct Checkpoint { + uint32 fromBlock; + uint224 votes; + } + + bytes32 private constant _DELEGATION_TYPEHASH = + keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); + + mapping(address => address) private _delegates; + mapping(address => Checkpoint[]) private _checkpoints; + Checkpoint[] private _totalSupplyCheckpoints; + + /** + * @dev Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting). + */ + function clock() public view virtual override returns (uint48) { + return SafeCast.toUint48(block.number); + } + + /** + * @dev Description of the clock + */ + // solhint-disable-next-line func-name-mixedcase + function CLOCK_MODE() public view virtual override returns (string memory) { + // Check that the clock was not modified + require(clock() == block.number, "LSP7Votes: broken clock mode"); + return "mode=blocknumber&from=default"; + } + + // solhint-disable-next-line func-name-mixedcase + function DOMAIN_SEPARATOR() external view returns (bytes32) { + return _domainSeparatorV4(); + } + + /** + * @dev Get the `pos`-th checkpoint for `account`. + */ + function checkpoints( + address account, + uint32 pos + ) public view virtual returns (Checkpoint memory) { + return _checkpoints[account][pos]; + } + + /** + * @dev Get number of checkpoints for `account`. + */ + function numCheckpoints( + address account + ) public view virtual returns (uint32) { + return SafeCast.toUint32(_checkpoints[account].length); + } + + /** + * @dev Get the address `account` is currently delegating to. + */ + function delegates( + address account + ) public view virtual override returns (address) { + return _delegates[account]; + } + + /** + * @dev Gets the current votes balance for `account` + */ + function getVotes( + address account + ) public view virtual override returns (uint256) { + uint256 pos = _checkpoints[account].length; + unchecked { + return pos == 0 ? 0 : _checkpoints[account][pos - 1].votes; + } + } + + /** + * @dev Retrieve the number of votes for `account` at the end of `timepoint`. + * + * Requirements: + * + * - `timepoint` must be in the past + */ + function getPastVotes( + address account, + uint256 timepoint + ) public view virtual override returns (uint256) { + require(timepoint < clock(), "LSP7Votes: future lookup"); + return _checkpointsLookup(_checkpoints[account], timepoint); + } + + /** + * @dev Retrieve the `totalSupply` at the end of `timepoint`. Note, this value is the sum of all balances. + * It is NOT the sum of all the delegated votes! + * + * Requirements: + * + * - `timepoint` must be in the past + */ + function getPastTotalSupply( + uint256 timepoint + ) public view virtual override returns (uint256) { + require(timepoint < clock(), "LSP7Votes: future lookup"); + return _checkpointsLookup(_totalSupplyCheckpoints, timepoint); + } + + /** + * @dev Lookup a value in a list of (sorted) checkpoints. + */ + function _checkpointsLookup( + Checkpoint[] storage ckpts, + uint256 timepoint + ) private view returns (uint256) { + // We run a binary search to look for the last (most recent) checkpoint taken before (or at) `timepoint`. + // + // Initially we check if the block is recent to narrow the search range. + // During the loop, the index of the wanted checkpoint remains in the range [low-1, high). + // With each iteration, either `low` or `high` is moved towards the middle of the range to maintain the invariant. + // - If the middle checkpoint is after `timepoint`, we look in [low, mid) + // - If the middle checkpoint is before or equal to `timepoint`, we look in [mid+1, high) + // Once we reach a single value (when low == high), we've found the right checkpoint at the index high-1, if not + // out of bounds (in which case we're looking too far in the past and the result is 0). + // Note that if the latest checkpoint available is exactly for `timepoint`, we end up with an index that is + // past the end of the array, so we technically don't find a checkpoint after `timepoint`, but it works out + // the same. + uint256 length = ckpts.length; + + uint256 low = 0; + uint256 high = length; + + if (length > 5) { + uint256 mid = length - Math.sqrt(length); + if (_unsafeAccess(ckpts, mid).fromBlock > timepoint) { + high = mid; + } else { + low = mid + 1; + } + } + + while (low < high) { + uint256 mid = Math.average(low, high); + if (_unsafeAccess(ckpts, mid).fromBlock > timepoint) { + high = mid; + } else { + low = mid + 1; + } + } + + unchecked { + return high == 0 ? 0 : _unsafeAccess(ckpts, high - 1).votes; + } + } + + /** + * @dev Delegate votes from the sender to `delegatee`. + */ + function delegate(address delegatee) public virtual override { + _delegate(msg.sender, delegatee); + } + + /** + * @dev Delegates votes from signer to `delegatee` + */ + function delegateBySig( + address delegatee, + uint256 nonce, + uint256 expiry, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual override { + require(block.timestamp <= expiry, "LSP7Votes: signature expired"); + address signer = ECDSA.recover( + _hashTypedDataV4( + keccak256( + abi.encode(_DELEGATION_TYPEHASH, delegatee, nonce, expiry) + ) + ), + v, + r, + s + ); + require(nonce == _useNonce(signer), "LSP7Votes: invalid nonce"); + _delegate(signer, delegatee); + } + + /** + * @dev Maximum token supply. Defaults to `type(uint224).max` (2^224^ - 1). + */ + function _maxSupply() internal view virtual returns (uint224) { + return type(uint224).max; + } + + /** + * @dev Transfers, mints, or burns voting units. To register a mint, `from` should be zero. To register a burn, `to` + * should be zero. Total supply of voting units will be adjusted with mints and burns. + */ + function _transferVotingUnits( + address from, + address to, + uint256 amount + ) internal virtual { + if (from == address(0)) { + _writeCheckpoint(_totalSupplyCheckpoints, _add, amount); + } + if (to == address(0)) { + _writeCheckpoint(_totalSupplyCheckpoints, _subtract, amount); + } + _moveVotingPower(delegates(from), delegates(to), amount); + } + + /** + * @dev Move voting power when tokens are transferred. + * + * Emits a {IVotes-DelegateVotesChanged} event. + */ + function _update( + address from, + address to, + uint256 value, + bool force, + bytes memory data + ) internal virtual override { + super._update(from, to, value, force, data); + if (from == address(0)) { + uint256 supply = totalSupply(); + uint256 cap = _maxSupply(); + require( + supply <= cap, + "LSP7Votes: total supply risks overflowing votes" + ); + } + _transferVotingUnits(from, to, value); + } + + /** + * @dev Change delegation for `delegator` to `delegatee`. + * + * Emits events {IVotes-DelegateChanged} and {IVotes-DelegateVotesChanged}. + */ + function _delegate(address delegator, address delegatee) internal virtual { + address currentDelegate = delegates(delegator); + uint256 delegatorBalance = balanceOf(delegator); + _delegates[delegator] = delegatee; + + emit DelegateChanged(delegator, currentDelegate, delegatee); + + _moveVotingPower(currentDelegate, delegatee, delegatorBalance); + } + + function _moveVotingPower( + address src, + address dst, + uint256 amount + ) private { + if (src != dst && amount > 0) { + if (src != address(0)) { + (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint( + _checkpoints[src], + _subtract, + amount + ); + emit DelegateVotesChanged(src, oldWeight, newWeight); + } + + if (dst != address(0)) { + (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint( + _checkpoints[dst], + _add, + amount + ); + emit DelegateVotesChanged(dst, oldWeight, newWeight); + } + } + } + + function _writeCheckpoint( + Checkpoint[] storage ckpts, + function(uint256, uint256) view returns (uint256) op, + uint256 delta + ) private returns (uint256 oldWeight, uint256 newWeight) { + uint256 pos = ckpts.length; + + unchecked { + Checkpoint memory oldCkpt = pos == 0 + ? Checkpoint(0, 0) + : _unsafeAccess(ckpts, pos - 1); + + oldWeight = oldCkpt.votes; + newWeight = op(oldWeight, delta); + + if (pos > 0 && oldCkpt.fromBlock == clock()) { + _unsafeAccess(ckpts, pos - 1).votes = SafeCast.toUint224( + newWeight + ); + } else { + ckpts.push( + Checkpoint({ + fromBlock: SafeCast.toUint32(clock()), + votes: SafeCast.toUint224(newWeight) + }) + ); + } + } + } + + function _add(uint256 a, uint256 b) private pure returns (uint256) { + return a + b; + } + + function _subtract(uint256 a, uint256 b) private pure returns (uint256) { + return a - b; + } + + /** + * @dev Access an element of the array without performing bounds check. The position is assumed to be within bounds. + */ + function _unsafeAccess( + Checkpoint[] storage ckpts, + uint256 pos + ) private pure returns (Checkpoint storage result) { + assembly { + mstore(0, ckpts.slot) + result.slot := add(keccak256(0, 0x20), pos) + } + } + + /** + * @dev Consumes a nonce. + * + * Returns the current value and increments nonce. + */ + function _useNonce( + address owner + ) internal virtual returns (uint256 current) { + Counters.Counter storage nonce = _nonces[owner]; + current = nonce.current(); + nonce.increment(); + } + + /** + * @dev Reads the current nonce + */ + function nonces(address owner) public view virtual returns (uint256) { + return _nonces[owner].current(); + } +} diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol new file mode 100644 index 000000000..39caa9395 --- /dev/null +++ b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "../LSP8IdentifiableDigitalAsset.sol"; +import "@openzeppelin/contracts/governance/utils/Votes.sol"; + +/** + * @dev Extension of LSP8 to support voting and delegation as implemented by {Votes}, where each individual NFT counts + * as 1 vote unit. + * + * Tokens do not count as votes until they are delegated, because votes must be tracked which incurs an additional cost + * on every transfer. Token holders can either delegate to a trusted representative who will decide how to make use of + * the votes in governance decisions, or they can delegate to themselves to be their own representative. + */ +abstract contract LSP8Votes is LSP8IdentifiableDigitalAsset, Votes { + /** + * @dev Adjusts votes when tokens are transferred. + * + * Emits a {IVotes-DelegateVotesChanged} event. + */ + function _afterTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes memory data + ) internal virtual override { + _transferVotingUnits(from, to, 1); + super._afterTokenTransfer(from, to, tokenId, data); + } + + /** + * @dev Returns the balance of `account`. + * + * WARNING: Overriding this function will likely result in incorrect vote tracking. + */ + function _getVotingUnits( + address account + ) internal view virtual override returns (uint256) { + return balanceOf(account); + } +} From a12d4cbf501e002b9a24fceb0437c3744ce58efa Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Mon, 14 Oct 2024 11:24:10 +0300 Subject: [PATCH 64/94] test: Add LSP8Votes tests --- .../contracts/Mocks/MyGovernor.sol | 65 +++++++ .../contracts/Mocks/MyVotingNFT.sol | 25 +++ .../lsp8-contracts/tests/LSP8Votes.test.ts | 176 ++++++++++++++++++ 3 files changed, 266 insertions(+) create mode 100644 packages/lsp8-contracts/contracts/Mocks/MyGovernor.sol create mode 100644 packages/lsp8-contracts/contracts/Mocks/MyVotingNFT.sol create mode 100644 packages/lsp8-contracts/tests/LSP8Votes.test.ts diff --git a/packages/lsp8-contracts/contracts/Mocks/MyGovernor.sol b/packages/lsp8-contracts/contracts/Mocks/MyGovernor.sol new file mode 100644 index 000000000..d12aac202 --- /dev/null +++ b/packages/lsp8-contracts/contracts/Mocks/MyGovernor.sol @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/governance/Governor.sol"; +import "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol"; +import "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol"; +import "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol"; +import "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol"; + +contract MyGovernor is + Governor, + GovernorSettings, + GovernorCountingSimple, + GovernorVotes, + GovernorVotesQuorumFraction +{ + constructor( + IVotes _token + ) + Governor("MyGovernor") + GovernorSettings(7200 /* 1 day */, 7200 /* 1 day */, 1) + GovernorVotes(_token) + GovernorVotesQuorumFraction(1) + {} + + // The following functions are overrides required by Solidity. + + function votingDelay() + public + view + override(IGovernor, GovernorSettings) + returns (uint256) + { + return super.votingDelay(); + } + + function votingPeriod() + public + view + override(IGovernor, GovernorSettings) + returns (uint256) + { + return super.votingPeriod(); + } + + function quorum( + uint256 blockNumber + ) + public + view + override(IGovernor, GovernorVotesQuorumFraction) + returns (uint256) + { + return super.quorum(blockNumber); + } + + function proposalThreshold() + public + view + override(Governor, GovernorSettings) + returns (uint256) + { + return super.proposalThreshold(); + } +} diff --git a/packages/lsp8-contracts/contracts/Mocks/MyVotingNFT.sol b/packages/lsp8-contracts/contracts/Mocks/MyVotingNFT.sol new file mode 100644 index 000000000..2f2e46012 --- /dev/null +++ b/packages/lsp8-contracts/contracts/Mocks/MyVotingNFT.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "../extensions/LSP8Votes.sol"; + +/** + * @dev Mock of an LSP8Votes token + */ +contract MyVotingNFT is LSP8Votes { + constructor() + LSP8IdentifiableDigitalAsset( + "MyVotingToken", + "MYVTKN", + msg.sender, + 0, + 1 + ) + EIP712("MyVotingToken", "1") + {} + + function mint(address rec, bytes32 id) public { + _mint(rec, id, true, ""); + } +} diff --git a/packages/lsp8-contracts/tests/LSP8Votes.test.ts b/packages/lsp8-contracts/tests/LSP8Votes.test.ts new file mode 100644 index 000000000..a5474fd89 --- /dev/null +++ b/packages/lsp8-contracts/tests/LSP8Votes.test.ts @@ -0,0 +1,176 @@ +import { expect } from 'chai'; +import { ethers } from 'hardhat'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { MyVotingNFT, MyVotingNFT__factory, MyGovernor, MyGovernor__factory } from '../types'; +import { time, mine } from '@nomicfoundation/hardhat-network-helpers'; + +describe('Comprehensive Governor and NFT Tests', () => { + let nft: MyVotingNFT; + let governor: MyGovernor; + let owner: SignerWithAddress; + let proposer: SignerWithAddress; + let voter1: SignerWithAddress; + let voter2: SignerWithAddress; + let voter3: SignerWithAddress; + let randomEOA: SignerWithAddress; + + const VOTING_DELAY = 7200; // 1 day in blocks + const VOTING_PERIOD = 7200; // 1 day in blocks + const PROPOSAL_THRESHOLD = 1; // 1 NFT + const QUORUM_FRACTION = 1; // 1% + + beforeEach(async () => { + [owner, proposer, voter1, voter2, voter3, randomEOA] = await ethers.getSigners(); + + nft = await new MyVotingNFT__factory(owner).deploy(); + governor = await new MyGovernor__factory(owner).deploy(nft.target); + + // Mint initial NFTs + await nft.mint(proposer.address, ethers.id('1')); + await nft.mint(proposer.address, ethers.id('2')); + await nft.mint(voter1.address, ethers.id('3')); + await nft.mint(voter2.address, ethers.id('4')); + await nft.mint(voter2.address, ethers.id('5')); + await nft.mint(voter3.address, ethers.id('6')); + await nft.mint(voter3.address, ethers.id('7')); + await nft.mint(voter3.address, ethers.id('8')); + }); + + describe('NFT and Governor Setup', () => { + it('should have correct initial settings', async () => { + expect(await governor.votingDelay()).to.equal(VOTING_DELAY); + expect(await governor.votingPeriod()).to.equal(VOTING_PERIOD); + expect(await governor.proposalThreshold()).to.equal(PROPOSAL_THRESHOLD); + expect(await governor.token()).to.equal(nft.target); + }); + + it('should have correct initial NFT distribution', async () => { + expect(await nft.balanceOf(proposer.address)).to.equal(2); + expect(await nft.balanceOf(voter1.address)).to.equal(1); + expect(await nft.balanceOf(voter2.address)).to.equal(2); + expect(await nft.balanceOf(voter3.address)).to.equal(3); + }); + + it('should have zero initial voting power for all accounts', async () => { + expect(await nft.getVotes(proposer.address)).to.equal(0); + expect(await nft.getVotes(voter1.address)).to.equal(0); + expect(await nft.getVotes(voter2.address)).to.equal(0); + expect(await nft.getVotes(voter3.address)).to.equal(0); + }); + }); + + describe('Proposal Creation', () => { + it('should fail to propose when balance is below threshold', async () => { + await expect( + governor.connect(voter1).propose([randomEOA.address], [0], ['0xaabbccdd'], 'Proposal #1'), + ).to.be.revertedWith('Governor: proposer votes below proposal threshold'); + }); + + it('should fail to propose when balance is sufficient but not delegated', async () => { + await expect( + governor.connect(proposer).propose([randomEOA.address], [0], ['0xaabbccdd'], 'Proposal #1'), + ).to.be.revertedWith('Governor: proposer votes below proposal threshold'); + }); + + it('should successfully propose after delegating', async () => { + await nft.connect(proposer).delegate(proposer.address); + + await expect( + governor.connect(proposer).propose([randomEOA.address], [0], ['0xaabbccdd'], 'Proposal #1'), + ).to.emit(governor, 'ProposalCreated'); + }); + }); + + describe('Voting Power and Delegation', () => { + it('should correctly report voting power after delegation', async () => { + await nft.connect(voter1).delegate(voter1.address); + expect(await nft.getVotes(voter1.address)).to.equal(1); + }); + + it('should correctly transfer voting power when transferring NFTs', async () => { + await nft.connect(voter1).delegate(voter1.address); + await nft + .connect(voter1) + .transfer(voter1.address, voter2.address, ethers.id('3'), true, '0x'); + + expect(await nft.getVotes(voter1.address)).to.equal(0); + expect(await nft.balanceOf(voter2.address)).to.equal(3); + }); + + it('should correctly report delegates', async () => { + await nft.connect(voter1).delegate(voter2.address); + expect(await nft.delegates(voter1.address)).to.equal(voter2.address); + }); + }); + + describe('Voting Process and Proposal Lifecycle', () => { + let proposalId; + + beforeEach(async () => { + // Setup for voting tests + await nft.connect(proposer).delegate(proposer.address); + await nft.connect(voter1).delegate(voter1.address); + await nft.connect(voter2).delegate(voter2.address); + await nft.connect(voter3).delegate(voter3.address); + + proposalId = await governor + .connect(proposer) + .propose.staticCall([randomEOA.address], [0], ['0xaabbccdd'], 'Proposal #1'); + + await governor + .connect(proposer) + .propose([randomEOA.address], [0], ['0xaabbccdd'], 'Proposal #1'); + }); + + it('should correctly count votes and update quorum', async () => { + await mine(VOTING_DELAY + 1); + await governor.connect(voter1).castVote(proposalId, 1); // Yes vote + await governor.connect(voter2).castVote(proposalId, 0); // No vote + await governor.connect(voter3).castVote(proposalId, 2); // Abstain + + const proposal = await governor.proposalVotes(proposalId); + expect(proposal.forVotes).to.equal(1); + expect(proposal.againstVotes).to.equal(2); + expect(proposal.abstainVotes).to.equal(3); + }); + + it('should correctly determine if quorum is reached', async () => { + const totalSupply = await nft.totalSupply(); + const quorumRequired = (totalSupply * BigInt(QUORUM_FRACTION)) / BigInt(100); + + await mine(VOTING_DELAY + 1); + await governor.connect(voter3).castVote(proposalId, 1); // This should meet quorum + + expect(await governor.quorum((await time.latestBlock()) - 1)).to.be.gte(quorumRequired); + }); + }); + + describe('Advanced Voting Power Scenarios', () => { + it('should correctly calculate voting power at past timepoints', async () => { + await nft.connect(voter1).delegate(voter1.address); + await mine(); // Mine a block to record the delegation + + const blockNumber1 = await ethers.provider.getBlockNumber(); + expect(await nft.getPastVotes(voter1.address, blockNumber1 - 1)).to.equal(1); + + await nft.mint(voter1.address, ethers.id('9')); + await mine(); // Mine a block to record the mint + + const blockNumber2 = await ethers.provider.getBlockNumber(); + expect(await nft.getPastVotes(voter1.address, blockNumber2 - 1)).to.equal(2); + }); + + it('should correctly report past total supply', async () => { + const initialSupply = await nft.totalSupply(); + const blockNumber1 = await ethers.provider.getBlockNumber(); + + await nft.mint(voter1.address, ethers.id('10')); + await mine(); // Mine a block to record the mint + + const blockNumber2 = await ethers.provider.getBlockNumber(); + + expect(await nft.getPastTotalSupply(blockNumber1)).to.equal(initialSupply); + expect(await nft.getPastTotalSupply(blockNumber2 - 1)).to.equal(initialSupply + BigInt(1)); + }); + }); +}); From 3509bd39e65ee48e0f5fb9cd622933764d880f88 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Mon, 14 Oct 2024 11:24:20 +0300 Subject: [PATCH 65/94] test: Add LSP7Votes test --- .../contracts/Mocks/MyGovernor.sol | 65 +++++ .../contracts/Mocks/MyVotingToken.sol | 19 ++ .../lsp7-contracts/tests/LSP7Votes.test.ts | 257 ++++++++++++++++++ 3 files changed, 341 insertions(+) create mode 100644 packages/lsp7-contracts/contracts/Mocks/MyGovernor.sol create mode 100644 packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol create mode 100644 packages/lsp7-contracts/tests/LSP7Votes.test.ts diff --git a/packages/lsp7-contracts/contracts/Mocks/MyGovernor.sol b/packages/lsp7-contracts/contracts/Mocks/MyGovernor.sol new file mode 100644 index 000000000..04750444b --- /dev/null +++ b/packages/lsp7-contracts/contracts/Mocks/MyGovernor.sol @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/governance/Governor.sol"; +import "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol"; +import "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol"; +import "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol"; +import "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol"; + +contract MyGovernor is + Governor, + GovernorSettings, + GovernorCountingSimple, + GovernorVotes, + GovernorVotesQuorumFraction +{ + constructor( + IVotes _token + ) + Governor("MyGovernor") + GovernorSettings(7200 /* 1 day */, 7200 /* 1 day */, 1e18) + GovernorVotes(_token) + GovernorVotesQuorumFraction(1) + {} + + // The following functions are overrides required by Solidity. + + function votingDelay() + public + view + override(IGovernor, GovernorSettings) + returns (uint256) + { + return super.votingDelay(); + } + + function votingPeriod() + public + view + override(IGovernor, GovernorSettings) + returns (uint256) + { + return super.votingPeriod(); + } + + function quorum( + uint256 blockNumber + ) + public + view + override(IGovernor, GovernorVotesQuorumFraction) + returns (uint256) + { + return super.quorum(blockNumber); + } + + function proposalThreshold() + public + view + override(Governor, GovernorSettings) + returns (uint256) + { + return super.proposalThreshold(); + } +} diff --git a/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol b/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol new file mode 100644 index 000000000..5331b0b55 --- /dev/null +++ b/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "../extensions/LSP7Votes.sol"; + +/** + * @dev Mock of an LSP7Votes token + */ +contract MyVotingToken is LSP7Votes { + constructor() + LSP7DigitalAsset("MyVotingToken", "MYVTKN", msg.sender, 0, false) + EIP712("MyVotingToken", "1") + {} + + function mint(address rec, uint256 amount) public { + _mint(rec, amount, true, ""); + } +} diff --git a/packages/lsp7-contracts/tests/LSP7Votes.test.ts b/packages/lsp7-contracts/tests/LSP7Votes.test.ts new file mode 100644 index 000000000..ded8237ac --- /dev/null +++ b/packages/lsp7-contracts/tests/LSP7Votes.test.ts @@ -0,0 +1,257 @@ +import { expect } from 'chai'; +import { ethers } from 'hardhat'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; +import { MyVotingToken, MyVotingToken__factory, MyGovernor, MyGovernor__factory } from '../types'; +import { time, mine } from '@nomicfoundation/hardhat-network-helpers'; +import { bigint } from 'hardhat/internal/core/params/argumentTypes'; + +describe('Comprehensive Governor and Token Tests', () => { + let token: MyVotingToken; + let governor: MyGovernor; + let owner: SignerWithAddress; + let proposer: SignerWithAddress; + let voter1: SignerWithAddress; + let voter2: SignerWithAddress; + let voter3: SignerWithAddress; + let randomEOA: SignerWithAddress; + + const VOTING_DELAY = 7200; // 1 day in blocks + const VOTING_PERIOD = 7200; // 1 day in blocks + const PROPOSAL_THRESHOLD = ethers.parseEther('1'); // 1 full unit of token + const QUORUM_FRACTION = 1; // 1% + + beforeEach(async () => { + [owner, proposer, voter1, voter2, voter3, randomEOA] = await ethers.getSigners(); + + token = await new MyVotingToken__factory(owner).deploy(); + governor = await new MyGovernor__factory(owner).deploy(token.target); + + // Mint initial tokens + await token.mint(proposer.address, PROPOSAL_THRESHOLD * BigInt(2)); + await token.mint(voter1.address, ethers.parseEther('10')); + await token.mint(voter2.address, ethers.parseEther('20')); + await token.mint(voter3.address, ethers.parseEther('30')); + }); + + describe('Token and Governor Setup', () => { + it('should have correct initial settings', async () => { + expect(await governor.votingDelay()).to.equal(VOTING_DELAY); + expect(await governor.votingPeriod()).to.equal(VOTING_PERIOD); + expect(await governor.proposalThreshold()).to.equal(PROPOSAL_THRESHOLD); + expect(await governor.token()).to.equal(token.target); + }); + + it('should have correct initial token distribution', async () => { + expect(await token.balanceOf(proposer.address)).to.equal(PROPOSAL_THRESHOLD * BigInt(2)); + expect(await token.balanceOf(voter1.address)).to.equal(ethers.parseEther('10')); + expect(await token.balanceOf(voter2.address)).to.equal(ethers.parseEther('20')); + expect(await token.balanceOf(voter3.address)).to.equal(ethers.parseEther('30')); + }); + + it('should have zero initial voting power for all accounts', async () => { + expect(await token.getVotes(proposer.address)).to.equal(0); + expect(await token.getVotes(voter1.address)).to.equal(0); + expect(await token.getVotes(voter2.address)).to.equal(0); + expect(await token.getVotes(voter3.address)).to.equal(0); + }); + }); + + describe('Proposal Creation', () => { + it('should fail to propose when balance is below threshold', async () => { + await expect( + governor.connect(voter1).propose([randomEOA.address], [0], ['0xaabbccdd'], 'Proposal #1'), + ).to.be.revertedWith('Governor: proposer votes below proposal threshold'); + }); + + it('should fail to propose when balance is sufficient but not delegated', async () => { + await expect( + governor.connect(proposer).propose([randomEOA.address], [0], ['0xaabbccdd'], 'Proposal #1'), + ).to.be.revertedWith('Governor: proposer votes below proposal threshold'); + }); + + it('should successfully propose after delegating', async () => { + await token.connect(proposer).delegate(proposer.address); + + await expect( + governor.connect(proposer).propose([randomEOA.address], [0], ['0xaabbccdd'], 'Proposal #1'), + ).to.emit(governor, 'ProposalCreated'); + }); + + it('should fail to propose with empty proposal', async () => { + await token.connect(proposer).delegate(proposer.address); + + await expect( + governor.connect(proposer).propose([], [], [], 'Empty Proposal'), + ).to.be.revertedWith('Governor: empty proposal'); + }); + }); + + describe('Voting Power and Delegation', () => { + it('should correctly report voting power after delegation', async () => { + await token.connect(voter1).delegate(voter1.address); + expect(await token.getVotes(voter1.address)).to.equal(ethers.parseEther('10')); + }); + + it('should correctly transfer voting power when transferring tokens', async () => { + await token.connect(voter1).delegate(voter1.address); + await token + .connect(voter1) + .transfer(voter1.address, voter2.address, ethers.parseEther('5'), true, '0x'); + + expect(await token.getVotes(voter1.address)).to.equal(ethers.parseEther('5')); + expect(await token.balanceOf(voter2.address)).to.equal(ethers.parseEther('25')); + }); + + it('should correctly report delegates', async () => { + await token.connect(voter1).delegate(voter2.address); + expect(await token.delegates(voter1.address)).to.equal(voter2.address); + }); + + it('should allow changing delegates', async () => { + await token.connect(voter1).delegate(voter2.address); + await token.connect(voter1).delegate(voter3.address); + expect(await token.delegates(voter1.address)).to.equal(voter3.address); + }); + + it('should update voting power when receiving tokens', async () => { + await token.connect(voter1).delegate(voter1.address); + await token + .connect(voter2) + .transfer(voter2.address, voter1.address, ethers.parseEther('5'), true, '0x'); + expect(await token.getVotes(voter1.address)).to.equal(ethers.parseEther('15')); + }); + }); + + describe('Voting Process and Proposal Lifecycle', () => { + let proposalId; + + beforeEach(async () => { + // Setup for voting tests + await token.connect(proposer).delegate(proposer.address); + await token.connect(voter1).delegate(voter1.address); + await token.connect(voter2).delegate(voter2.address); + await token.connect(voter3).delegate(voter3.address); + + proposalId = await governor + .connect(proposer) + .propose.staticCall([randomEOA.address], [0], ['0xaabbccdd'], 'Proposal #1'); + + await governor + .connect(proposer) + .propose([randomEOA.address], [0], ['0xaabbccdd'], 'Proposal #1'); + }); + + it('should not allow voting before voting delay has passed', async () => { + await expect(governor.connect(voter1).castVote(proposalId, 1)).to.be.revertedWith( + 'Governor: vote not currently active', + ); + }); + + it('should allow voting after voting delay has passed', async () => { + await mine(VOTING_DELAY + 1); + await expect(governor.connect(voter1).castVote(proposalId, 1)).to.emit(governor, 'VoteCast'); + }); + + it('should correctly count votes and update quorum', async () => { + await mine(VOTING_DELAY + 1); + await governor.connect(voter1).castVote(proposalId, 1); // Yes vote + await governor.connect(voter2).castVote(proposalId, 0); // No vote + await governor.connect(voter3).castVote(proposalId, 2); // Abstain + + const proposal = await governor.proposalVotes(proposalId); + expect(proposal.forVotes).to.equal(ethers.parseEther('10')); + expect(proposal.againstVotes).to.equal(ethers.parseEther('20')); + expect(proposal.abstainVotes).to.equal(ethers.parseEther('30')); + }); + + it('should not allow voting after voting period has ended', async () => { + await mine(VOTING_DELAY + VOTING_PERIOD + 1); + await expect(governor.connect(voter1).castVote(proposalId, 1)).to.be.revertedWith( + 'Governor: vote not currently active', + ); + }); + + it('should correctly determine if quorum is reached', async () => { + const totalSupply = await token.totalSupply(); + const quorumRequired = (totalSupply * BigInt(QUORUM_FRACTION)) / BigInt(100); + + await mine(VOTING_DELAY + 1); + await governor.connect(voter3).castVote(proposalId, 1); // This should meet quorum + + expect(await governor.quorum((await time.latestBlock()) - 1)).to.be.lte(quorumRequired); + }); + + it('should allow proposal execution only after voting period and timelock', async () => { + await mine(VOTING_DELAY + 1); + await governor.connect(voter3).castVote(proposalId, 1); // Ensure quorum and pass + + // Try to execute immediately after voting period + await expect( + governor.execute([randomEOA.address], [0], ['0xaabbccdd'], ethers.id('Proposal #1')), + ).to.be.revertedWith('Governor: proposal not successful'); + + // Move past timelock period + await mine(await governor.votingPeriod()); + + // Now execution should succeed + await expect( + governor.execute([randomEOA.address], [0], ['0xaabbccdd'], ethers.id('Proposal #1')), + ).to.emit(governor, 'ProposalExecuted'); + }); + + it('should not allow double voting', async () => { + await mine(VOTING_DELAY + 1); + await governor.connect(voter1).castVote(proposalId, 1); + await expect(governor.connect(voter1).castVote(proposalId, 1)).to.be.revertedWith( + 'GovernorVotingSimple: vote already cast', + ); + }); + }); + + describe('Advanced Voting Power Scenarios', () => { + it('should correctly calculate voting power at past timepoints', async () => { + await token.connect(voter1).delegate(voter1.address); + await mine(); // Mine a block to record the delegation + + const blockNumber1 = await ethers.provider.getBlockNumber(); + expect(await token.getPastVotes(voter1.address, blockNumber1 - 1)).to.equal( + ethers.parseEther('10'), + ); + + await token.mint(voter1.address, ethers.parseEther('10')); + await mine(); // Mine a block to record the mint + + const blockNumber2 = await ethers.provider.getBlockNumber(); + expect(await token.getPastVotes(voter1.address, blockNumber2 - 1)).to.equal( + ethers.parseEther('20'), + ); + }); + + it('should correctly report past total supply', async () => { + const initialSupply = await token.totalSupply(); + const blockNumber1 = await ethers.provider.getBlockNumber(); + + await token.mint(voter1.address, ethers.parseEther('100')); + await mine(); // Mine a block to record the mint + + const blockNumber2 = await ethers.provider.getBlockNumber(); + + expect(await token.getPastTotalSupply(blockNumber1)).to.equal(initialSupply); + expect(await token.getPastTotalSupply(blockNumber2 - 1)).to.equal( + initialSupply + ethers.parseEther('100'), + ); + }); + + it('should not allow querying future timepoints', async () => { + const currentBlock = await ethers.provider.getBlockNumber(); + const futureBlock = currentBlock + 1000; + + await expect(token.getPastVotes(voter1.address, futureBlock)).to.be.revertedWith( + 'LSP7Votes: future lookup', + ); + await expect(token.getPastTotalSupply(futureBlock)).to.be.revertedWith( + 'LSP7Votes: future lookup', + ); + }); + }); +}); From a624569bf3e54c5fa57c3b00b69338707ecdf223 Mon Sep 17 00:00:00 2001 From: YamenMerhi Date: Sun, 3 Nov 2024 13:01:44 +0300 Subject: [PATCH 66/94] chore: resolver linter issues --- .../LSP7DigitalAssetInitAbstract.sol | 2 +- .../contracts/Mocks/MyGovernor.sol | 22 ++++++++++++++----- .../contracts/Mocks/MyVotingToken.sol | 3 ++- .../contracts/extensions/LSP7Votes.sol | 16 ++++++++------ .../contracts/Mocks/MyGovernor.sol | 22 ++++++++++++++----- .../contracts/Mocks/MyVotingNFT.sol | 6 ++++- .../contracts/extensions/LSP8Votes.sol | 6 +++-- 7 files changed, 55 insertions(+), 22 deletions(-) diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol index ab256ade1..c9fa9ea94 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol @@ -136,7 +136,7 @@ abstract contract LSP7DigitalAssetInitAbstract is * * 2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. */ - // solhint-disable-next-line no-complex-fallback + // solhint-disable no-complex-fallback fallback( bytes calldata callData ) external payable virtual returns (bytes memory) { diff --git a/packages/lsp7-contracts/contracts/Mocks/MyGovernor.sol b/packages/lsp7-contracts/contracts/Mocks/MyGovernor.sol index 04750444b..18b95ce10 100644 --- a/packages/lsp7-contracts/contracts/Mocks/MyGovernor.sol +++ b/packages/lsp7-contracts/contracts/Mocks/MyGovernor.sol @@ -1,11 +1,23 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "@openzeppelin/contracts/governance/Governor.sol"; -import "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol"; -import "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol"; -import "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol"; -import "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol"; +import { + IGovernor, + Governor +} from "@openzeppelin/contracts/governance/Governor.sol"; +import { + GovernorSettings +} from "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol"; +import { + GovernorCountingSimple +} from "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol"; +import { + GovernorVotes, + IVotes +} from "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol"; +import { + GovernorVotesQuorumFraction +} from "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol"; contract MyGovernor is Governor, diff --git a/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol b/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol index 5331b0b55..28cb23ce1 100644 --- a/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol +++ b/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol @@ -2,7 +2,8 @@ pragma solidity ^0.8.0; -import "../extensions/LSP7Votes.sol"; +import {LSP7Votes, LSP7DigitalAsset} from "../extensions/LSP7Votes.sol"; +import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; /** * @dev Mock of an LSP7Votes token diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol index 29310bdd6..0253e1d1b 100644 --- a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol +++ b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol @@ -2,13 +2,13 @@ pragma solidity ^0.8.0; -import "../LSP7DigitalAsset.sol"; -import "@openzeppelin/contracts/interfaces/IERC5805.sol"; -import "@openzeppelin/contracts/utils/math/Math.sol"; -import "@openzeppelin/contracts/utils/math/SafeCast.sol"; -import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; -import "@openzeppelin/contracts/utils/Counters.sol"; +import {LSP7DigitalAsset} from "../LSP7DigitalAsset.sol"; +import {IERC5805} from "@openzeppelin/contracts/interfaces/IERC5805.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; +import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol"; +import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; +import {Counters} from "@openzeppelin/contracts/utils/Counters.sol"; /** * @dev Extension of LSP7 to support Compound-like voting and delegation. This version is more generic than Compound's, @@ -194,6 +194,7 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { bytes32 r, bytes32 s ) public virtual override { + // solhint-disable-next-line not-rely-on-time require(block.timestamp <= expiry, "LSP7Votes: signature expired"); address signer = ECDSA.recover( _hashTypedDataV4( @@ -344,6 +345,7 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { Checkpoint[] storage ckpts, uint256 pos ) private pure returns (Checkpoint storage result) { + // solhint-disable-next-line no-inline-assembly assembly { mstore(0, ckpts.slot) result.slot := add(keccak256(0, 0x20), pos) diff --git a/packages/lsp8-contracts/contracts/Mocks/MyGovernor.sol b/packages/lsp8-contracts/contracts/Mocks/MyGovernor.sol index d12aac202..8e7c91ee0 100644 --- a/packages/lsp8-contracts/contracts/Mocks/MyGovernor.sol +++ b/packages/lsp8-contracts/contracts/Mocks/MyGovernor.sol @@ -1,11 +1,23 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "@openzeppelin/contracts/governance/Governor.sol"; -import "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol"; -import "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol"; -import "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol"; -import "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol"; +import { + IGovernor, + Governor +} from "@openzeppelin/contracts/governance/Governor.sol"; +import { + GovernorSettings +} from "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol"; +import { + GovernorCountingSimple +} from "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol"; +import { + GovernorVotes, + IVotes +} from "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol"; +import { + GovernorVotesQuorumFraction +} from "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol"; contract MyGovernor is Governor, diff --git a/packages/lsp8-contracts/contracts/Mocks/MyVotingNFT.sol b/packages/lsp8-contracts/contracts/Mocks/MyVotingNFT.sol index 2f2e46012..c93a76e2d 100644 --- a/packages/lsp8-contracts/contracts/Mocks/MyVotingNFT.sol +++ b/packages/lsp8-contracts/contracts/Mocks/MyVotingNFT.sol @@ -2,7 +2,11 @@ pragma solidity ^0.8.0; -import "../extensions/LSP8Votes.sol"; +import { + LSP8Votes, + LSP8IdentifiableDigitalAsset +} from "../extensions/LSP8Votes.sol"; +import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; /** * @dev Mock of an LSP8Votes token diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol index 39caa9395..a0c88a05d 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol @@ -2,8 +2,10 @@ pragma solidity ^0.8.0; -import "../LSP8IdentifiableDigitalAsset.sol"; -import "@openzeppelin/contracts/governance/utils/Votes.sol"; +import { + LSP8IdentifiableDigitalAsset +} from "../LSP8IdentifiableDigitalAsset.sol"; +import {Votes} from "@openzeppelin/contracts/governance/utils/Votes.sol"; /** * @dev Extension of LSP8 to support voting and delegation as implemented by {Votes}, where each individual NFT counts From bd7c5ea104434f6932cf516af955d15caf1303f5 Mon Sep 17 00:00:00 2001 From: Maxime Date: Mon, 25 Nov 2024 12:43:38 +0000 Subject: [PATCH 67/94] refactor: add hook to delegate --- packages/lsp7-contracts/CHANGELOG.md | 20 +++--- packages/lsp7-contracts/constants.ts | 11 +++ .../contracts/LSP7Constants.sol | 6 ++ .../contracts/extensions/LSP7Votes.sol | 33 +++++++++ .../lsp7-contracts/tests/LSP7Votes.test.ts | 72 +++++++++++++++++-- 5 files changed, 124 insertions(+), 18 deletions(-) diff --git a/packages/lsp7-contracts/CHANGELOG.md b/packages/lsp7-contracts/CHANGELOG.md index 038dabeb6..1b099e1ae 100644 --- a/packages/lsp7-contracts/CHANGELOG.md +++ b/packages/lsp7-contracts/CHANGELOG.md @@ -59,32 +59,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp7-contracts-v0.15.0-rc.0...lsp7-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp7-contracts-v0.15.0-rc.0...lsp7-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp7-contracts-v0.15.0-rc.0...lsp7-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp7-contracts/constants.ts b/packages/lsp7-contracts/constants.ts index 5c74075b0..1734c8393 100644 --- a/packages/lsp7-contracts/constants.ts +++ b/packages/lsp7-contracts/constants.ts @@ -6,6 +6,16 @@ export const INTERFACE_ID_LSP7_PREVIOUS = { }; export const LSP7_TYPE_IDS = { + + + // keccak256('LSP7Tokens_DelegatorNotification') + LSP7Tokens_DelegatorNotification: + '0x997bd66a7e7823b09383ec7ce65fc306af29b8f82a45627f8efc0408475de016', + + // keccak256('LSP7Tokens_DelegateeNotification') + LSP7Tokens_DelegateeNotification: + '0x03fae98a28026f93c23e2c9438c2ef0faa101585127a89919d18f067d907b319', + // keccak256('LSP7Tokens_SenderNotification') LSP7Tokens_SenderNotification: '0x429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea', @@ -17,4 +27,5 @@ export const LSP7_TYPE_IDS = { // keccak256('LSP7Tokens_OperatorNotification') LSP7Tokens_OperatorNotification: '0x386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc', + }; diff --git a/packages/lsp7-contracts/contracts/LSP7Constants.sol b/packages/lsp7-contracts/contracts/LSP7Constants.sol index b56398da2..ab24c50fc 100644 --- a/packages/lsp7-contracts/contracts/LSP7Constants.sol +++ b/packages/lsp7-contracts/contracts/LSP7Constants.sol @@ -6,6 +6,12 @@ bytes4 constant _INTERFACEID_LSP7 = 0xc52d6008; // --- Token Hooks +// keccak256('LSP7Tokens_DelegatorNotification') +bytes32 constant _TYPEID_LSP7_DELEGATOR = 0x997bd66a7e7823b09383ec7ce65fc306af29b8f82a45627f8efc0408475de016; + +// keccak256('LSP7Tokens_DelegateeNotification') +bytes32 constant _TYPEID_LSP7_DELEGATEE = 0x03fae98a28026f93c23e2c9438c2ef0faa101585127a89919d18f067d907b319; + // keccak256('LSP7Tokens_SenderNotification') bytes32 constant _TYPEID_LSP7_TOKENSSENDER = 0x429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea; diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol index 0253e1d1b..23d987753 100644 --- a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol +++ b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol @@ -3,6 +3,8 @@ pragma solidity ^0.8.0; import {LSP7DigitalAsset} from "../LSP7DigitalAsset.sol"; +import { LSP1Utils } from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; +import { _TYPEID_LSP7_DELEGATOR, _TYPEID_LSP7_DELEGATEE } from "../LSP7Constants.sol"; import {IERC5805} from "@openzeppelin/contracts/interfaces/IERC5805.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol"; @@ -10,6 +12,8 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; import {Counters} from "@openzeppelin/contracts/utils/Counters.sol"; + + /** * @dev Extension of LSP7 to support Compound-like voting and delegation. This version is more generic than Compound's, * and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1. @@ -272,6 +276,35 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { emit DelegateChanged(delegator, currentDelegate, delegatee); _moveVotingPower(currentDelegate, delegatee, delegatorBalance); + + // Notify the delegator if it's not address(0) + if (delegator != address(0)) { + bytes memory delegatorNotificationData = abi.encode( + msg.sender, + delegatee, + delegatorBalance + ); + LSP1Utils.notifyUniversalReceiver( + delegator, + _TYPEID_LSP7_DELEGATOR, + delegatorNotificationData + ); + } + + // Only notify the new delegatee if it's not address(0) and if there's actual voting power + if (delegatee != address(0) && delegatorBalance > 0) { + bytes memory delegateeNotificationData = abi.encode( + msg.sender, + delegator, + delegatorBalance + ); + + LSP1Utils.notifyUniversalReceiver( + delegatee, + _TYPEID_LSP7_DELEGATEE, + delegateeNotificationData + ); + } } function _moveVotingPower( diff --git a/packages/lsp7-contracts/tests/LSP7Votes.test.ts b/packages/lsp7-contracts/tests/LSP7Votes.test.ts index ded8237ac..ae2465a58 100644 --- a/packages/lsp7-contracts/tests/LSP7Votes.test.ts +++ b/packages/lsp7-contracts/tests/LSP7Votes.test.ts @@ -3,7 +3,10 @@ import { ethers } from 'hardhat'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { MyVotingToken, MyVotingToken__factory, MyGovernor, MyGovernor__factory } from '../types'; import { time, mine } from '@nomicfoundation/hardhat-network-helpers'; -import { bigint } from 'hardhat/internal/core/params/argumentTypes'; +import { + LSP7_TYPE_IDS +} from '../constants'; + describe('Comprehensive Governor and Token Tests', () => { let token: MyVotingToken; @@ -120,13 +123,73 @@ describe('Comprehensive Governor and Token Tests', () => { .transfer(voter2.address, voter1.address, ethers.parseEther('5'), true, '0x'); expect(await token.getVotes(voter1.address)).to.equal(ethers.parseEther('15')); }); + + describe('Delegation Notifications', () => { + let mockUniversalReceiver; + + beforeEach(async () => { + const MockUniversalReceiver = await ethers.getContractFactory('MockUniversalReceiver'); + mockUniversalReceiver = await MockUniversalReceiver.deploy(); + }); + + it('should notify delegator with correct data format', async () => { + await voter1.setUniversalReceiver(mockUniversalReceiver.address); + + const expectedData = ethers.AbiCoder.defaultAbiCoder().encode( + ['address', 'address', 'uint256'], + [voter1.address, voter2.address, ethers.parseEther('10')] + ); + + await expect(token.connect(voter1).delegate(voter2.address)) + .to.emit(mockUniversalReceiver, 'UniversalReceiverCalled') + .withArgs( + token.target, + LSP7_TYPE_IDS.LSP7Tokens_DelegatorNotification, + expectedData + ); + }); + + it('should notify delegatee with correct data format', async () => { + await voter2.setUniversalReceiver(mockUniversalReceiver.address); + + const expectedData = ethers.AbiCoder.defaultAbiCoder().encode( + ['address', 'address', 'uint256'], + [voter1.address, voter1.address, ethers.parseEther('10')] + ); + + await expect(token.connect(voter1).delegate(voter2.address)) + .to.emit(mockUniversalReceiver, 'UniversalReceiverCalled') + .withArgs( + token.target, + LSP7_TYPE_IDS.LSP7Tokens_DelegateeNotification, + expectedData + ); + }); + + it('should not notify delegatee when delegator has zero balance', async () => { + await voter2.setUniversalReceiver(mockUniversalReceiver.address); + + const [zeroBalanceAccount] = await ethers.getSigners(); + + await expect(token.connect(zeroBalanceAccount).delegate(voter2.address)).to.not.emit( + mockUniversalReceiver, + 'UniversalReceiverCalled', + ); + }); + + it('should not notify address(0)', async () => { + await expect(token.connect(voter1).delegate(ethers.ZeroAddress)).to.not.emit( + mockUniversalReceiver, + 'UniversalReceiverCalled', + ); + }); + }); }); describe('Voting Process and Proposal Lifecycle', () => { - let proposalId; + let proposalId: string; beforeEach(async () => { - // Setup for voting tests await token.connect(proposer).delegate(proposer.address); await token.connect(voter1).delegate(voter1.address); await token.connect(voter2).delegate(voter2.address); @@ -185,15 +248,12 @@ describe('Comprehensive Governor and Token Tests', () => { await mine(VOTING_DELAY + 1); await governor.connect(voter3).castVote(proposalId, 1); // Ensure quorum and pass - // Try to execute immediately after voting period await expect( governor.execute([randomEOA.address], [0], ['0xaabbccdd'], ethers.id('Proposal #1')), ).to.be.revertedWith('Governor: proposal not successful'); - // Move past timelock period await mine(await governor.votingPeriod()); - // Now execution should succeed await expect( governor.execute([randomEOA.address], [0], ['0xaabbccdd'], ethers.id('Proposal #1')), ).to.emit(governor, 'ProposalExecuted'); From 076227988e79966c060ce1f775305a9f360eeccd Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 28 Nov 2024 09:29:58 +0000 Subject: [PATCH 68/94] chore: prettify --- packages/lsp7-contracts/constants.ts | 5 +--- .../contracts/extensions/LSP7Votes.sol | 9 ++++--- .../lsp7-contracts/tests/LSP7Votes.test.ts | 25 ++++++------------- 3 files changed, 13 insertions(+), 26 deletions(-) diff --git a/packages/lsp7-contracts/constants.ts b/packages/lsp7-contracts/constants.ts index 1734c8393..d2465d031 100644 --- a/packages/lsp7-contracts/constants.ts +++ b/packages/lsp7-contracts/constants.ts @@ -6,8 +6,6 @@ export const INTERFACE_ID_LSP7_PREVIOUS = { }; export const LSP7_TYPE_IDS = { - - // keccak256('LSP7Tokens_DelegatorNotification') LSP7Tokens_DelegatorNotification: '0x997bd66a7e7823b09383ec7ce65fc306af29b8f82a45627f8efc0408475de016', @@ -15,7 +13,7 @@ export const LSP7_TYPE_IDS = { // keccak256('LSP7Tokens_DelegateeNotification') LSP7Tokens_DelegateeNotification: '0x03fae98a28026f93c23e2c9438c2ef0faa101585127a89919d18f067d907b319', - + // keccak256('LSP7Tokens_SenderNotification') LSP7Tokens_SenderNotification: '0x429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea', @@ -27,5 +25,4 @@ export const LSP7_TYPE_IDS = { // keccak256('LSP7Tokens_OperatorNotification') LSP7Tokens_OperatorNotification: '0x386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc', - }; diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol index 23d987753..9ae86c2f3 100644 --- a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol +++ b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol @@ -3,8 +3,11 @@ pragma solidity ^0.8.0; import {LSP7DigitalAsset} from "../LSP7DigitalAsset.sol"; -import { LSP1Utils } from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; -import { _TYPEID_LSP7_DELEGATOR, _TYPEID_LSP7_DELEGATEE } from "../LSP7Constants.sol"; +import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; +import { + _TYPEID_LSP7_DELEGATOR, + _TYPEID_LSP7_DELEGATEE +} from "../LSP7Constants.sol"; import {IERC5805} from "@openzeppelin/contracts/interfaces/IERC5805.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol"; @@ -12,8 +15,6 @@ import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; import {Counters} from "@openzeppelin/contracts/utils/Counters.sol"; - - /** * @dev Extension of LSP7 to support Compound-like voting and delegation. This version is more generic than Compound's, * and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1. diff --git a/packages/lsp7-contracts/tests/LSP7Votes.test.ts b/packages/lsp7-contracts/tests/LSP7Votes.test.ts index ae2465a58..2b9404f1a 100644 --- a/packages/lsp7-contracts/tests/LSP7Votes.test.ts +++ b/packages/lsp7-contracts/tests/LSP7Votes.test.ts @@ -3,10 +3,7 @@ import { ethers } from 'hardhat'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { MyVotingToken, MyVotingToken__factory, MyGovernor, MyGovernor__factory } from '../types'; import { time, mine } from '@nomicfoundation/hardhat-network-helpers'; -import { - LSP7_TYPE_IDS -} from '../constants'; - +import { LSP7_TYPE_IDS } from '../constants'; describe('Comprehensive Governor and Token Tests', () => { let token: MyVotingToken; @@ -134,36 +131,28 @@ describe('Comprehensive Governor and Token Tests', () => { it('should notify delegator with correct data format', async () => { await voter1.setUniversalReceiver(mockUniversalReceiver.address); - + const expectedData = ethers.AbiCoder.defaultAbiCoder().encode( ['address', 'address', 'uint256'], - [voter1.address, voter2.address, ethers.parseEther('10')] + [voter1.address, voter2.address, ethers.parseEther('10')], ); await expect(token.connect(voter1).delegate(voter2.address)) .to.emit(mockUniversalReceiver, 'UniversalReceiverCalled') - .withArgs( - token.target, - LSP7_TYPE_IDS.LSP7Tokens_DelegatorNotification, - expectedData - ); + .withArgs(token.target, LSP7_TYPE_IDS.LSP7Tokens_DelegatorNotification, expectedData); }); it('should notify delegatee with correct data format', async () => { await voter2.setUniversalReceiver(mockUniversalReceiver.address); - + const expectedData = ethers.AbiCoder.defaultAbiCoder().encode( ['address', 'address', 'uint256'], - [voter1.address, voter1.address, ethers.parseEther('10')] + [voter1.address, voter1.address, ethers.parseEther('10')], ); await expect(token.connect(voter1).delegate(voter2.address)) .to.emit(mockUniversalReceiver, 'UniversalReceiverCalled') - .withArgs( - token.target, - LSP7_TYPE_IDS.LSP7Tokens_DelegateeNotification, - expectedData - ); + .withArgs(token.target, LSP7_TYPE_IDS.LSP7Tokens_DelegateeNotification, expectedData); }); it('should not notify delegatee when delegator has zero balance', async () => { From e12e80a1d87905515c1d72d37046697066c3cf48 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 28 Nov 2024 12:37:35 +0000 Subject: [PATCH 69/94] build: add build:js to turbo build --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 95c32f60f..d0d0cca63 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ ], "scripts": { "preinstall": "npx --yes force-resolutions", - "build": "turbo build", + "build": "turbo build && turbo build:js", "build:foundry": "turbo build:foundry", "build:js": "turbo build:js", "build:types": "turbo build:types", From 0372efaa0a1d84815bd0d1b238fcbcb2619b20aa Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 28 Nov 2024 14:30:31 +0000 Subject: [PATCH 70/94] build: set up wagmi for packages and improve build generation --- .github/workflows/build-lint-test.yml | 15 +- .github/workflows/release.yml | 6 +- .gitignore | 2 + package-lock.json | 609 ++++++++--------------- package.json | 4 +- packages/lsp11-contracts/wagmi.config.ts | 19 + packages/lsp23-contracts/package.json | 4 +- packages/lsp25-contracts/package.json | 4 +- 8 files changed, 232 insertions(+), 431 deletions(-) create mode 100644 packages/lsp11-contracts/wagmi.config.ts diff --git a/.github/workflows/build-lint-test.yml b/.github/workflows/build-lint-test.yml index 6773539b6..2e5ef1338 100644 --- a/.github/workflows/build-lint-test.yml +++ b/.github/workflows/build-lint-test.yml @@ -27,20 +27,9 @@ jobs: - name: 🎨 Run ESLint on JS/TS files run: npm run lint - - name: 📦 Test Building package for release - # Command `build:types` needs the folder structure generated - # by the `package` command to run successfully - run: | - npm run build - npm run build:js - npm run package - npm run build:types - - # This will also generate the Typechain types used by the Chai tests + # This will also generate the Typechain types and the files with the constants used by the Chai tests - name: 🏗️ Build contract artifacts - run: | - npm run build - npm run build:js + run: npm run build # - name: 📚 generate ABI docs # run: npm run build:docs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0d3162724..3629d8172 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,12 +49,14 @@ jobs: # `npm run build:js` will also generate the auto-generated constants for methods, errors and events, # including extracting their devdocs and userdocs + # `npm run build:types` will generate: + # - the artifacts with abis for release (artifacts/*.json) + # - the wagmi hooks + # - the typed abis - name: Prepare artifacts to publish if: ${{ steps.release.outputs.releases_created }} run: | - npm run build npm run build:js - npm run package npm run build:types - name: Publish on NPM diff --git a/.gitignore b/.gitignore index c7e6d7392..d45e1d179 100644 --- a/.gitignore +++ b/.gitignore @@ -148,3 +148,5 @@ gas_benchmark.md # Custom setup foundry_artifacts/ + +wagmi.config.bundled_*.mjs diff --git a/package-lock.json b/package-lock.json index e68fbca68..32434b386 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "@turbo/gen": "^1.12.3", "@typechain/ethers-v6": "^0.5.1", "@typechain/hardhat": "9.1.0", - "@wagmi/cli": "^2.1.2", + "@wagmi/cli": "^2.1.18", "all-contributors-cli": "^6.26.1", "dotenv": "^16.0.3", "esbuild": "^0.17.15", @@ -497,8 +497,7 @@ "node_modules/@erc725/smart-contracts-v8": { "name": "@erc725/smart-contracts", "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-8.0.0.tgz", - "integrity": "sha512-dMYUbnay5sTb2u1Z4BcJdcZylciJw09W//CtCAfLu11BVqjbMdsekwZHFPDWrz5Lna/5uVx0rI4GklVRORdK5g==", + "license": "Apache-2.0", "dependencies": { "@openzeppelin/contracts": "^4.9.6", "@openzeppelin/contracts-upgradeable": "^4.9.6", @@ -3563,24 +3562,23 @@ } }, "node_modules/@wagmi/cli": { - "version": "2.1.16", + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/@wagmi/cli/-/cli-2.1.22.tgz", + "integrity": "sha512-aRXwzNHuCIEKs/mceGiPlDBlhdHxXnndL9avYEXByzpGVw37ZChx5CW1potTA8oTFACJpsSs2aaE7cjrRsmzVA==", "dev": true, - "license": "MIT", "dependencies": { "abitype": "^1.0.4", "bundle-require": "^4.0.2", "cac": "^6.7.14", "change-case": "^5.4.4", - "chokidar": "^3.5.3", + "chokidar": "4.0.1", "dedent": "^0.7.0", "dotenv": "^16.3.1", "dotenv-expand": "^10.0.0", "esbuild": "^0.19.0", - "execa": "^8.0.1", + "escalade": "3.2.0", "fdir": "^6.1.1", - "find-up": "^6.3.0", - "fs-extra": "^11.2.0", - "ora": "^6.3.1", + "nanospinner": "1.2.2", "pathe": "^1.1.2", "picocolors": "^1.0.0", "picomatch": "^3.0.0", @@ -3618,45 +3616,24 @@ "node": ">=12" } }, - "node_modules/@wagmi/cli/node_modules/ansi-regex": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@wagmi/cli/node_modules/chalk": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@wagmi/cli/node_modules/change-case": { "version": "5.4.4", "dev": true, "license": "MIT" }, - "node_modules/@wagmi/cli/node_modules/cli-cursor": { - "version": "4.0.0", + "node_modules/@wagmi/cli/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", "dev": true, - "license": "MIT", "dependencies": { - "restore-cursor": "^4.0.0" + "readdirp": "^4.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, "node_modules/@wagmi/cli/node_modules/esbuild": { @@ -3696,28 +3673,6 @@ "@esbuild/win32-x64": "0.19.12" } }, - "node_modules/@wagmi/cli/node_modules/execa": { - "version": "8.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, "node_modules/@wagmi/cli/node_modules/fdir": { "version": "6.4.2", "dev": true, @@ -3731,223 +3686,6 @@ } } }, - "node_modules/@wagmi/cli/node_modules/find-up": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/fs-extra": { - "version": "11.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@wagmi/cli/node_modules/get-stream": { - "version": "8.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/human-signals": { - "version": "5.0.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/@wagmi/cli/node_modules/is-interactive": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/is-stream": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/is-unicode-supported": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/locate-path": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/log-symbols": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/mimic-fn": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/npm-run-path": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/onetime": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/ora": { - "version": "6.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/p-limit": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/p-locate": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/path-exists": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@wagmi/cli/node_modules/path-key": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@wagmi/cli/node_modules/picomatch": { "version": "3.0.1", "dev": true, @@ -3973,93 +3711,17 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@wagmi/cli/node_modules/restore-cursor": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/@wagmi/cli/node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@wagmi/cli/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@wagmi/cli/node_modules/strip-final-newline": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wagmi/cli/node_modules/yocto-queue": { - "version": "1.1.1", + "node_modules/@wagmi/cli/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/abbrev": { @@ -9333,6 +8995,105 @@ "typechain": "8.x" } }, + "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", + "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.1.1", + "typescript": ">=4.3.0" + } + }, + "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", + "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@typechain/ethers-v5": "^10.2.1", + "ethers": "^5.4.7", + "hardhat": "^2.9.9", + "typechain": "^8.1.1" + } + }, + "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hardhat-packager/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", "dev": true, @@ -11766,6 +11527,15 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/nanospinner": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/nanospinner/-/nanospinner-1.2.2.tgz", + "integrity": "sha512-Zt/AmG6qRU3e+WnzGGLuMCEAO/dAu45stNbHY223tUxldaDAeE+FxSPsd9Q+j+paejmm0ZbrNVs5Sraqy3dRxA==", + "dev": true, + "dependencies": { + "picocolors": "^1.1.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "license": "MIT" @@ -12782,8 +12552,9 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.1.0", - "license": "ISC" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -15200,53 +14971,6 @@ "node": ">= 0.8" } }, - "node_modules/stdin-discarder": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stdin-discarder/node_modules/bl": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/stdin-discarder/node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/stream-combiner": { "version": "0.0.4", "dev": true, @@ -16111,6 +15835,19 @@ "turbo-windows-arm64": "2.3.3" } }, + "node_modules/turbo-darwin-64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-2.3.3.tgz", + "integrity": "sha512-bxX82xe6du/3rPmm4aCC5RdEilIN99VUld4HkFQuw+mvFg6darNBuQxyWSHZTtc25XgYjQrjsV05888w1grpaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, "node_modules/turbo-darwin-arm64": { "version": "2.3.3", "cpu": [ @@ -16123,6 +15860,58 @@ "darwin" ] }, + "node_modules/turbo-linux-64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-2.3.3.tgz", + "integrity": "sha512-eHj9OIB0dFaP6BxB88jSuaCLsOQSYWBgmhy2ErCu6D2GG6xW3b6e2UWHl/1Ho9FsTg4uVgo4DB9wGsKa5erjUA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-linux-arm64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-2.3.3.tgz", + "integrity": "sha512-NmDE/NjZoDj1UWBhMtOPmqFLEBKhzGS61KObfrDEbXvU3lekwHeoPvAMfcovzswzch+kN2DrtbNIlz+/rp8OCg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/turbo-windows-64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-2.3.3.tgz", + "integrity": "sha512-O2+BS4QqjK3dOERscXqv7N2GXNcqHr9hXumkMxDj/oGx9oCatIwnnwx34UmzodloSnJpgSqjl8iRWiY65SmYoQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/turbo-windows-arm64": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-2.3.3.tgz", + "integrity": "sha512-dW4ZK1r6XLPNYLIKjC4o87HxYidtRRcBeo/hZ9Wng2XM/MqqYkAyzJXJGgRMsc0MMEN9z4+ZIfnSNBrA0b08ag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/tweetnacl": { "version": "1.0.3", "license": "Unlicense" @@ -18763,4 +18552,4 @@ } } } -} +} \ No newline at end of file diff --git a/package.json b/package.json index d0d0cca63..01182a5c6 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "build": "turbo build && turbo build:js", "build:foundry": "turbo build:foundry", "build:js": "turbo build:js", - "build:types": "turbo build:types", + "build:types": "turbo package && turbo build:types", "clean": "turbo clean", "format": "prettier --write .", "lint": "turbo lint", @@ -74,7 +74,7 @@ "@turbo/gen": "^1.12.3", "@typechain/ethers-v6": "^0.5.1", "@typechain/hardhat": "9.1.0", - "@wagmi/cli": "^2.1.2", + "@wagmi/cli": "^2.1.18", "all-contributors-cli": "^6.26.1", "dotenv": "^16.0.3", "esbuild": "^0.17.15", diff --git a/packages/lsp11-contracts/wagmi.config.ts b/packages/lsp11-contracts/wagmi.config.ts new file mode 100644 index 000000000..9f838fb8d --- /dev/null +++ b/packages/lsp11-contracts/wagmi.config.ts @@ -0,0 +1,19 @@ +import { defineConfig } from '@wagmi/cli'; +import { react } from '@wagmi/cli/plugins'; +import fs from 'fs'; + +const artifacts = fs.readdirSync('./artifacts', {}); + +const contractsWagmiInputs = artifacts.map((artifact) => { + const jsonArtifact = JSON.parse(fs.readFileSync(`./artifacts/${artifact}`, 'utf-8')); + return { + name: jsonArtifact.contractName, + abi: jsonArtifact.abi, + }; +}); + +export default defineConfig({ + out: 'types/index.ts', + contracts: contractsWagmiInputs, + plugins: [react()], +}); diff --git a/packages/lsp23-contracts/package.json b/packages/lsp23-contracts/package.json index d48736e37..2ad00fabb 100644 --- a/packages/lsp23-contracts/package.json +++ b/packages/lsp23-contracts/package.json @@ -46,7 +46,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.6", - "@lukso/universalprofile-contracts": "~0.15.0" + "@lukso/universalprofile-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.6" } } diff --git a/packages/lsp25-contracts/package.json b/packages/lsp25-contracts/package.json index 028da024c..3430c3388 100644 --- a/packages/lsp25-contracts/package.json +++ b/packages/lsp25-contracts/package.json @@ -37,13 +37,13 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", + "package": "hardhat prepare-package", "clean": "hardhat clean && rm -Rf dist/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", "test": "hardhat test --no-compile tests/*.test.ts", - "test:coverage": "hardhat coverage", - "package": "hardhat prepare-package" + "test:coverage": "hardhat coverage" }, "dependencies": { "@openzeppelin/contracts": "^4.9.3" From efef141999c841be7d2ef934ceb3093fe205ead4 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 28 Nov 2024 16:25:06 +0000 Subject: [PATCH 71/94] test: add delegate notifications tests --- .../contracts/Mocks/UniversalReceiver.sol | 29 +++++++++++++++++++ .../lsp7-contracts/tests/LSP7Votes.test.ts | 19 +----------- 2 files changed, 30 insertions(+), 18 deletions(-) create mode 100644 packages/lsp7-contracts/contracts/Mocks/UniversalReceiver.sol diff --git a/packages/lsp7-contracts/contracts/Mocks/UniversalReceiver.sol b/packages/lsp7-contracts/contracts/Mocks/UniversalReceiver.sol new file mode 100644 index 000000000..603b2b156 --- /dev/null +++ b/packages/lsp7-contracts/contracts/Mocks/UniversalReceiver.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + ILSP1UniversalReceiver +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; +import { + _INTERFACEID_LSP1 +} from "@lukso/lsp1-contracts/contracts/LSP1Constants.sol"; + +contract MockUniversalReceiver is ILSP1UniversalReceiver { + event UniversalReceiverCalled( + address indexed from, + bytes32 indexed typeId, + bytes receivedData + ); + + function universalReceiver( + bytes32 typeId, + bytes calldata receivedData + ) external payable override returns (bytes memory) { + emit UniversalReceiverCalled(msg.sender, typeId, receivedData); + return ""; + } + + function supportsInterface(bytes4 interfaceId) public view returns (bool) { + return interfaceId == _INTERFACEID_LSP1; + } +} diff --git a/packages/lsp7-contracts/tests/LSP7Votes.test.ts b/packages/lsp7-contracts/tests/LSP7Votes.test.ts index 2b9404f1a..6532657a5 100644 --- a/packages/lsp7-contracts/tests/LSP7Votes.test.ts +++ b/packages/lsp7-contracts/tests/LSP7Votes.test.ts @@ -129,35 +129,18 @@ describe('Comprehensive Governor and Token Tests', () => { mockUniversalReceiver = await MockUniversalReceiver.deploy(); }); - it('should notify delegator with correct data format', async () => { - await voter1.setUniversalReceiver(mockUniversalReceiver.address); - - const expectedData = ethers.AbiCoder.defaultAbiCoder().encode( - ['address', 'address', 'uint256'], - [voter1.address, voter2.address, ethers.parseEther('10')], - ); - - await expect(token.connect(voter1).delegate(voter2.address)) - .to.emit(mockUniversalReceiver, 'UniversalReceiverCalled') - .withArgs(token.target, LSP7_TYPE_IDS.LSP7Tokens_DelegatorNotification, expectedData); - }); - it('should notify delegatee with correct data format', async () => { - await voter2.setUniversalReceiver(mockUniversalReceiver.address); - const expectedData = ethers.AbiCoder.defaultAbiCoder().encode( ['address', 'address', 'uint256'], [voter1.address, voter1.address, ethers.parseEther('10')], ); - await expect(token.connect(voter1).delegate(voter2.address)) + await expect(token.connect(voter1).delegate(await mockUniversalReceiver.getAddress())) .to.emit(mockUniversalReceiver, 'UniversalReceiverCalled') .withArgs(token.target, LSP7_TYPE_IDS.LSP7Tokens_DelegateeNotification, expectedData); }); it('should not notify delegatee when delegator has zero balance', async () => { - await voter2.setUniversalReceiver(mockUniversalReceiver.address); - const [zeroBalanceAccount] = await ethers.getSigners(); await expect(token.connect(zeroBalanceAccount).delegate(voter2.address)).to.not.emit( From 45822b0cea1629013c6130cd15d681396aefaee7 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 28 Nov 2024 16:41:49 +0000 Subject: [PATCH 72/94] refactor: apply recommandations --- packages/lsp7-contracts/constants.ts | 16 +++--- .../contracts/LSP7DigitalAsset.sol | 52 +++++++++++++++++-- .../LSP7DigitalAssetInitAbstract.sol | 52 +++++++++++++++++-- .../contracts/Mocks/MyVotingToken.sol | 2 +- .../contracts/extensions/LSP7Votes.sol | 37 ++++++++----- .../lsp7-contracts/tests/LSP7Votes.test.ts | 6 ++- 6 files changed, 133 insertions(+), 32 deletions(-) diff --git a/packages/lsp7-contracts/constants.ts b/packages/lsp7-contracts/constants.ts index d2465d031..50014c4c9 100644 --- a/packages/lsp7-contracts/constants.ts +++ b/packages/lsp7-contracts/constants.ts @@ -6,14 +6,6 @@ export const INTERFACE_ID_LSP7_PREVIOUS = { }; export const LSP7_TYPE_IDS = { - // keccak256('LSP7Tokens_DelegatorNotification') - LSP7Tokens_DelegatorNotification: - '0x997bd66a7e7823b09383ec7ce65fc306af29b8f82a45627f8efc0408475de016', - - // keccak256('LSP7Tokens_DelegateeNotification') - LSP7Tokens_DelegateeNotification: - '0x03fae98a28026f93c23e2c9438c2ef0faa101585127a89919d18f067d907b319', - // keccak256('LSP7Tokens_SenderNotification') LSP7Tokens_SenderNotification: '0x429ac7a06903dbc9c13dfcb3c9d11df8194581fa047c96d7a4171fc7402958ea', @@ -25,4 +17,12 @@ export const LSP7_TYPE_IDS = { // keccak256('LSP7Tokens_OperatorNotification') LSP7Tokens_OperatorNotification: '0x386072cc5a58e61263b434c722725f21031cd06e7c552cfaa06db5de8a320dbc', + + // keccak256('LSP7Tokens_VotesDelegatorNotification') + LSP7Tokens_VotesDelegatorNotification: + '0x6117a486162c4ba8e38d646ef52b1e0e1be6bef05a980c041e232eba8c95e16f', + + // keccak256('LSP7Tokens_VotesDelegateeNotification') + LSP7Tokens_VotesDelegateeNotification: + '0x72cad372b29cde295ff0839b7b194597766b88f5fad4f7d6aef013e0c55dc492', }; diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol index 442c0df4d..d7fac7cf7 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol @@ -775,13 +775,55 @@ abstract contract LSP7DigitalAsset is _beforeTokenTransfer(from, to, amount, data); - uint256 balance = _tokenOwnerBalances[from]; - if (amount > balance) { - revert LSP7AmountExceedsBalance(balance, from, amount); + _update(from, to, amount, force, data); + + _afterTokenTransfer(from, to, amount, data); + + bytes memory lsp1Data = abi.encode(msg.sender, from, to, amount, data); + + _notifyTokenSender(from, lsp1Data); + _notifyTokenReceiver(to, force, lsp1Data); + } + + /** + * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` + * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding + * this function. + * + * @custom:events {Transfer} event. + */ + function _update( + address from, + address to, + uint256 amount, + bool force, + bytes memory data + ) internal virtual { + if (from == address(0)) { + // Overflow check required: The rest of the code assumes that totalSupply never overflows + _existingTokens += amount; + } else { + uint256 fromBalance = _tokenOwnerBalances[from]; + if (fromBalance < amount) { + revert LSP7AmountExceedsBalance(fromBalance, from, amount); + } + unchecked { + // Overflow not possible: amount <= fromBalance <= totalSupply. + _tokenOwnerBalances[from] = fromBalance - amount; + } } - _tokenOwnerBalances[from] -= amount; - _tokenOwnerBalances[to] += amount; + if (to == address(0)) { + unchecked { + // Overflow not possible: amount <= totalSupply or amount <= fromBalance <= totalSupply. + _existingTokens -= amount; + } + } else { + unchecked { + // Overflow not possible: balance + amount is at most totalSupply, which we know fits into a uint256. + _tokenOwnerBalances[to] += amount; + } + } emit Transfer({ operator: msg.sender, diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol index c9fa9ea94..f25c26ade 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol @@ -789,13 +789,55 @@ abstract contract LSP7DigitalAssetInitAbstract is _beforeTokenTransfer(from, to, amount, data); - uint256 balance = _tokenOwnerBalances[from]; - if (amount > balance) { - revert LSP7AmountExceedsBalance(balance, from, amount); + _update(from, to, amount, force, data); + + _afterTokenTransfer(from, to, amount, data); + + bytes memory lsp1Data = abi.encode(msg.sender, from, to, amount, data); + + _notifyTokenSender(from, lsp1Data); + _notifyTokenReceiver(to, force, lsp1Data); + } + + /** + * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` + * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding + * this function. + * + * Emits a {Transfer} event. + */ + function _update( + address from, + address to, + uint256 amount, + bool force, + bytes memory data + ) internal virtual { + if (from == address(0)) { + // Overflow check required: The rest of the code assumes that totalSupply never overflows + _existingTokens += amount; + } else { + uint256 fromBalance = _tokenOwnerBalances[from]; + if (fromBalance < amount) { + revert LSP7AmountExceedsBalance(fromBalance, from, amount); + } + unchecked { + // Overflow not possible: amount <= fromBalance <= totalSupply. + _tokenOwnerBalances[from] = fromBalance - amount; + } } - _tokenOwnerBalances[from] -= amount; - _tokenOwnerBalances[to] += amount; + if (to == address(0)) { + unchecked { + // Overflow not possible: amount <= totalSupply or amount <= fromBalance <= totalSupply. + _existingTokens -= amount; + } + } else { + unchecked { + // Overflow not possible: balance + amount is at most totalSupply, which we know fits into a uint256. + _tokenOwnerBalances[to] += amount; + } + } emit Transfer({ operator: msg.sender, diff --git a/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol b/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol index 28cb23ce1..0a0d8e742 100644 --- a/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol +++ b/packages/lsp7-contracts/contracts/Mocks/MyVotingToken.sol @@ -6,7 +6,7 @@ import {LSP7Votes, LSP7DigitalAsset} from "../extensions/LSP7Votes.sol"; import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; /** - * @dev Mock of an LSP7Votes token + * @dev Mock of a LSP7Votes token */ contract MyVotingToken is LSP7Votes { constructor() diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol index 9ae86c2f3..a964330eb 100644 --- a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol +++ b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol @@ -4,10 +4,6 @@ pragma solidity ^0.8.0; import {LSP7DigitalAsset} from "../LSP7DigitalAsset.sol"; import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; -import { - _TYPEID_LSP7_DELEGATOR, - _TYPEID_LSP7_DELEGATEE -} from "../LSP7Constants.sol"; import {IERC5805} from "@openzeppelin/contracts/interfaces/IERC5805.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol"; @@ -38,6 +34,14 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { bytes32 private constant _DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); + // keccak256('LSP7Tokens_VotesDelegatorNotification') + bytes32 constant _TYPEID_LSP7_VOTESDELEGATOR = + 0x6117a486162c4ba8e38d646ef52b1e0e1be6bef05a980c041e232eba8c95e16f; + + // keccak256('LSP7Tokens_VotesDelegateeNotification') + bytes32 constant _TYPEID_LSP7_VOTESDELEGATEE = + 0x72cad372b29cde295ff0839b7b194597766b88f5fad4f7d6aef013e0c55dc492; + mapping(address => address) private _delegates; mapping(address => Checkpoint[]) private _checkpoints; Checkpoint[] private _totalSupplyCheckpoints; @@ -107,8 +111,7 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { /** * @dev Retrieve the number of votes for `account` at the end of `timepoint`. * - * Requirements: - * + * @custom:requirement * - `timepoint` must be in the past */ function getPastVotes( @@ -123,8 +126,7 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { * @dev Retrieve the `totalSupply` at the end of `timepoint`. Note, this value is the sum of all balances. * It is NOT the sum of all the delegated votes! * - * Requirements: - * + * @custom:requirement * - `timepoint` must be in the past */ function getPastTotalSupply( @@ -243,7 +245,9 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { /** * @dev Move voting power when tokens are transferred. * - * Emits a {IVotes-DelegateVotesChanged} event. + * @custom:event + * - {IVotes-DelegateVotesChanged} when voting power is removed from source address + * - {IVotes-DelegateVotesChanged} when voting power is added to destination address */ function _update( address from, @@ -267,7 +271,9 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { /** * @dev Change delegation for `delegator` to `delegatee`. * - * Emits events {IVotes-DelegateChanged} and {IVotes-DelegateVotesChanged}. + * @custom:event + * - {IVotes-DelegateChanged} + * - {IVotes-DelegateVotesChanged} */ function _delegate(address delegator, address delegatee) internal virtual { address currentDelegate = delegates(delegator); @@ -287,7 +293,7 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { ); LSP1Utils.notifyUniversalReceiver( delegator, - _TYPEID_LSP7_DELEGATOR, + _TYPEID_LSP7_VOTESDELEGATOR, delegatorNotificationData ); } @@ -302,12 +308,19 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { LSP1Utils.notifyUniversalReceiver( delegatee, - _TYPEID_LSP7_DELEGATEE, + _TYPEID_LSP7_VOTESDELEGATEE, delegateeNotificationData ); } } + /** + * @dev Moves voting power from one address to another. + * + * @custom:event + * - {IVotes-DelegateVotesChanged} when voting power is removed from source address + * - {IVotes-DelegateVotesChanged} when voting power is added to destination address + */ function _moveVotingPower( address src, address dst, diff --git a/packages/lsp7-contracts/tests/LSP7Votes.test.ts b/packages/lsp7-contracts/tests/LSP7Votes.test.ts index 6532657a5..a37bb36f7 100644 --- a/packages/lsp7-contracts/tests/LSP7Votes.test.ts +++ b/packages/lsp7-contracts/tests/LSP7Votes.test.ts @@ -137,7 +137,11 @@ describe('Comprehensive Governor and Token Tests', () => { await expect(token.connect(voter1).delegate(await mockUniversalReceiver.getAddress())) .to.emit(mockUniversalReceiver, 'UniversalReceiverCalled') - .withArgs(token.target, LSP7_TYPE_IDS.LSP7Tokens_DelegateeNotification, expectedData); + .withArgs( + token.target, + LSP7_TYPE_IDS.LSP7Tokens_VotesDelegateeNotification, + expectedData, + ); }); it('should not notify delegatee when delegator has zero balance', async () => { From fed8f18c8b6674623d3de5ab2172858b833bfee0 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 28 Nov 2024 16:48:24 +0000 Subject: [PATCH 73/94] feat: create LSP7VotesInitAbstract contract --- .../extensions/LSP7VotesInitAbstract.sol | 447 ++++++++++++++++++ 1 file changed, 447 insertions(+) create mode 100644 packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol b/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol new file mode 100644 index 000000000..6cac97ea7 --- /dev/null +++ b/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol @@ -0,0 +1,447 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import { + LSP7DigitalAssetInitAbstract +} from "../LSP7DigitalAssetInitAbstract.sol"; +import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; +import {IERC5805} from "@openzeppelin/contracts/interfaces/IERC5805.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; +import {SafeCast} from "@openzeppelin/contracts/utils/math/SafeCast.sol"; +import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { + EIP712Upgradeable +} from "@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol"; +import {Counters} from "@openzeppelin/contracts/utils/Counters.sol"; + +/** + * @dev Extension of LSP7 to support Compound-like voting and delegation. This version is more generic than Compound's, + * and supports token supply up to 2^224^ - 1, while COMP is limited to 2^96^ - 1. + * + * This extension keeps a history (checkpoints) of each account's vote power. Vote power can be delegated either + * by calling the {delegate} function directly, or by providing a signature to be used with {delegateBySig}. Voting + * power can be queried through the public accessors {getVotes} and {getPastVotes}. + * + * By default, token balance does not account for voting power. This makes transfers cheaper. The downside is that it + * requires users to delegate to themselves in order to activate checkpoints and have their voting power tracked. + */ +abstract contract LSP7VotesInitAbstract is + LSP7DigitalAssetInitAbstract, + EIP712Upgradeable, + IERC5805 +{ + using Counters for Counters.Counter; + mapping(address => Counters.Counter) private _nonces; + + struct Checkpoint { + uint32 fromBlock; + uint224 votes; + } + + bytes32 private constant _DELEGATION_TYPEHASH = + keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); + + // keccak256('LSP7Tokens_VotesDelegatorNotification') + bytes32 constant _TYPEID_LSP7_VOTESDELEGATOR = + 0x6117a486162c4ba8e38d646ef52b1e0e1be6bef05a980c041e232eba8c95e16f; + + // keccak256('LSP7Tokens_VotesDelegateeNotification') + bytes32 constant _TYPEID_LSP7_VOTESDELEGATEE = + 0x72cad372b29cde295ff0839b7b194597766b88f5fad4f7d6aef013e0c55dc492; + + mapping(address => address) private _delegates; + mapping(address => Checkpoint[]) private _checkpoints; + Checkpoint[] private _totalSupplyCheckpoints; + + function _initialize( + string memory name_, + string memory symbol_, + address newOwner_, + uint256 lsp4TokenType_, + bool isNonDivisible_, + string memory version_ + ) internal virtual onlyInitializing { + LSP7DigitalAssetInitAbstract._initialize( + name_, + symbol_, + newOwner_, + lsp4TokenType_, + isNonDivisible_ + ); + __EIP712_init(name_, version_); + } + + /** + * @dev Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting). + */ + function clock() public view virtual override returns (uint48) { + return SafeCast.toUint48(block.number); + } + + /** + * @dev Description of the clock + */ + // solhint-disable-next-line func-name-mixedcase + function CLOCK_MODE() public view virtual override returns (string memory) { + // Check that the clock was not modified + require(clock() == block.number, "LSP7Votes: broken clock mode"); + return "mode=blocknumber&from=default"; + } + + // solhint-disable-next-line func-name-mixedcase + function DOMAIN_SEPARATOR() external view returns (bytes32) { + return _domainSeparatorV4(); + } + + /** + * @dev Get the `pos`-th checkpoint for `account`. + */ + function checkpoints( + address account, + uint32 pos + ) public view virtual returns (Checkpoint memory) { + return _checkpoints[account][pos]; + } + + /** + * @dev Get number of checkpoints for `account`. + */ + function numCheckpoints( + address account + ) public view virtual returns (uint32) { + return SafeCast.toUint32(_checkpoints[account].length); + } + + /** + * @dev Get the address `account` is currently delegating to. + */ + function delegates( + address account + ) public view virtual override returns (address) { + return _delegates[account]; + } + + /** + * @dev Gets the current votes balance for `account` + */ + function getVotes( + address account + ) public view virtual override returns (uint256) { + uint256 pos = _checkpoints[account].length; + unchecked { + return pos == 0 ? 0 : _checkpoints[account][pos - 1].votes; + } + } + + /** + * @dev Retrieve the number of votes for `account` at the end of `timepoint`. + * + * @custom:requirement + * - `timepoint` must be in the past + */ + function getPastVotes( + address account, + uint256 timepoint + ) public view virtual override returns (uint256) { + require(timepoint < clock(), "LSP7Votes: future lookup"); + return _checkpointsLookup(_checkpoints[account], timepoint); + } + + /** + * @dev Retrieve the `totalSupply` at the end of `timepoint`. Note, this value is the sum of all balances. + * It is NOT the sum of all the delegated votes! + * + * @custom:requirement + * - `timepoint` must be in the past + */ + function getPastTotalSupply( + uint256 timepoint + ) public view virtual override returns (uint256) { + require(timepoint < clock(), "LSP7Votes: future lookup"); + return _checkpointsLookup(_totalSupplyCheckpoints, timepoint); + } + + /** + * @dev Lookup a value in a list of (sorted) checkpoints. + */ + function _checkpointsLookup( + Checkpoint[] storage ckpts, + uint256 timepoint + ) private view returns (uint256) { + // We run a binary search to look for the last (most recent) checkpoint taken before (or at) `timepoint`. + // + // Initially we check if the block is recent to narrow the search range. + // During the loop, the index of the wanted checkpoint remains in the range [low-1, high). + // With each iteration, either `low` or `high` is moved towards the middle of the range to maintain the invariant. + // - If the middle checkpoint is after `timepoint`, we look in [low, mid) + // - If the middle checkpoint is before or equal to `timepoint`, we look in [mid+1, high) + // Once we reach a single value (when low == high), we've found the right checkpoint at the index high-1, if not + // out of bounds (in which case we're looking too far in the past and the result is 0). + // Note that if the latest checkpoint available is exactly for `timepoint`, we end up with an index that is + // past the end of the array, so we technically don't find a checkpoint after `timepoint`, but it works out + // the same. + uint256 length = ckpts.length; + + uint256 low = 0; + uint256 high = length; + + if (length > 5) { + uint256 mid = length - Math.sqrt(length); + if (_unsafeAccess(ckpts, mid).fromBlock > timepoint) { + high = mid; + } else { + low = mid + 1; + } + } + + while (low < high) { + uint256 mid = Math.average(low, high); + if (_unsafeAccess(ckpts, mid).fromBlock > timepoint) { + high = mid; + } else { + low = mid + 1; + } + } + + unchecked { + return high == 0 ? 0 : _unsafeAccess(ckpts, high - 1).votes; + } + } + + /** + * @dev Delegate votes from the sender to `delegatee`. + */ + function delegate(address delegatee) public virtual override { + _delegate(msg.sender, delegatee); + } + + /** + * @dev Delegates votes from signer to `delegatee` + */ + function delegateBySig( + address delegatee, + uint256 nonce, + uint256 expiry, + uint8 v, + bytes32 r, + bytes32 s + ) public virtual override { + // solhint-disable-next-line not-rely-on-time + require(block.timestamp <= expiry, "LSP7Votes: signature expired"); + address signer = ECDSA.recover( + _hashTypedDataV4( + keccak256( + abi.encode(_DELEGATION_TYPEHASH, delegatee, nonce, expiry) + ) + ), + v, + r, + s + ); + require(nonce == _useNonce(signer), "LSP7Votes: invalid nonce"); + _delegate(signer, delegatee); + } + + /** + * @dev Maximum token supply. Defaults to `type(uint224).max` (2^224^ - 1). + */ + function _maxSupply() internal view virtual returns (uint224) { + return type(uint224).max; + } + + /** + * @dev Transfers, mints, or burns voting units. To register a mint, `from` should be zero. To register a burn, `to` + * should be zero. Total supply of voting units will be adjusted with mints and burns. + */ + function _transferVotingUnits( + address from, + address to, + uint256 amount + ) internal virtual { + if (from == address(0)) { + _writeCheckpoint(_totalSupplyCheckpoints, _add, amount); + } + if (to == address(0)) { + _writeCheckpoint(_totalSupplyCheckpoints, _subtract, amount); + } + _moveVotingPower(delegates(from), delegates(to), amount); + } + + /** + * @dev Move voting power when tokens are transferred. + * + * @custom:event + * - {IVotes-DelegateVotesChanged} when voting power is removed from source address + * - {IVotes-DelegateVotesChanged} when voting power is added to destination address + */ + function _update( + address from, + address to, + uint256 value, + bool force, + bytes memory data + ) internal virtual override { + super._update(from, to, value, force, data); + if (from == address(0)) { + uint256 supply = totalSupply(); + uint256 cap = _maxSupply(); + require( + supply <= cap, + "LSP7Votes: total supply risks overflowing votes" + ); + } + _transferVotingUnits(from, to, value); + } + + /** + * @dev Change delegation for `delegator` to `delegatee`. + * + * @custom:event + * - {IVotes-DelegateChanged} + * - {IVotes-DelegateVotesChanged} + */ + function _delegate(address delegator, address delegatee) internal virtual { + address currentDelegate = delegates(delegator); + uint256 delegatorBalance = balanceOf(delegator); + _delegates[delegator] = delegatee; + + emit DelegateChanged(delegator, currentDelegate, delegatee); + + _moveVotingPower(currentDelegate, delegatee, delegatorBalance); + + // Notify the delegator if it's not address(0) + if (delegator != address(0)) { + bytes memory delegatorNotificationData = abi.encode( + msg.sender, + delegatee, + delegatorBalance + ); + LSP1Utils.notifyUniversalReceiver( + delegator, + _TYPEID_LSP7_VOTESDELEGATOR, + delegatorNotificationData + ); + } + + // Only notify the new delegatee if it's not address(0) and if there's actual voting power + if (delegatee != address(0) && delegatorBalance > 0) { + bytes memory delegateeNotificationData = abi.encode( + msg.sender, + delegator, + delegatorBalance + ); + + LSP1Utils.notifyUniversalReceiver( + delegatee, + _TYPEID_LSP7_VOTESDELEGATEE, + delegateeNotificationData + ); + } + } + + /** + * @dev Moves voting power from one address to another. + * + * @custom:event + * - {IVotes-DelegateVotesChanged} when voting power is removed from source address + * - {IVotes-DelegateVotesChanged} when voting power is added to destination address + */ + function _moveVotingPower( + address src, + address dst, + uint256 amount + ) private { + if (src != dst && amount > 0) { + if (src != address(0)) { + (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint( + _checkpoints[src], + _subtract, + amount + ); + emit DelegateVotesChanged(src, oldWeight, newWeight); + } + + if (dst != address(0)) { + (uint256 oldWeight, uint256 newWeight) = _writeCheckpoint( + _checkpoints[dst], + _add, + amount + ); + emit DelegateVotesChanged(dst, oldWeight, newWeight); + } + } + } + + function _writeCheckpoint( + Checkpoint[] storage ckpts, + function(uint256, uint256) view returns (uint256) op, + uint256 delta + ) private returns (uint256 oldWeight, uint256 newWeight) { + uint256 pos = ckpts.length; + + unchecked { + Checkpoint memory oldCkpt = pos == 0 + ? Checkpoint(0, 0) + : _unsafeAccess(ckpts, pos - 1); + + oldWeight = oldCkpt.votes; + newWeight = op(oldWeight, delta); + + if (pos > 0 && oldCkpt.fromBlock == clock()) { + _unsafeAccess(ckpts, pos - 1).votes = SafeCast.toUint224( + newWeight + ); + } else { + ckpts.push( + Checkpoint({ + fromBlock: SafeCast.toUint32(clock()), + votes: SafeCast.toUint224(newWeight) + }) + ); + } + } + } + + function _add(uint256 a, uint256 b) private pure returns (uint256) { + return a + b; + } + + function _subtract(uint256 a, uint256 b) private pure returns (uint256) { + return a - b; + } + + /** + * @dev Access an element of the array without performing bounds check. The position is assumed to be within bounds. + */ + function _unsafeAccess( + Checkpoint[] storage ckpts, + uint256 pos + ) private pure returns (Checkpoint storage result) { + // solhint-disable-next-line no-inline-assembly + assembly { + mstore(0, ckpts.slot) + result.slot := add(keccak256(0, 0x20), pos) + } + } + + /** + * @dev Consumes a nonce. + * + * Returns the current value and increments nonce. + */ + function _useNonce( + address owner + ) internal virtual returns (uint256 current) { + Counters.Counter storage nonce = _nonces[owner]; + current = nonce.current(); + nonce.increment(); + } + + /** + * @dev Reads the current nonce + */ + function nonces(address owner) public view virtual returns (uint256) { + return _nonces[owner].current(); + } +} From 0818c94939cdd0aeb2bd8fb0d78cc04410f63a34 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 28 Nov 2024 17:40:32 +0000 Subject: [PATCH 74/94] feat: create LSP7VotesConstants.sol --- .../contracts/Mocks/LSP1TypeIDsTester.sol | 10 ++++++++++ .../contracts/extensions/LSP7Votes.sol | 15 +++++---------- .../contracts/extensions/LSP7VotesConstants.sol | 8 ++++++++ .../extensions/LSP7VotesInitAbstract.sol | 16 ++++++---------- 4 files changed, 29 insertions(+), 20 deletions(-) create mode 100644 packages/lsp7-contracts/contracts/extensions/LSP7VotesConstants.sol diff --git a/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol b/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol index d9c7c1ced..c4237d8ca 100644 --- a/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol +++ b/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol @@ -12,6 +12,10 @@ import { _TYPEID_LSP7_TOKENSRECIPIENT, _TYPEID_LSP7_TOKENOPERATOR } from "@lukso/lsp7-contracts/contracts/LSP7Constants.sol"; +import { + _TYPEID_LSP7_VOTESDELEGATOR, + _TYPEID_LSP7_VOTESDELEGATEE +} from "@lukso/lsp7-contracts/contracts/extensions/LSP7VotesConstants.sol"; import { _TYPEID_LSP8_TOKENSSENDER, _TYPEID_LSP8_TOKENSRECIPIENT, @@ -60,6 +64,12 @@ contract LSP1TypeIDsTester { _typeIds[ "LSP7Tokens_OperatorNotification" ] = _TYPEID_LSP7_TOKENOPERATOR; + _typeIds[ + "LSP7Votes_VotesDelegatorNotification" + ] = _TYPEID_LSP7_VOTESDELEGATOR; + _typeIds[ + "LSP7Votes_VotesDelegateeNotification" + ] = _TYPEID_LSP7_VOTESDELEGATEE; // ------------------ // ------ LSP8 ------ diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol index a964330eb..b5aaab5b3 100644 --- a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol +++ b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol @@ -1,8 +1,11 @@ // SPDX-License-Identifier: MIT - pragma solidity ^0.8.0; import {LSP7DigitalAsset} from "../LSP7DigitalAsset.sol"; +import { + _TYPEID_LSP7_VOTESDELEGATOR, + _TYPEID_LSP7_VOTESDELEGATEE +} from "./LSP7VotesConstants.sol"; import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; import {IERC5805} from "@openzeppelin/contracts/interfaces/IERC5805.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; @@ -31,17 +34,9 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { uint224 votes; } - bytes32 private constant _DELEGATION_TYPEHASH = + bytes32 internal constant _DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); - // keccak256('LSP7Tokens_VotesDelegatorNotification') - bytes32 constant _TYPEID_LSP7_VOTESDELEGATOR = - 0x6117a486162c4ba8e38d646ef52b1e0e1be6bef05a980c041e232eba8c95e16f; - - // keccak256('LSP7Tokens_VotesDelegateeNotification') - bytes32 constant _TYPEID_LSP7_VOTESDELEGATEE = - 0x72cad372b29cde295ff0839b7b194597766b88f5fad4f7d6aef013e0c55dc492; - mapping(address => address) private _delegates; mapping(address => Checkpoint[]) private _checkpoints; Checkpoint[] private _totalSupplyCheckpoints; diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7VotesConstants.sol b/packages/lsp7-contracts/contracts/extensions/LSP7VotesConstants.sol new file mode 100644 index 000000000..692d27282 --- /dev/null +++ b/packages/lsp7-contracts/contracts/extensions/LSP7VotesConstants.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +// keccak256('LSP7Tokens_VotesDelegatorNotification') +bytes32 constant _TYPEID_LSP7_VOTESDELEGATOR = 0x6117a486162c4ba8e38d646ef52b1e0e1be6bef05a980c041e232eba8c95e16f; + +// keccak256('LSP7Tokens_VotesDelegateeNotification') +bytes32 constant _TYPEID_LSP7_VOTESDELEGATEE = 0x72cad372b29cde295ff0839b7b194597766b88f5fad4f7d6aef013e0c55dc492; diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol b/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol index 6cac97ea7..1e0f444ff 100644 --- a/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol @@ -1,10 +1,14 @@ // SPDX-License-Identifier: MIT - pragma solidity ^0.8.0; import { LSP7DigitalAssetInitAbstract } from "../LSP7DigitalAssetInitAbstract.sol"; +import { + _TYPEID_LSP7_VOTESDELEGATOR, + _TYPEID_LSP7_VOTESDELEGATEE +} from "./LSP7VotesConstants.sol"; + import {LSP1Utils} from "@lukso/lsp1-contracts/contracts/LSP1Utils.sol"; import {IERC5805} from "@openzeppelin/contracts/interfaces/IERC5805.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; @@ -39,17 +43,9 @@ abstract contract LSP7VotesInitAbstract is uint224 votes; } - bytes32 private constant _DELEGATION_TYPEHASH = + bytes32 internal constant _DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); - // keccak256('LSP7Tokens_VotesDelegatorNotification') - bytes32 constant _TYPEID_LSP7_VOTESDELEGATOR = - 0x6117a486162c4ba8e38d646ef52b1e0e1be6bef05a980c041e232eba8c95e16f; - - // keccak256('LSP7Tokens_VotesDelegateeNotification') - bytes32 constant _TYPEID_LSP7_VOTESDELEGATEE = - 0x72cad372b29cde295ff0839b7b194597766b88f5fad4f7d6aef013e0c55dc492; - mapping(address => address) private _delegates; mapping(address => Checkpoint[]) private _checkpoints; Checkpoint[] private _totalSupplyCheckpoints; From c5a9d4fb380fde15eb80bbc83baa577bc35dd5d7 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 28 Nov 2024 17:40:55 +0000 Subject: [PATCH 75/94] build: add .mjs to prettierrc --- .prettierrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.prettierrc b/.prettierrc index 7eaec9766..5e88c9cfc 100644 --- a/.prettierrc +++ b/.prettierrc @@ -2,7 +2,7 @@ "plugins": ["prettier-plugin-solidity"], "overrides": [ { - "files": ["*.js", "*.ts"], + "files": ["*.js", "*.ts", "*.mjs"], "options": { "tabWidth": 2, "printWidth": 100, From d54b08bd4afd6bbd6d02073dbd1b9ce8105403ff Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 28 Nov 2024 17:42:54 +0000 Subject: [PATCH 76/94] chore: prettify CHANGELOG --- .github/workflows/release.yml | 6 ++--- packages/lsp-smart-contracts/CHANGELOG.md | 27 ++++++++----------- packages/lsp0-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp1-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp10-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp12-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp14-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp16-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp17-contracts/CHANGELOG.md | 20 ++++++-------- .../CHANGELOG.md | 20 ++++++-------- packages/lsp1delegate-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp2-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp23-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp3-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp4-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp5-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp6-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp8-contracts/CHANGELOG.md | 20 ++++++-------- packages/lsp9-contracts/CHANGELOG.md | 20 ++++++-------- 19 files changed, 150 insertions(+), 223 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3629d8172..44d776d22 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -49,10 +49,10 @@ jobs: # `npm run build:js` will also generate the auto-generated constants for methods, errors and events, # including extracting their devdocs and userdocs - # `npm run build:types` will generate: + # `npm run build:types` will generate: # - the artifacts with abis for release (artifacts/*.json) - # - the wagmi hooks - # - the typed abis + # - the wagmi hooks (types/index.ts) + # - the typed abis (types/index.ts) - name: Prepare artifacts to publish if: ${{ steps.release.outputs.releases_created }} run: | diff --git a/packages/lsp-smart-contracts/CHANGELOG.md b/packages/lsp-smart-contracts/CHANGELOG.md index 3dd42fe22..9dc35fc16 100644 --- a/packages/lsp-smart-contracts/CHANGELOG.md +++ b/packages/lsp-smart-contracts/CHANGELOG.md @@ -56,47 +56,42 @@ All notable changes to this project will be documented in this file. See [standa ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp-smart-contracts-v0.15.0-rc.0...lsp-smart-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp-smart-contracts-v0.15.0-rc.0...lsp-smart-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp-smart-contracts-v0.15.0-rc.0...lsp-smart-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.14.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp-smart-contracts-v0.13.0...lsp-smart-contracts-v0.14.0) (2023-12-06) - ### ⚠ BREAKING CHANGES -* change set/get TokenId function name in LSP8 and `LSP8TokenIdSchema` to `LSP8TokenIdFormat` ([#822](https://github.com/lukso-network/lsp-smart-contracts/issues/822)) +- change set/get TokenId function name in LSP8 and `LSP8TokenIdSchema` to `LSP8TokenIdFormat` ([#822](https://github.com/lukso-network/lsp-smart-contracts/issues/822)) ### Code Refactoring -* change LSP4 Mapping data key from `bytes12` to `bytes10` ([#824](https://github.com/lukso-network/lsp-smart-contracts/pull/824)) -* change set/get TokenId function name in LSP8 and `LSP8TokenIdSchema` to `LSP8TokenIdFormat` ([#822](https://github.com/lukso-network/lsp-smart-contracts/issues/822)) ([2bf84f6](https://github.com/lukso-network/lsp-smart-contracts/commit/2bf84f638926a9969385ce12f98f389b26ca0173)) +- change LSP4 Mapping data key from `bytes12` to `bytes10` ([#824](https://github.com/lukso-network/lsp-smart-contracts/pull/824)) +- change set/get TokenId function name in LSP8 and `LSP8TokenIdSchema` to `LSP8TokenIdFormat` ([#822](https://github.com/lukso-network/lsp-smart-contracts/issues/822)) ([2bf84f6](https://github.com/lukso-network/lsp-smart-contracts/commit/2bf84f638926a9969385ce12f98f389b26ca0173)) ## [0.13.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp-smart-contracts-v0.13.0...lsp-smart-contracts-v0.12.1) (2023-11-30) diff --git a/packages/lsp0-contracts/CHANGELOG.md b/packages/lsp0-contracts/CHANGELOG.md index 26614a89a..b9626851c 100644 --- a/packages/lsp0-contracts/CHANGELOG.md +++ b/packages/lsp0-contracts/CHANGELOG.md @@ -54,32 +54,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp0-contracts-v0.15.0-rc.0...lsp0-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp0-contracts-v0.15.0-rc.0...lsp0-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp0-contracts-v0.14.0...lsp0-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp1-contracts/CHANGELOG.md b/packages/lsp1-contracts/CHANGELOG.md index 6f55ab3cb..e6eba0740 100644 --- a/packages/lsp1-contracts/CHANGELOG.md +++ b/packages/lsp1-contracts/CHANGELOG.md @@ -54,32 +54,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1-contracts-v0.15.0-rc.0...lsp1-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1-contracts-v0.15.0-rc.0...lsp1-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1-contracts-v0.14.0...lsp1-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp10-contracts/CHANGELOG.md b/packages/lsp10-contracts/CHANGELOG.md index a9970f5e7..5b95c92cf 100644 --- a/packages/lsp10-contracts/CHANGELOG.md +++ b/packages/lsp10-contracts/CHANGELOG.md @@ -44,32 +44,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp10-contracts-v0.15.0-rc.0...lsp10-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp10-contracts-v0.15.0-rc.0...lsp10-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp10-contracts-v0.14.0...lsp10-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp12-contracts/CHANGELOG.md b/packages/lsp12-contracts/CHANGELOG.md index cf60f5670..a5a53a68b 100644 --- a/packages/lsp12-contracts/CHANGELOG.md +++ b/packages/lsp12-contracts/CHANGELOG.md @@ -44,32 +44,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp12-contracts-v0.15.0-rc.0...lsp12-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp12-contracts-v0.15.0-rc.0...lsp12-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp12-contracts-v0.14.0...lsp12-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp14-contracts/CHANGELOG.md b/packages/lsp14-contracts/CHANGELOG.md index a79b2db59..de727acb7 100644 --- a/packages/lsp14-contracts/CHANGELOG.md +++ b/packages/lsp14-contracts/CHANGELOG.md @@ -49,32 +49,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp14-contracts-v0.15.0-rc.0...lsp14-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp14-contracts-v0.15.0-rc.0...lsp14-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp14-contracts-v0.14.0...lsp14-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp16-contracts/CHANGELOG.md b/packages/lsp16-contracts/CHANGELOG.md index 00438c231..44318253e 100644 --- a/packages/lsp16-contracts/CHANGELOG.md +++ b/packages/lsp16-contracts/CHANGELOG.md @@ -49,32 +49,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp16-contracts-v0.15.0-rc.0...lsp16-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp16-contracts-v0.15.0-rc.0...lsp16-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp16-contracts-v0.14.0...lsp16-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp17-contracts/CHANGELOG.md b/packages/lsp17-contracts/CHANGELOG.md index 831432d65..82c8288b8 100644 --- a/packages/lsp17-contracts/CHANGELOG.md +++ b/packages/lsp17-contracts/CHANGELOG.md @@ -49,32 +49,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17-contracts-v0.15.0-rc.0...lsp17-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17-contracts-v0.15.0-rc.0...lsp17-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17-contracts-v0.14.0...lsp17-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp17contractextension-contracts/CHANGELOG.md b/packages/lsp17contractextension-contracts/CHANGELOG.md index eb89ab7b7..a5a11fa5c 100644 --- a/packages/lsp17contractextension-contracts/CHANGELOG.md +++ b/packages/lsp17contractextension-contracts/CHANGELOG.md @@ -49,32 +49,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17contractextension-contracts-v0.15.0-rc.0...lsp17contractextension-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17contractextension-contracts-v0.15.0-rc.0...lsp17contractextension-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17contractextension-contracts-v0.14.0...lsp17contractextension-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp1delegate-contracts/CHANGELOG.md b/packages/lsp1delegate-contracts/CHANGELOG.md index 914d6a3f9..cd1c73d44 100644 --- a/packages/lsp1delegate-contracts/CHANGELOG.md +++ b/packages/lsp1delegate-contracts/CHANGELOG.md @@ -54,32 +54,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1delegate-contracts-v0.15.0-rc.0...lsp1delegate-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1delegate-contracts-v0.15.0-rc.0...lsp1delegate-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1delegate-contracts-v0.14.0...lsp1delegate-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp2-contracts/CHANGELOG.md b/packages/lsp2-contracts/CHANGELOG.md index 69fff3bfd..9a99aaf3c 100644 --- a/packages/lsp2-contracts/CHANGELOG.md +++ b/packages/lsp2-contracts/CHANGELOG.md @@ -44,32 +44,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp2-contracts-v0.15.0-rc.0...lsp2-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp2-contracts-v0.15.0-rc.0...lsp2-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp2-contracts-v0.14.0...lsp2-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp23-contracts/CHANGELOG.md b/packages/lsp23-contracts/CHANGELOG.md index 819081b8f..ad7ad08cf 100644 --- a/packages/lsp23-contracts/CHANGELOG.md +++ b/packages/lsp23-contracts/CHANGELOG.md @@ -54,32 +54,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp23-contracts-v0.15.0-rc.0...lsp23-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp23-contracts-v0.15.0-rc.0...lsp23-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp23-contracts-v0.14.0...lsp23-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp3-contracts/CHANGELOG.md b/packages/lsp3-contracts/CHANGELOG.md index e65230084..658c48d09 100644 --- a/packages/lsp3-contracts/CHANGELOG.md +++ b/packages/lsp3-contracts/CHANGELOG.md @@ -44,32 +44,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp3-contracts-v0.15.0-rc.0...lsp3-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp3-contracts-v0.15.0-rc.0...lsp3-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp3-contracts-v0.14.0...lsp3-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp4-contracts/CHANGELOG.md b/packages/lsp4-contracts/CHANGELOG.md index a3509455b..249344a19 100644 --- a/packages/lsp4-contracts/CHANGELOG.md +++ b/packages/lsp4-contracts/CHANGELOG.md @@ -54,32 +54,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp4-contracts-v0.15.0-rc.0...lsp4-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp4-contracts-v0.15.0-rc.0...lsp4-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp4-contracts-v0.14.0...lsp4-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp5-contracts/CHANGELOG.md b/packages/lsp5-contracts/CHANGELOG.md index 11f219409..36f2bb649 100644 --- a/packages/lsp5-contracts/CHANGELOG.md +++ b/packages/lsp5-contracts/CHANGELOG.md @@ -49,32 +49,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp5-contracts-v0.15.0-rc.0...lsp5-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp5-contracts-v0.15.0-rc.0...lsp5-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp5-contracts-v0.14.0...lsp5-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp6-contracts/CHANGELOG.md b/packages/lsp6-contracts/CHANGELOG.md index 53f45654b..5078a2ade 100644 --- a/packages/lsp6-contracts/CHANGELOG.md +++ b/packages/lsp6-contracts/CHANGELOG.md @@ -54,32 +54,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp6-contracts-v0.15.0-rc.0...lsp6-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp6-contracts-v0.15.0-rc.0...lsp6-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp6-contracts-v0.14.0...lsp6-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp8-contracts/CHANGELOG.md b/packages/lsp8-contracts/CHANGELOG.md index aa78e855f..7b3c288d5 100644 --- a/packages/lsp8-contracts/CHANGELOG.md +++ b/packages/lsp8-contracts/CHANGELOG.md @@ -59,32 +59,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp8-contracts-v0.15.0-rc.0...lsp8-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp8-contracts-v0.15.0-rc.0...lsp8-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp8-contracts-v0.15.0-rc.0...lsp8-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp9-contracts/CHANGELOG.md b/packages/lsp9-contracts/CHANGELOG.md index 1f0e29909..ed8a70e14 100644 --- a/packages/lsp9-contracts/CHANGELOG.md +++ b/packages/lsp9-contracts/CHANGELOG.md @@ -54,32 +54,28 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp9-contracts-v0.15.0-rc.0...lsp9-contracts-v0.15.0-rc.0) (2024-03-07) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp9-contracts-v0.15.0-rc.0...lsp9-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp9-contracts-v0.14.0...lsp9-contracts-v0.15.0-rc.0) (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) - ### Miscellaneous Chores -* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) From 9c8a93087cbd9e80f9e14d5320c21182403ef47f Mon Sep 17 00:00:00 2001 From: Maxime Date: Fri, 29 Nov 2024 09:28:07 +0000 Subject: [PATCH 77/94] refactor: lsp1typeidstester test for lsp7tokens_votes constants --- .../lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol b/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol index c4237d8ca..17496497b 100644 --- a/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol +++ b/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol @@ -65,10 +65,10 @@ contract LSP1TypeIDsTester { "LSP7Tokens_OperatorNotification" ] = _TYPEID_LSP7_TOKENOPERATOR; _typeIds[ - "LSP7Votes_VotesDelegatorNotification" + "LSP7Tokens_VotesDelegatorNotification" ] = _TYPEID_LSP7_VOTESDELEGATOR; _typeIds[ - "LSP7Votes_VotesDelegateeNotification" + "LSP7Tokens_VotesDelegateeNotification" ] = _TYPEID_LSP7_VOTESDELEGATEE; // ------------------ From 91d69ee4ef87093f8378a4b80b682679f73123b2 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Fri, 29 Nov 2024 20:02:38 +0700 Subject: [PATCH 78/94] docs: Natspec fixes --- .../contracts/LSP7DigitalAsset.sol | 2 +- .../LSP7DigitalAssetInitAbstract.sol | 6 ++--- .../contracts/extensions/LSP7Votes.sol | 22 +++++++++---------- .../extensions/LSP7VotesInitAbstract.sol | 22 +++++++++---------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol index d7fac7cf7..2f9d8c985 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol @@ -786,7 +786,7 @@ abstract contract LSP7DigitalAsset is } /** - * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` + * @dev Transfers `amount` of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol index f25c26ade..0217b92e6 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol @@ -136,7 +136,7 @@ abstract contract LSP7DigitalAssetInitAbstract is * * 2. If the data sent to this function is of length less than 4 bytes (not a function selector), revert. */ - // solhint-disable no-complex-fallback + // solhint-disable-next-line no-complex-fallback fallback( bytes calldata callData ) external payable virtual returns (bytes memory) { @@ -800,11 +800,11 @@ abstract contract LSP7DigitalAssetInitAbstract is } /** - * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` + * @dev Transfers `amount` of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * - * Emits a {Transfer} event. + * @custom:events {Transfer} event. */ function _update( address from, diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol index b5aaab5b3..738c8a92b 100644 --- a/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol +++ b/packages/lsp7-contracts/contracts/extensions/LSP7Votes.sol @@ -106,7 +106,7 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { /** * @dev Retrieve the number of votes for `account` at the end of `timepoint`. * - * @custom:requirement + * @custom:requirements * - `timepoint` must be in the past */ function getPastVotes( @@ -121,7 +121,7 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { * @dev Retrieve the `totalSupply` at the end of `timepoint`. Note, this value is the sum of all balances. * It is NOT the sum of all the delegated votes! * - * @custom:requirement + * @custom:requirements * - `timepoint` must be in the past */ function getPastTotalSupply( @@ -240,9 +240,9 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { /** * @dev Move voting power when tokens are transferred. * - * @custom:event - * - {IVotes-DelegateVotesChanged} when voting power is removed from source address - * - {IVotes-DelegateVotesChanged} when voting power is added to destination address + * @custom:events + * - {DelegateVotesChanged} when voting power is removed from source address + * - {DelegateVotesChanged} when voting power is added to destination address */ function _update( address from, @@ -266,9 +266,9 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { /** * @dev Change delegation for `delegator` to `delegatee`. * - * @custom:event - * - {IVotes-DelegateChanged} - * - {IVotes-DelegateVotesChanged} + * @custom:events + * - {DelegateChanged} + * - {DelegateVotesChanged} */ function _delegate(address delegator, address delegatee) internal virtual { address currentDelegate = delegates(delegator); @@ -312,9 +312,9 @@ abstract contract LSP7Votes is LSP7DigitalAsset, EIP712, IERC5805 { /** * @dev Moves voting power from one address to another. * - * @custom:event - * - {IVotes-DelegateVotesChanged} when voting power is removed from source address - * - {IVotes-DelegateVotesChanged} when voting power is added to destination address + * @custom:events + * - {DelegateVotesChanged} when voting power is removed from source address. + * - {DelegateVotesChanged} when voting power is added to destination address */ function _moveVotingPower( address src, diff --git a/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol b/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol index 1e0f444ff..8c7090b12 100644 --- a/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/extensions/LSP7VotesInitAbstract.sol @@ -133,7 +133,7 @@ abstract contract LSP7VotesInitAbstract is /** * @dev Retrieve the number of votes for `account` at the end of `timepoint`. * - * @custom:requirement + * @custom:requirements * - `timepoint` must be in the past */ function getPastVotes( @@ -148,7 +148,7 @@ abstract contract LSP7VotesInitAbstract is * @dev Retrieve the `totalSupply` at the end of `timepoint`. Note, this value is the sum of all balances. * It is NOT the sum of all the delegated votes! * - * @custom:requirement + * @custom:requirements * - `timepoint` must be in the past */ function getPastTotalSupply( @@ -267,9 +267,9 @@ abstract contract LSP7VotesInitAbstract is /** * @dev Move voting power when tokens are transferred. * - * @custom:event - * - {IVotes-DelegateVotesChanged} when voting power is removed from source address - * - {IVotes-DelegateVotesChanged} when voting power is added to destination address + * @custom:events + * - {DelegateVotesChanged} when voting power is removed from source address + * - {DelegateVotesChanged} when voting power is added to destination address */ function _update( address from, @@ -293,9 +293,9 @@ abstract contract LSP7VotesInitAbstract is /** * @dev Change delegation for `delegator` to `delegatee`. * - * @custom:event - * - {IVotes-DelegateChanged} - * - {IVotes-DelegateVotesChanged} + * @custom:events + * - {DelegateChanged} + * - {DelegateVotesChanged} */ function _delegate(address delegator, address delegatee) internal virtual { address currentDelegate = delegates(delegator); @@ -339,9 +339,9 @@ abstract contract LSP7VotesInitAbstract is /** * @dev Moves voting power from one address to another. * - * @custom:event - * - {IVotes-DelegateVotesChanged} when voting power is removed from source address - * - {IVotes-DelegateVotesChanged} when voting power is added to destination address + * @custom:events + * - {DelegateVotesChanged} when voting power is removed from source address + * - {DelegateVotesChanged} when voting power is added to destination address */ function _moveVotingPower( address src, From b8490290cf5675f223ed0a0dbfd3e97a7a8489f6 Mon Sep 17 00:00:00 2001 From: b00ste Date: Tue, 26 Nov 2024 14:42:14 +0200 Subject: [PATCH 79/94] ci: add CI workflow to check for grammar errors --- .github/workflows/spellcheck.yaml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/spellcheck.yaml diff --git a/.github/workflows/spellcheck.yaml b/.github/workflows/spellcheck.yaml new file mode 100644 index 000000000..c030aa7c3 --- /dev/null +++ b/.github/workflows/spellcheck.yaml @@ -0,0 +1,29 @@ +# This workflow checks for common grammar and spelling mistake in markdown files. + name: Spellcheck + on: [pull_request] + + jobs: + build: + name: Check Grammar and Spelling errors + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install ⚙️ + run: npm ci + + - name: Check spelling errors in code snippets 🔍 + uses: codespell-project/actions-codespell@v2 + with: + path: packages/lsp-smart-contracts/docs + check_filenames: true + ignore_words_list: datas + + - name: Output Spellcheck Results 📝 + uses: actions/upload-artifact@v3 + with: + name: Spellcheck Output + path: spellcheck-output.txt \ No newline at end of file From 7cb4efca678aac172fb503e68d9255e7c0a837d5 Mon Sep 17 00:00:00 2001 From: b00ste Date: Tue, 26 Nov 2024 14:51:02 +0200 Subject: [PATCH 80/94] docs: grammar issues --- CONTRIBUTING.md | 2 +- .../LSP0ERC725Account/LSP0ERC725Account.md | 2 +- .../contracts/LSP0ERC725Account.md | 2 +- .../LSP11BasicSocialRecovery.md | 6 +++--- .../LSP17ContractExtension/LSP17Extendable.md | 4 ++-- .../contracts/LSP17Extendable.md | 4 ++-- .../LSP1UniversalReceiverDelegateUP.md | 4 ++-- .../LSP1UniversalReceiverDelegateVault.md | 6 +++--- .../LSP23LinkedContractsFactory.md | 16 +++++++-------- .../contracts/LSP23LinkedContractsFactory.md | 8 ++++---- .../contracts/LSP25MultiChannelNonce.md | 2 +- .../contracts/LSP6KeyManager.md | 4 ++-- .../contracts/LSP7DigitalAsset.md | 8 ++++---- .../contracts/presets/LSP7Mintable.md | 2 +- .../extensions/LSP7Burnable.md | 8 ++++---- .../extensions/LSP7CappedSupply.md | 8 ++++---- .../LSP7DigitalAsset/presets/LSP7Mintable.md | 10 +++++----- .../LSP8IdentifiableDigitalAsset.md | 12 +++++------ .../contracts/LSP8IdentifiableDigitalAsset.md | 6 +++--- .../extensions/LSP8Burnable.md | 18 ++++++++--------- .../extensions/LSP8CappedSupply.md | 18 ++++++++--------- .../extensions/LSP8Enumerable.md | 16 +++++++-------- .../presets/LSP8Mintable.md | 20 +++++++++---------- .../docs/contracts/LSP9Vault/LSP9Vault.md | 2 +- .../LSP9Vault/contracts/LSP9Vault.md | 2 +- .../UniversalProfile/UniversalProfile.md | 2 +- .../contracts/UniversalProfile.md | 2 +- .../LSP1UniversalReceiver/LSP1Utils.md | 2 +- .../contracts/LSP1Utils.md | 2 +- .../contracts/LSP0ERC725AccountCore.sol | 2 +- .../lsp1-contracts/contracts/LSP1Utils.sol | 2 +- .../contracts/LSP17Extendable.sol | 4 ++-- .../contracts/LSP17ExtendableInitAbstract.sol | 4 ++-- .../lsp23-contracts/contracts/LSP23Errors.sol | 8 ++++---- .../contracts/LSP25MultiChannelNonce.sol | 2 +- .../Mocks/KeyManagerInternalsTester.sol | 2 +- .../contracts/LSP9VaultCore.sol | 2 +- 37 files changed, 112 insertions(+), 112 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2806c9f43..7b64e6b93 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -145,7 +145,7 @@ Which is is not the intended output. 3. `@return` tag is mandatory if the function has any return value. -4. Make sure to use one of the custom tags below to document any additional informations of different kinds: +4. Make sure to use one of the custom tags below to document any additional information of different kinds: - Use `@custom:requirements` for all the requirements to use a function. - Use `@custom:events` for all the emited events during the function execution. diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/LSP0ERC725Account.md b/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/LSP0ERC725Account.md index 8ba13d64b..c9c5e6b2e 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/LSP0ERC725Account.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/LSP0ERC725Account.md @@ -847,7 +847,7 @@ function universalReceiver( ) external payable returns (bytes returnedValues); ``` -_Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`._ +_Notifying the contract by calling its `universalReceiver` function with the following information: typeId: `typeId`; data: `data`._ Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. The function performs the following steps: diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/contracts/LSP0ERC725Account.md b/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/contracts/LSP0ERC725Account.md index 8ba13d64b..c9c5e6b2e 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/contracts/LSP0ERC725Account.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP0ERC725Account/contracts/LSP0ERC725Account.md @@ -847,7 +847,7 @@ function universalReceiver( ) external payable returns (bytes returnedValues); ``` -_Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`._ +_Notifying the contract by calling its `universalReceiver` function with the following information: typeId: `typeId`; data: `data`._ Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. The function performs the following steps: diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.md b/packages/lsp-smart-contracts/docs/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.md index 0bb2c8512..4ea49a9ee 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.md @@ -353,7 +353,7 @@ Leaves the contract without owner. It will not be possible to call `onlyOwner` f function selectNewController(address addressSelected) external nonpayable; ``` -select an address to be a potentiel controller address if he reaches the guardian threshold and provide the correct secret string Requirements: +select an address to be a potential controller address if he reaches the guardian threshold and provide the correct secret string Requirements: - only guardians can select an address @@ -559,7 +559,7 @@ function _cleanStorage( ) internal nonpayable; ``` -Remove the guardians choice after a successfull recovery process +Remove the guardians choice after a successful recovery process To avoid keeping unnecessary state
@@ -745,7 +745,7 @@ event SelectedNewController( ); ``` -_Emitted when a guardian select a new potentiel controller address for the target_ +_Emitted when a guardian select a new potential controller address for the target_ #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/LSP17Extendable.md b/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/LSP17Extendable.md index 35b71173d..917cda0a5 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/LSP17Extendable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/LSP17Extendable.md @@ -88,8 +88,8 @@ function _getExtensionAndForwardValue( Returns the extension mapped to a specific function selector If no extension was found, return the address(0) -To be overrided. -Up to the implementor contract to return an extension based on a function selector +To be overridden. +Up to the implementer contract to return an extension based on a function selector
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extendable.md b/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extendable.md index 35b71173d..917cda0a5 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extendable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP17ContractExtension/contracts/LSP17Extendable.md @@ -88,8 +88,8 @@ function _getExtensionAndForwardValue( Returns the extension mapped to a specific function selector If no extension was found, return the address(0) -To be overrided. -Up to the implementor contract to return an extension based on a function selector +To be overridden. +Up to the implementer contract to return an extension based on a function selector
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateUP.md b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateUP.md index c14868d52..7900ad01d 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateUP.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateUP.md @@ -96,8 +96,8 @@ See [`IERC165-supportsInterface`](#ierc165-supportsinterface). :::info -- If some issues occured with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. -- If an error occured when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. +- If some issues occurred with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. +- If an error occurred when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. ::: diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateVault.md b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateVault.md index d0356d3bd..21e75e7b2 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateVault.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP1UniversalReceiver/contracts/LSP1UniversalReceiverDelegateVault.md @@ -94,8 +94,8 @@ See [`IERC165-supportsInterface`](#ierc165-supportsinterface). :::info -- If some issues occured with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. -- If an error occured when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. +- If some issues occurred with generating the `dataKeys` or `dataValues` the `returnedMessage` will be an error message, otherwise it will be empty. +- If an error occurred when trying to use `setDataBatch(dataKeys,dataValues)`, it will return the raw error data back to the caller. ::: @@ -194,7 +194,7 @@ function _setDataBatchWithoutReverting( ) internal nonpayable returns (bytes); ``` -Calls `bytes4(keccak256(setDataBatch(bytes32[],bytes[])))` without checking for `bool succes`, but it returns all the data back. +Calls `bytes4(keccak256(setDataBatch(bytes32[],bytes[])))` without checking for `bool success`, but it returns all the data back. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/LSP23LinkedContractsFactory.md b/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/LSP23LinkedContractsFactory.md index f1044092b..b68057a0a 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/LSP23LinkedContractsFactory.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/LSP23LinkedContractsFactory.md @@ -365,13 +365,13 @@ error PrimaryContractProxyInitFailureError(bytes errorData); _Failed to deploy & initialize the Primary Contract Proxy. Error: `errorData`._ -Reverts when the deployment & intialization of the contract has failed. +Reverts when the deployment & initialization of the contract has failed. #### Parameters -| Name | Type | Description | -| ----------- | :-----: | ----------------------------------------------------------------------------- | -| `errorData` | `bytes` | Potentially information about why the deployment & intialization have failed. | +| Name | Type | Description | +| ----------- | :-----: | ------------------------------------------------------------------------------ | +| `errorData` | `bytes` | Potentially information about why the deployment & initialization have failed. |
@@ -392,12 +392,12 @@ error SecondaryContractProxyInitFailureError(bytes errorData); _Failed to deploy & initialize the Secondary Contract Proxy. Error: `errorData`._ -Reverts when the deployment & intialization of the secondary contract has failed. +Reverts when the deployment & initialization of the secondary contract has failed. #### Parameters -| Name | Type | Description | -| ----------- | :-----: | ----------------------------------------------------------------------------- | -| `errorData` | `bytes` | Potentially information about why the deployment & intialization have failed. | +| Name | Type | Description | +| ----------- | :-----: | ------------------------------------------------------------------------------ | +| `errorData` | `bytes` | Potentially information about why the deployment & initialization have failed. |
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/LSP23LinkedContractsFactory.md b/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/LSP23LinkedContractsFactory.md index f1044092b..ccaf7be87 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/LSP23LinkedContractsFactory.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP23LinkedContractsFactory/contracts/LSP23LinkedContractsFactory.md @@ -365,13 +365,13 @@ error PrimaryContractProxyInitFailureError(bytes errorData); _Failed to deploy & initialize the Primary Contract Proxy. Error: `errorData`._ -Reverts when the deployment & intialization of the contract has failed. +Reverts when the deployment & initialization of the contract has failed. #### Parameters | Name | Type | Description | | ----------- | :-----: | ----------------------------------------------------------------------------- | -| `errorData` | `bytes` | Potentially information about why the deployment & intialization have failed. | +| `errorData` | `bytes` | Potentially information about why the deployment & initialization have failed. |
@@ -392,12 +392,12 @@ error SecondaryContractProxyInitFailureError(bytes errorData); _Failed to deploy & initialize the Secondary Contract Proxy. Error: `errorData`._ -Reverts when the deployment & intialization of the secondary contract has failed. +Reverts when the deployment & initialization of the secondary contract has failed. #### Parameters | Name | Type | Description | | ----------- | :-----: | ----------------------------------------------------------------------------- | -| `errorData` | `bytes` | Potentially information about why the deployment & intialization have failed. | +| `errorData` | `bytes` | Potentially information about why the deployment & initialization have failed. |
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP25ExecuteRelayCall/contracts/LSP25MultiChannelNonce.md b/packages/lsp-smart-contracts/docs/contracts/LSP25ExecuteRelayCall/contracts/LSP25MultiChannelNonce.md index e8c211075..0ebf8547e 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP25ExecuteRelayCall/contracts/LSP25MultiChannelNonce.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP25ExecuteRelayCall/contracts/LSP25MultiChannelNonce.md @@ -16,7 +16,7 @@ > Implementation of the multi channel nonce and the signature verification defined in the LSP25 standard. -This contract can be used as a backbone for other smart contracts to implement meta-transactions via the LSP25 Execute Relay Call interface. It contains a storage of nonces for signer addresses across various channel IDs, enabling these signers to submit signed transactions that order-independant. (transactions that do not need to be submitted one after the other in a specific order). Finally, it contains internal functions to verify signatures for specific calldata according the signature format specified in the LSP25 standard. +This contract can be used as a backbone for other smart contracts to implement meta-transactions via the LSP25 Execute Relay Call interface. It contains a storage of nonces for signer addresses across various channel IDs, enabling these signers to submit signed transactions that order-independent. (transactions that do not need to be submitted one after the other in a specific order). Finally, it contains internal functions to verify signatures for specific calldata according the signature format specified in the LSP25 standard. ## Internal Methods diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md b/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md index 4bbcfeb3b..2549ba168 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP6KeyManager/contracts/LSP6KeyManager.md @@ -286,7 +286,7 @@ Same as [`executeRelayCall`](#executerelaycall) but execute a batch of signed ca A signer can choose its channel number arbitrarily. The recommended practice is to: - use `channelId == 0` for transactions for which the ordering of execution matters.abi _Example: you have two transactions A and B, and transaction A must be executed first and complete successfully before transaction B should be executed)._ -- use any other `channelId` number for transactions that you want to be order independant (out-of-order execution, execution _"in parallel"_). \_Example: you have two transactions A and B. You want transaction B to be executed a) without having to wait for transaction A to complete, or b) regardless if transaction A completed successfully or not. +- use any other `channelId` number for transactions that you want to be order independent (out-of-order execution, execution _"in parallel"_). \_Example: you have two transactions A and B. You want transaction B to be executed a) without having to wait for transaction A to complete, or b) regardless if transaction A completed successfully or not. ::: @@ -401,7 +401,7 @@ function lsp20VerifyCall( | Name | Type | Description | | ---- | :------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `0` | `bytes4` | MUST return the first 3 bytes of `lsp20VerifyCall(address,uint256,bytes)` function selector if the call to the function is allowed, concatened with a byte that determines if the lsp20VerifyCallResult function should be called after the original function call. The byte that invoke the lsp20VerifyCallResult function is strictly `0x01`. | +| `0` | `bytes4` | MUST return the first 3 bytes of `lsp20VerifyCall(address,uint256,bytes)` function selector if the call to the function is allowed, concatenated with a byte that determines if the lsp20VerifyCallResult function should be called after the original function call. The byte that invoke the lsp20VerifyCallResult function is strictly `0x01`. |
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/LSP7DigitalAsset.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/LSP7DigitalAsset.md index 2bbcd5109..f0e6459ca 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/LSP7DigitalAsset.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/LSP7DigitalAsset.md @@ -234,7 +234,7 @@ Allows a caller to batch different function calls in one call. Perform a `delega function decimals() external view returns (uint8); ``` -Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned will be `0`. Otherwise `18` is the common value. #### Returns @@ -937,7 +937,7 @@ Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOw | --------------- | :-------: | ------------------------------------------------------------------- | | `operator` | `address` | The address of the operator to decrease the allowance of. | | `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | -| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to subtract in allowance of `operator`. |
@@ -1001,7 +1001,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1026,7 +1026,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md index af161f73a..3a36d3a68 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/contracts/presets/LSP7Mintable.md @@ -40,7 +40,7 @@ constructor( ); ``` -_Deploying a `LSP7Mintable` token contract with: token name = `name_`, token symbol = `symbol_`, and address `newOwner_` as the token contract owner._ +_Deploying a `LSP7Mintable` token contract with: token name = `name_`, token symbol = `symbol*`, and address `newOwner*` as the token contract owner.\_ #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/extensions/LSP7Burnable.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/extensions/LSP7Burnable.md index d5ecec050..88247cfaa 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/extensions/LSP7Burnable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/extensions/LSP7Burnable.md @@ -259,7 +259,7 @@ See internal [`_burn`](#_burn) function for details. function decimals() external view returns (uint8); ``` -Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned will be `0`. Otherwise `18` is the common value. #### Returns @@ -962,7 +962,7 @@ Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOw | --------------- | :-------: | ------------------------------------------------------------------- | | `operator` | `address` | The address of the operator to decrease the allowance of. | | `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | -| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to subtract in allowance of `operator`. |
@@ -1026,7 +1026,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1051,7 +1051,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/extensions/LSP7CappedSupply.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/extensions/LSP7CappedSupply.md index 5c0d29917..9dc8436fb 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/extensions/LSP7CappedSupply.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/extensions/LSP7CappedSupply.md @@ -232,7 +232,7 @@ Allows a caller to batch different function calls in one call. Perform a `delega function decimals() external view returns (uint8); ``` -Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned will be `0`. Otherwise `18` is the common value. #### Returns @@ -936,7 +936,7 @@ Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOw | --------------- | :-------: | ------------------------------------------------------------------- | | `operator` | `address` | The address of the operator to decrease the allowance of. | | `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | -| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to subtract in allowance of `operator`. |
@@ -1000,7 +1000,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1025,7 +1025,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/presets/LSP7Mintable.md b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/presets/LSP7Mintable.md index 99fde2ae2..3a36d3a68 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/presets/LSP7Mintable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP7DigitalAsset/presets/LSP7Mintable.md @@ -40,7 +40,7 @@ constructor( ); ``` -_Deploying a `LSP7Mintable` token contract with: token name = `name_`, token symbol = `symbol_`, and address `newOwner_` as the token contract owner._ +_Deploying a `LSP7Mintable` token contract with: token name = `name_`, token symbol = `symbol*`, and address `newOwner*` as the token contract owner.\_ #### Parameters @@ -265,7 +265,7 @@ Allows a caller to batch different function calls in one call. Perform a `delega function decimals() external view returns (uint8); ``` -Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned wiil be `0`. Otherwise `18` is the common value. +Returns the number of decimals used to get its user representation. If the asset contract has been set to be non-divisible via the `isNonDivisible_` parameter in the `constructor`, the decimals returned will be `0`. Otherwise `18` is the common value. #### Returns @@ -1001,7 +1001,7 @@ Spend `amountToSpend` from the `operator`'s authorized on behalf of the `tokenOw | --------------- | :-------: | ------------------------------------------------------------------- | | `operator` | `address` | The address of the operator to decrease the allowance of. | | `tokenOwner` | `address` | The address that granted an allowance on its balance to `operator`. | -| `amountToSpend` | `uint256` | The amount of tokens to substract in allowance of `operator`. | +| `amountToSpend` | `uint256` | The amount of tokens to subtract in allowance of `operator`. |
@@ -1065,7 +1065,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1090,7 +1090,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md index 85dff69bb..64271de71 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md @@ -764,13 +764,13 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If #### Parameters -| Name | Type | Description | -| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `from` | `address` | The address that owns the given `tokenId`. | -| `to` | `address` | The address that will receive the `tokenId`. | -| `tokenId` | `bytes32` | The token ID to transfer. | +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address that owns the given `tokenId`. | +| `to` | `address` | The address that will receive the `tokenId`. | +| `tokenId` | `bytes32` | The token ID to transfer. | | `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | -| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/LSP8IdentifiableDigitalAsset.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/LSP8IdentifiableDigitalAsset.md index aa24a6377..85dff69bb 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/LSP8IdentifiableDigitalAsset.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/contracts/LSP8IdentifiableDigitalAsset.md @@ -769,7 +769,7 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If | `from` | `address` | The address that owns the given `tokenId`. | | `to` | `address` | The address that will receive the `tokenId`. | | `tokenId` | `bytes32` | The token ID to transfer. | -| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | | `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
@@ -1185,7 +1185,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1210,7 +1210,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Burnable.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Burnable.md index 3d623117a..23aa4e0ea 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Burnable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Burnable.md @@ -790,13 +790,13 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If #### Parameters -| Name | Type | Description | -| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `from` | `address` | The address that owns the given `tokenId`. | -| `to` | `address` | The address that will receive the `tokenId`. | -| `tokenId` | `bytes32` | The token ID to transfer. | -| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | -| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address that owns the given `tokenId`. | +| `to` | `address` | The address that will receive the `tokenId`. | +| `tokenId` | `bytes32` | The token ID to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
@@ -1211,7 +1211,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1236,7 +1236,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8CappedSupply.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8CappedSupply.md index 9841715d8..867085f84 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8CappedSupply.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8CappedSupply.md @@ -789,13 +789,13 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If #### Parameters -| Name | Type | Description | -| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `from` | `address` | The address that owns the given `tokenId`. | -| `to` | `address` | The address that will receive the `tokenId`. | -| `tokenId` | `bytes32` | The token ID to transfer. | -| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | -| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address that owns the given `tokenId`. | +| `to` | `address` | The address that will receive the `tokenId`. | +| `tokenId` | `bytes32` | The token ID to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
@@ -1185,7 +1185,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1210,7 +1210,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Enumerable.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Enumerable.md index 37095361c..d7fb613da 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Enumerable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Enumerable.md @@ -795,13 +795,13 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If #### Parameters -| Name | Type | Description | -| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `from` | `address` | The address that owns the given `tokenId`. | -| `to` | `address` | The address that will receive the `tokenId`. | -| `tokenId` | `bytes32` | The token ID to transfer. | -| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | -| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address that owns the given `tokenId`. | +| `to` | `address` | The address that will receive the `tokenId`. | +| `tokenId` | `bytes32` | The token ID to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
@@ -1238,7 +1238,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/presets/LSP8Mintable.md b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/presets/LSP8Mintable.md index bdaaa1fce..82bcb32c5 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/presets/LSP8Mintable.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP8IdentifiableDigitalAsset/presets/LSP8Mintable.md @@ -40,7 +40,7 @@ constructor( ); ``` -_Deploying a `LSP8Mintable` token contract with: token name = `name_`, token symbol = `symbol_`, and address `newOwner_` as the token contract owner._ +_Deploying a `LSP8Mintable` token contract with: token name = `name_`, token symbol = `symbol*`, and address `newOwner*` as the token contract owner.\_ #### Parameters @@ -830,13 +830,13 @@ Transfer a given `tokenId` token from the `from` address to the `to` address. If #### Parameters -| Name | Type | Description | -| --------- | :-------: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `from` | `address` | The address that owns the given `tokenId`. | -| `to` | `address` | The address that will receive the `tokenId`. | -| `tokenId` | `bytes32` | The token ID to transfer. | -| `force` | `bool` | When set to `true`, the `to` address CAN be any addres. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | -| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. | +| Name | Type | Description | +| --------- | :-------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `from` | `address` | The address that owns the given `tokenId`. | +| `to` | `address` | The address that will receive the `tokenId`. | +| `tokenId` | `bytes32` | The token ID to transfer. | +| `force` | `bool` | When set to `true`, the `to` address CAN be any address. When set to `false`, the `to` address MUST be a contract that supports the LSP1 UniversalReceiver standard. | +| `data` | `bytes` | Any additional data the caller wants included in the emitted event, and sent in the hooks of the `from` and `to` addresses. |
@@ -1251,7 +1251,7 @@ function _beforeTokenTransfer( ``` Hook that is called before any token transfer, including minting and burning. -Allows to run custom logic before updating balances and notifiying sender/recipient by overriding this function. +Allows to run custom logic before updating balances and notifying sender/recipient by overriding this function. #### Parameters @@ -1276,7 +1276,7 @@ function _afterTokenTransfer( ``` Hook that is called after any token transfer, including minting and burning. -Allows to run custom logic after updating balances, but **before notifiying sender/recipient via LSP1** by overriding this function. +Allows to run custom logic after updating balances, but **before notifying sender/recipient via LSP1** by overriding this function. #### Parameters diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/LSP9Vault.md b/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/LSP9Vault.md index f66fbb91d..6d7de77fe 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/LSP9Vault.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/LSP9Vault.md @@ -764,7 +764,7 @@ function universalReceiver( ) external payable returns (bytes returnedValues); ``` -_Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`._ +_Notifying the contract by calling its `universalReceiver` function with the following information: typeId: `typeId`; data: `data`._ Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. The function performs the following steps: diff --git a/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/contracts/LSP9Vault.md b/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/contracts/LSP9Vault.md index f66fbb91d..6d7de77fe 100644 --- a/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/contracts/LSP9Vault.md +++ b/packages/lsp-smart-contracts/docs/contracts/LSP9Vault/contracts/LSP9Vault.md @@ -764,7 +764,7 @@ function universalReceiver( ) external payable returns (bytes returnedValues); ``` -_Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`._ +_Notifying the contract by calling its `universalReceiver` function with the following information: typeId: `typeId`; data: `data`._ Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. The function performs the following steps: diff --git a/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/UniversalProfile.md b/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/UniversalProfile.md index 593901c01..db67c9f3f 100644 --- a/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/UniversalProfile.md +++ b/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/UniversalProfile.md @@ -776,7 +776,7 @@ function universalReceiver( ) external payable returns (bytes returnedValues); ``` -_Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`._ +_Notifying the contract by calling its `universalReceiver` function with the following information: typeId: `typeId`; data: `data`._ Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. The function performs the following steps: diff --git a/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/contracts/UniversalProfile.md b/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/contracts/UniversalProfile.md index 593901c01..db67c9f3f 100644 --- a/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/contracts/UniversalProfile.md +++ b/packages/lsp-smart-contracts/docs/contracts/UniversalProfile/contracts/UniversalProfile.md @@ -776,7 +776,7 @@ function universalReceiver( ) external payable returns (bytes returnedValues); ``` -_Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`._ +_Notifying the contract by calling its `universalReceiver` function with the following information: typeId: `typeId`; data: `data`._ Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. The function performs the following steps: diff --git a/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/LSP1Utils.md b/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/LSP1Utils.md index b57da1178..d0302372e 100644 --- a/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/LSP1Utils.md +++ b/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/LSP1Utils.md @@ -16,7 +16,7 @@ > LSP1 Utility library. -LSP1Utils is a library of utility functions that can be used to notify the `universalReceiver` function of a contract that implements LSP1 and retrieve informations related to LSP1 `typeId`. Based on LSP1 Universal Receiver standard. +LSP1Utils is a library of utility functions that can be used to notify the `universalReceiver` function of a contract that implements LSP1 and retrieve information related to LSP1 `typeId`. Based on LSP1 Universal Receiver standard. ## Internal Methods diff --git a/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/contracts/LSP1Utils.md b/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/contracts/LSP1Utils.md index b57da1178..d0302372e 100644 --- a/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/contracts/LSP1Utils.md +++ b/packages/lsp-smart-contracts/docs/libraries/LSP1UniversalReceiver/contracts/LSP1Utils.md @@ -16,7 +16,7 @@ > LSP1 Utility library. -LSP1Utils is a library of utility functions that can be used to notify the `universalReceiver` function of a contract that implements LSP1 and retrieve informations related to LSP1 `typeId`. Based on LSP1 Universal Receiver standard. +LSP1Utils is a library of utility functions that can be used to notify the `universalReceiver` function of a contract that implements LSP1 and retrieve information related to LSP1 `typeId`. Based on LSP1 Universal Receiver standard. ## Internal Methods diff --git a/packages/lsp0-contracts/contracts/LSP0ERC725AccountCore.sol b/packages/lsp0-contracts/contracts/LSP0ERC725AccountCore.sol index 9ea51e2f8..c38d7f971 100644 --- a/packages/lsp0-contracts/contracts/LSP0ERC725AccountCore.sol +++ b/packages/lsp0-contracts/contracts/LSP0ERC725AccountCore.sol @@ -424,7 +424,7 @@ abstract contract LSP0ERC725AccountCore is } /** - * @notice Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`. + * @notice Notifying the contract by calling its `universalReceiver` function with the following information: typeId: `typeId`; data: `data`. * * @dev Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. * The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. diff --git a/packages/lsp1-contracts/contracts/LSP1Utils.sol b/packages/lsp1-contracts/contracts/LSP1Utils.sol index 6b541115e..f47162d76 100644 --- a/packages/lsp1-contracts/contracts/LSP1Utils.sol +++ b/packages/lsp1-contracts/contracts/LSP1Utils.sol @@ -21,7 +21,7 @@ import { * @title LSP1 Utility library. * @author Jean Cavallera , Yamen Merhi , Daniel Afteni * @dev LSP1Utils is a library of utility functions that can be used to notify the `universalReceiver` function of a contract - * that implements LSP1 and retrieve informations related to LSP1 `typeId`. + * that implements LSP1 and retrieve information related to LSP1 `typeId`. * Based on LSP1 Universal Receiver standard. */ library LSP1Utils { diff --git a/packages/lsp17contractextension-contracts/contracts/LSP17Extendable.sol b/packages/lsp17contractextension-contracts/contracts/LSP17Extendable.sol index 21d7d4c63..121654745 100644 --- a/packages/lsp17contractextension-contracts/contracts/LSP17Extendable.sol +++ b/packages/lsp17contractextension-contracts/contracts/LSP17Extendable.sol @@ -59,8 +59,8 @@ abstract contract LSP17Extendable is ERC165 { /** * @dev Returns the extension mapped to a specific function selector * If no extension was found, return the address(0) - * To be overrided. - * Up to the implementor contract to return an extension based on a function selector + * To be overridden. + * Up to the implementer contract to return an extension based on a function selector */ function _getExtensionAndForwardValue( bytes4 functionSelector diff --git a/packages/lsp17contractextension-contracts/contracts/LSP17ExtendableInitAbstract.sol b/packages/lsp17contractextension-contracts/contracts/LSP17ExtendableInitAbstract.sol index 99290b21a..565cdd0f4 100644 --- a/packages/lsp17contractextension-contracts/contracts/LSP17ExtendableInitAbstract.sol +++ b/packages/lsp17contractextension-contracts/contracts/LSP17ExtendableInitAbstract.sol @@ -61,8 +61,8 @@ abstract contract LSP17ExtendableInitAbstract is ERC165Upgradeable { /** * @dev Returns the extension mapped to a specific function selector * If no extension was found, return the address(0) - * To be overrided. - * Up to the implementor contract to return an extension based on a function selector + * To be overridden. + * Up to the implementer contract to return an extension based on a function selector */ function _getExtensionAndForwardValue( bytes4 functionSelector diff --git a/packages/lsp23-contracts/contracts/LSP23Errors.sol b/packages/lsp23-contracts/contracts/LSP23Errors.sol index c1a661ae8..28eacd929 100644 --- a/packages/lsp23-contracts/contracts/LSP23Errors.sol +++ b/packages/lsp23-contracts/contracts/LSP23Errors.sol @@ -8,17 +8,17 @@ pragma solidity ^0.8.4; error InvalidValueSum(); /** - * @dev Reverts when the deployment & intialization of the contract has failed. + * @dev Reverts when the deployment & initialization of the contract has failed. * @notice Failed to deploy & initialize the Primary Contract Proxy. Error: `errorData`. * - * @param errorData Potentially information about why the deployment & intialization have failed. + * @param errorData Potentially information about why the deployment & initialization have failed. */ error PrimaryContractProxyInitFailureError(bytes errorData); /** - * @dev Reverts when the deployment & intialization of the secondary contract has failed. + * @dev Reverts when the deployment & initialization of the secondary contract has failed. * @notice Failed to deploy & initialize the Secondary Contract Proxy. Error: `errorData`. * - * @param errorData Potentially information about why the deployment & intialization have failed. + * @param errorData Potentially information about why the deployment & initialization have failed. */ error SecondaryContractProxyInitFailureError(bytes errorData); diff --git a/packages/lsp25-contracts/contracts/LSP25MultiChannelNonce.sol b/packages/lsp25-contracts/contracts/LSP25MultiChannelNonce.sol index 7e43cb9d9..03e6316e3 100644 --- a/packages/lsp25-contracts/contracts/LSP25MultiChannelNonce.sol +++ b/packages/lsp25-contracts/contracts/LSP25MultiChannelNonce.sol @@ -15,7 +15,7 @@ import {RelayCallBeforeStartTime, RelayCallExpired} from "./LSP25Errors.sol"; * @author Jean Cavallera (CJ42) * @dev This contract can be used as a backbone for other smart contracts to implement meta-transactions via the LSP25 Execute Relay Call interface. * - * It contains a storage of nonces for signer addresses across various channel IDs, enabling these signers to submit signed transactions that order-independant. + * It contains a storage of nonces for signer addresses across various channel IDs, enabling these signers to submit signed transactions that order-independent. * (transactions that do not need to be submitted one after the other in a specific order). * * Finally, it contains internal functions to verify signatures for specific calldata according the signature format specified in the LSP25 standard. diff --git a/packages/lsp6-contracts/contracts/Mocks/KeyManagerInternalsTester.sol b/packages/lsp6-contracts/contracts/Mocks/KeyManagerInternalsTester.sol index e48ccaa55..7e13c43b4 100644 --- a/packages/lsp6-contracts/contracts/Mocks/KeyManagerInternalsTester.sol +++ b/packages/lsp6-contracts/contracts/Mocks/KeyManagerInternalsTester.sol @@ -117,7 +117,7 @@ contract KeyManagerInternalTester is LSP6KeyManager { super._verifyPermissions(_target, from, false, payload); // This event is emitted just for a sake of not marking this function as `view`, - // as Hardhat has a bug that does not catch error that occured from failed `abi.decode` + // as Hardhat has a bug that does not catch error that occurred from failed `abi.decode` // inside view functions. // See these issues in the Github repository of Hardhat: // - https://github.com/NomicFoundation/hardhat/issues/3084 diff --git a/packages/lsp9-contracts/contracts/LSP9VaultCore.sol b/packages/lsp9-contracts/contracts/LSP9VaultCore.sol index 7f0754286..e5abaf67d 100644 --- a/packages/lsp9-contracts/contracts/LSP9VaultCore.sol +++ b/packages/lsp9-contracts/contracts/LSP9VaultCore.sol @@ -315,7 +315,7 @@ contract LSP9VaultCore is } /** - * @notice Notifying the contract by calling its `universalReceiver` function with the following informations: typeId: `typeId`; data: `data`. + * @notice Notifying the contract by calling its `universalReceiver` function with the following information: typeId: `typeId`; data: `data`. * * @dev Achieves the goal of [LSP-1-UniversalReceiver] by allowing the account to be notified about incoming/outgoing transactions and enabling reactions to these actions. * The reaction is achieved by having two external contracts ([LSP1UniversalReceiverDelegate]) that react on the whole transaction and on the specific typeId, respectively. From a095ed5718cd003dbf8cdda0984f024fae6f8200 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Tue, 3 Dec 2024 20:06:47 +0700 Subject: [PATCH 81/94] build: mark constants objects `as const` to make them readony and not modifiable --- packages/lsp-smart-contracts/constants.ts | 8 +-- packages/lsp0-contracts/constants.ts | 6 +-- packages/lsp1-contracts/constants.ts | 2 +- packages/lsp10-contracts/constants.ts | 2 +- packages/lsp12-contracts/constants.ts | 2 +- packages/lsp14-contracts/constants.ts | 2 +- .../constants.ts | 2 +- packages/lsp20-contracts/constants.ts | 2 +- packages/lsp26-contracts/constants.ts | 2 +- packages/lsp3-contracts/constants.ts | 4 +- packages/lsp4-contracts/constants.ts | 6 +-- packages/lsp5-contracts/constants.ts | 2 +- packages/lsp6-contracts/constants.ts | 54 +++++++++---------- packages/lsp7-contracts/constants.ts | 4 +- packages/lsp8-contracts/constants.ts | 8 +-- packages/lsp9-contracts/constants.ts | 8 +-- 16 files changed, 57 insertions(+), 57 deletions(-) diff --git a/packages/lsp-smart-contracts/constants.ts b/packages/lsp-smart-contracts/constants.ts index 34e7ef65f..d78844d9e 100644 --- a/packages/lsp-smart-contracts/constants.ts +++ b/packages/lsp-smart-contracts/constants.ts @@ -82,7 +82,7 @@ export const SupportedStandards = { LSP3Profile: LSP3SupportedStandard as LSPSupportedStandard, LSP4DigitalAsset: LSP4SupportedStandard as LSPSupportedStandard, LSP9Vault: LSP9SupportedStandard as LSPSupportedStandard, -}; +} as const; // ERC165 // --------- @@ -119,7 +119,7 @@ export const INTERFACE_IDS = { LSP11BasicSocialRecovery: '0x049a28f1', LSP25ExecuteRelayCall: INTERFACE_ID_LSP25, LSP26FollowerSystem: INTERFACE_ID_LSP26, -}; +} as const; // ERC725Y // ---------- @@ -141,7 +141,7 @@ export const ERC725YDataKeys = { LSP10: { ...LSP10DataKeys }, LSP12: { ...LSP12DataKeys }, LSP17: { ...LSP17DataKeys }, -}; +} as const; export const LSP1_TYPE_IDS = { ...LSP0_TYPE_IDS, @@ -149,4 +149,4 @@ export const LSP1_TYPE_IDS = { ...LSP8_TYPE_IDS, ...LSP9_TYPE_IDS, ...LSP14_TYPE_IDS, -}; +} as const; diff --git a/packages/lsp0-contracts/constants.ts b/packages/lsp0-contracts/constants.ts index ccef5e1d0..bbb214903 100644 --- a/packages/lsp0-contracts/constants.ts +++ b/packages/lsp0-contracts/constants.ts @@ -12,7 +12,7 @@ export const INTERFACE_ID_LSP0 = '0x24871b3d'; export const ERC1271_VALUES = { SUCCESS_VALUE: '0x1626ba7e', FAIL_VALUE: '0xffffffff', -}; +} as const; /** * @dev list of ERC725X operation types. @@ -24,7 +24,7 @@ export const OPERATION_TYPES = { CREATE2: 2, STATICCALL: 3, DELEGATECALL: 4, -}; +} as const; export const LSP0_TYPE_IDS = { // keccak256('LSP0ValueReceived') @@ -41,4 +41,4 @@ export const LSP0_TYPE_IDS = { // keccak256('LSP0OwnershipTransferred_RecipientNotification') LSP0OwnershipTransferred_RecipientNotification: '0xceca317f109c43507871523e82dc2a3cc64dfa18f12da0b6db14f6e23f995538', -}; +} as const; diff --git a/packages/lsp1-contracts/constants.ts b/packages/lsp1-contracts/constants.ts index f5d47c5d8..e8ac1780e 100644 --- a/packages/lsp1-contracts/constants.ts +++ b/packages/lsp1-contracts/constants.ts @@ -7,4 +7,4 @@ export const LSP1DataKeys = { // keccak256('LSP1UniversalReceiverDelegate') LSP1UniversalReceiverDelegate: '0x0cfc51aec37c55a4d0b1a65c6255c4bf2fbdf6277f3cc0730c45b828b6db8b47', -}; +} as const; diff --git a/packages/lsp10-contracts/constants.ts b/packages/lsp10-contracts/constants.ts index a822f8e67..1dd4192cf 100644 --- a/packages/lsp10-contracts/constants.ts +++ b/packages/lsp10-contracts/constants.ts @@ -9,4 +9,4 @@ export const LSP10DataKeys = { length: '0x55482936e01da86729a45d2b87a6b1d3bc582bea0ec00e38bdb340e3af6f9f06', index: '0x55482936e01da86729a45d2b87a6b1d3', } as LSP2ArrayKey, -}; +} as const; diff --git a/packages/lsp12-contracts/constants.ts b/packages/lsp12-contracts/constants.ts index a4452901c..59dcf7dde 100644 --- a/packages/lsp12-contracts/constants.ts +++ b/packages/lsp12-contracts/constants.ts @@ -9,4 +9,4 @@ export const LSP12DataKeys = { length: '0x7c8c3416d6cda87cd42c71ea1843df28ac4850354f988d55ee2eaa47b6dc05cd', index: '0x7c8c3416d6cda87cd42c71ea1843df28', } as LSP2ArrayKey, -}; +} as const; diff --git a/packages/lsp14-contracts/constants.ts b/packages/lsp14-contracts/constants.ts index 0220c1497..af376d484 100644 --- a/packages/lsp14-contracts/constants.ts +++ b/packages/lsp14-contracts/constants.ts @@ -12,4 +12,4 @@ export const LSP14_TYPE_IDS = { // keccak256('LSP14OwnershipTransferred_RecipientNotification') LSP14OwnershipTransferred_RecipientNotification: '0xe32c7debcb817925ba4883fdbfc52797187f28f73f860641dab1a68d9b32902c', -}; +} as const; diff --git a/packages/lsp17contractextension-contracts/constants.ts b/packages/lsp17contractextension-contracts/constants.ts index 3aa1019c7..50ce6cba9 100644 --- a/packages/lsp17contractextension-contracts/constants.ts +++ b/packages/lsp17contractextension-contracts/constants.ts @@ -4,4 +4,4 @@ export const INTERFACE_ID_LSP17Extension = '0xcee78b40'; export const LSP17DataKeys = { // bytes10(keccak256('LSP17Extension')) + bytes2(0) LSP17ExtensionPrefix: '0xcee78b4094da860110960000', -}; +} as const; diff --git a/packages/lsp20-contracts/constants.ts b/packages/lsp20-contracts/constants.ts index 910e18714..db15457b7 100644 --- a/packages/lsp20-contracts/constants.ts +++ b/packages/lsp20-contracts/constants.ts @@ -14,4 +14,4 @@ export const LSP20_SUCCESS_VALUES = { }, // bytes4(keccak256("lsp20VerifyCallResult(bytes32,bytes)")) VERIFY_CALL_RESULT: '0xd3fc45d3', -}; +} as const; diff --git a/packages/lsp26-contracts/constants.ts b/packages/lsp26-contracts/constants.ts index fe81df8a2..ca7a8c034 100644 --- a/packages/lsp26-contracts/constants.ts +++ b/packages/lsp26-contracts/constants.ts @@ -8,4 +8,4 @@ export const LSP26_TYPE_IDS = { // keccak256('LSP26FollowerSystem_UnfollowNotification') LSP26FollowerSystem_UnfollowNotification: '0x9d3c0b4012b69658977b099bdaa51eff0f0460f421fba96d15669506c00d1c4f', -}; +} as const; diff --git a/packages/lsp3-contracts/constants.ts b/packages/lsp3-contracts/constants.ts index eeb1c21cf..9455d535d 100644 --- a/packages/lsp3-contracts/constants.ts +++ b/packages/lsp3-contracts/constants.ts @@ -47,10 +47,10 @@ export type ContractAsset = { export const LSP3SupportedStandard = { key: '0xeafec4d89fa9619884b600005ef83ad9559033e6e941db7d7c495acdce616347', value: '0x5ef83ad9', -}; +} as const; export const LSP3DataKeys = { SupportedStandards_LSP3: LSP3SupportedStandard.key, // keccak256('LSP3Profile') LSP3Profile: '0x5ef83ad9559033e6e941db7d7c495acdce616347d28e90c7ce47cbfcfcad3bc5', -}; +} as const; diff --git a/packages/lsp4-contracts/constants.ts b/packages/lsp4-contracts/constants.ts index db79d69f1..f7989a3c9 100644 --- a/packages/lsp4-contracts/constants.ts +++ b/packages/lsp4-contracts/constants.ts @@ -47,7 +47,7 @@ export type AttributeMetadata = { export const LSP4SupportedStandard = { key: '0xeafec4d89fa9619884b60000a4d96624a38f7ac2d8d9a604ecf07c12c77e480c', value: '0xa4d96624', -}; +} as const; export const LSP4DataKeys = { SupportedStandards_LSP4: LSP4SupportedStandard.key, @@ -72,7 +72,7 @@ export const LSP4DataKeys = { length: '0x114bd03b3a46d48759680d81ebb2b414fda7d030a7105a851867accf1c2352e7', index: '0x114bd03b3a46d48759680d81ebb2b414', } as LSP2ArrayKey, -}; +} as const; /** * @dev List of LSP4 Token types to describe the type of token a digital asset contract represents. @@ -82,4 +82,4 @@ export const LSP4_TOKEN_TYPES = { TOKEN: 0, NFT: 1, COLLECTION: 2, -}; +} as const; diff --git a/packages/lsp5-contracts/constants.ts b/packages/lsp5-contracts/constants.ts index 9fcb66d01..4d5cce8c8 100644 --- a/packages/lsp5-contracts/constants.ts +++ b/packages/lsp5-contracts/constants.ts @@ -9,4 +9,4 @@ export const LSP5DataKeys = { length: '0x6460ee3c0aac563ccbf76d6e1d07bada78e3a9514e6382b736ed3f478ab7b90b', index: '0x6460ee3c0aac563ccbf76d6e1d07bada', } as LSP2ArrayKey, -}; +} as const; diff --git a/packages/lsp6-contracts/constants.ts b/packages/lsp6-contracts/constants.ts index a3dab1e0c..26140a6c6 100644 --- a/packages/lsp6-contracts/constants.ts +++ b/packages/lsp6-contracts/constants.ts @@ -9,7 +9,7 @@ export const INTERFACE_ID_LSP6 = '0x23f34c62'; export const ERC1271_VALUES = { SUCCESS_VALUE: '0x1626ba7e', FAIL_VALUE: '0xffffffff', -}; +} as const; export const LSP6DataKeys = { // keccak256('AddressPermissions[]') @@ -28,7 +28,7 @@ export const LSP6DataKeys = { // AddressPermissions:AllowedCalls:
+ bytes2(0) 'AddressPermissions:AllowedCalls': '0x4b80742de2bf393a64c70000', -}; +} as const; /** * @dev The types of calls for an AllowedCall @@ -38,7 +38,7 @@ export const CALLTYPE = { CALL: '0x00000002', STATICCALL: '0x00000004', DELEGATECALL: '0x00000008', -}; +} as const; /** * @dev `bytes32` hex value for all the LSP6 permissions excluding REENTRANCY, DELEGATECALL and SUPER_DELEGATECALL for security (these should be set manually) @@ -50,29 +50,29 @@ export const ALL_PERMISSIONS = '0x0000000000000000000000000000000000000000000000 */ // prettier-ignore export const PERMISSIONS = { - CHANGEOWNER: '0x0000000000000000000000000000000000000000000000000000000000000001', // .... .... .... .... .... 0001 - ADDCONTROLLER: '0x0000000000000000000000000000000000000000000000000000000000000002', // .... .... .... .... .... 0010 - EDITPERMISSIONS: '0x0000000000000000000000000000000000000000000000000000000000000004', // .... .... .... .... .... 0100 - ADDEXTENSIONS: '0x0000000000000000000000000000000000000000000000000000000000000008', // .... .... .... .... .... 1000 - CHANGEEXTENSIONS: '0x0000000000000000000000000000000000000000000000000000000000000010', // .... .... .... .... 0001 0000 - ADDUNIVERSALRECEIVERDELEGATE: '0x0000000000000000000000000000000000000000000000000000000000000020', // .... .... .... .... 0010 0000 - CHANGEUNIVERSALRECEIVERDELEGATE: '0x0000000000000000000000000000000000000000000000000000000000000040', // .... .... .... .... 0100 0000 - REENTRANCY: '0x0000000000000000000000000000000000000000000000000000000000000080', // .... .... .... .... 1000 0000 - SUPER_TRANSFERVALUE: '0x0000000000000000000000000000000000000000000000000000000000000100', // .... .... .... 0001 0000 0000 - TRANSFERVALUE: '0x0000000000000000000000000000000000000000000000000000000000000200', // .... .... .... 0010 0000 0000 - SUPER_CALL: '0x0000000000000000000000000000000000000000000000000000000000000400', // .... .... .... 0100 0000 0000 - CALL: '0x0000000000000000000000000000000000000000000000000000000000000800', // .... .... .... 1000 0000 0000 - SUPER_STATICCALL: '0x0000000000000000000000000000000000000000000000000000000000001000', // .... .... 0001 0000 0000 0000 - STATICCALL: '0x0000000000000000000000000000000000000000000000000000000000002000', // .... .... 0010 0000 0000 0000 - SUPER_DELEGATECALL: '0x0000000000000000000000000000000000000000000000000000000000004000', // .... .... 0100 0000 0000 0000 - DELEGATECALL: '0x0000000000000000000000000000000000000000000000000000000000008000', // .... .... 1000 0000 0000 0000 - DEPLOY: '0x0000000000000000000000000000000000000000000000000000000000010000', // .... 0001 0000 0000 0000 0000 - SUPER_SETDATA: '0x0000000000000000000000000000000000000000000000000000000000020000', // .... 0010 0000 0000 0000 0000 - SETDATA: '0x0000000000000000000000000000000000000000000000000000000000040000', // .... 0100 0000 0000 0000 0000 - ENCRYPT: '0x0000000000000000000000000000000000000000000000000000000000080000', // .... 1000 0000 0000 0000 0000 - DECRYPT: '0x0000000000000000000000000000000000000000000000000000000000100000', // 0001 0000 0000 0000 0000 0000 - SIGN: '0x0000000000000000000000000000000000000000000000000000000000200000', // 0010 0000 0000 0000 0000 0000 - EXECUTE_RELAY_CALL: '0x0000000000000000000000000000000000000000000000000000000000400000', // 0100 0000 0000 0000 0000 0000 - } + CHANGEOWNER: '0x0000000000000000000000000000000000000000000000000000000000000001', // .... .... .... .... .... 0001 + ADDCONTROLLER: '0x0000000000000000000000000000000000000000000000000000000000000002', // .... .... .... .... .... 0010 + EDITPERMISSIONS: '0x0000000000000000000000000000000000000000000000000000000000000004', // .... .... .... .... .... 0100 + ADDEXTENSIONS: '0x0000000000000000000000000000000000000000000000000000000000000008', // .... .... .... .... .... 1000 + CHANGEEXTENSIONS: '0x0000000000000000000000000000000000000000000000000000000000000010', // .... .... .... .... 0001 0000 + ADDUNIVERSALRECEIVERDELEGATE: '0x0000000000000000000000000000000000000000000000000000000000000020', // .... .... .... .... 0010 0000 + CHANGEUNIVERSALRECEIVERDELEGATE: '0x0000000000000000000000000000000000000000000000000000000000000040', // .... .... .... .... 0100 0000 + REENTRANCY: '0x0000000000000000000000000000000000000000000000000000000000000080', // .... .... .... .... 1000 0000 + SUPER_TRANSFERVALUE: '0x0000000000000000000000000000000000000000000000000000000000000100', // .... .... .... 0001 0000 0000 + TRANSFERVALUE: '0x0000000000000000000000000000000000000000000000000000000000000200', // .... .... .... 0010 0000 0000 + SUPER_CALL: '0x0000000000000000000000000000000000000000000000000000000000000400', // .... .... .... 0100 0000 0000 + CALL: '0x0000000000000000000000000000000000000000000000000000000000000800', // .... .... .... 1000 0000 0000 + SUPER_STATICCALL: '0x0000000000000000000000000000000000000000000000000000000000001000', // .... .... 0001 0000 0000 0000 + STATICCALL: '0x0000000000000000000000000000000000000000000000000000000000002000', // .... .... 0010 0000 0000 0000 + SUPER_DELEGATECALL: '0x0000000000000000000000000000000000000000000000000000000000004000', // .... .... 0100 0000 0000 0000 + DELEGATECALL: '0x0000000000000000000000000000000000000000000000000000000000008000', // .... .... 1000 0000 0000 0000 + DEPLOY: '0x0000000000000000000000000000000000000000000000000000000000010000', // .... 0001 0000 0000 0000 0000 + SUPER_SETDATA: '0x0000000000000000000000000000000000000000000000000000000000020000', // .... 0010 0000 0000 0000 0000 + SETDATA: '0x0000000000000000000000000000000000000000000000000000000000040000', // .... 0100 0000 0000 0000 0000 + ENCRYPT: '0x0000000000000000000000000000000000000000000000000000000000080000', // .... 1000 0000 0000 0000 0000 + DECRYPT: '0x0000000000000000000000000000000000000000000000000000000000100000', // 0001 0000 0000 0000 0000 0000 + SIGN: '0x0000000000000000000000000000000000000000000000000000000000200000', // 0010 0000 0000 0000 0000 0000 + EXECUTE_RELAY_CALL: '0x0000000000000000000000000000000000000000000000000000000000400000', // 0100 0000 0000 0000 0000 0000 +} as const export type LSP6PermissionName = keyof typeof PERMISSIONS; diff --git a/packages/lsp7-contracts/constants.ts b/packages/lsp7-contracts/constants.ts index 50014c4c9..a8952a18f 100644 --- a/packages/lsp7-contracts/constants.ts +++ b/packages/lsp7-contracts/constants.ts @@ -3,7 +3,7 @@ export const INTERFACE_ID_LSP7 = '0xc52d6008'; export const INTERFACE_ID_LSP7_PREVIOUS = { 'v0.14.0': '0xb3c4928f', 'v0.12.0': '0xdaa746b7', -}; +} as const; export const LSP7_TYPE_IDS = { // keccak256('LSP7Tokens_SenderNotification') @@ -25,4 +25,4 @@ export const LSP7_TYPE_IDS = { // keccak256('LSP7Tokens_VotesDelegateeNotification') LSP7Tokens_VotesDelegateeNotification: '0x72cad372b29cde295ff0839b7b194597766b88f5fad4f7d6aef013e0c55dc492', -}; +} as const; diff --git a/packages/lsp8-contracts/constants.ts b/packages/lsp8-contracts/constants.ts index 48bf0d567..8754dc916 100644 --- a/packages/lsp8-contracts/constants.ts +++ b/packages/lsp8-contracts/constants.ts @@ -3,13 +3,13 @@ export const INTERFACE_ID_LSP8 = '0x3a271706'; export const INTERFACE_ID_LSP8_PREVIOUS = { 'v0.14.0': '0xecad9f75', 'v0.12.0': '0x30dc5278', -}; +} as const; export const LSP8DataKeys = { LSP8TokenIdFormat: '0xf675e9361af1c1664c1868cfa3eb97672d6b1a513aa5b81dec34c9ee330e818d', LSP8TokenMetadataBaseURI: '0x1a7628600c3bac7101f53697f48df381ddc36b9015e7d7c9c5633d1252aa2843', LSP8ReferenceContract: '0x708e7b881795f2e6b6c2752108c177ec89248458de3bf69d0d43480b3e5034e6', -}; +} as const; export const LSP8_TYPE_IDS = { // keccak256('LSP8Tokens_SenderNotification') @@ -23,7 +23,7 @@ export const LSP8_TYPE_IDS = { // keccak256('LSP8Tokens_OperatorNotification') LSP8Tokens_OperatorNotification: '0x8a1c15a8799f71b547e08e2bcb2e85257e81b0a07eee2ce6712549eef1f00970', -}; +} as const; /** * @dev List of LSP8 Token ID Formats that can be used to create different types of NFTs and represent each NFT identifiers (= tokenIds) differently. @@ -40,4 +40,4 @@ export const LSP8_TOKEN_ID_FORMAT = { MIXED_DEFAULT_ADDRESS: 102, MIXED_DEFAULT_UNIQUE_ID: 103, MIXED_DEFAULT_HASH: 104, -}; +} as const; diff --git a/packages/lsp9-contracts/constants.ts b/packages/lsp9-contracts/constants.ts index bc924c4d5..6e5153dc6 100644 --- a/packages/lsp9-contracts/constants.ts +++ b/packages/lsp9-contracts/constants.ts @@ -15,7 +15,7 @@ export const OPERATION_TYPES = { CREATE2: 2, STATICCALL: 3, DELEGATECALL: 4, -}; +} as const; /** * @dev list of ERC725Y keys from the LSP standards. @@ -25,11 +25,11 @@ export const OPERATION_TYPES = { export const LSP9SupportedStandard = { key: '0xeafec4d89fa9619884b600007c0334a14085fefa8b51ae5a40895018882bdb90', value: '0x7c0334a1', -}; +} as const; export const LSP9DataKeys = { SupportedStandards_LSP9: LSP9SupportedStandard.key, -}; +} as const; /** * @dev list of standard type IDs ("hooks") defined in the LSPs that can be used to notify @@ -51,4 +51,4 @@ export const LSP9_TYPE_IDS = { // keccak256('LSP9OwnershipTransferred_RecipientNotification') LSP9OwnershipTransferred_RecipientNotification: '0x79855c97dbc259ce395421d933d7bc0699b0f1561f988f09a9e8633fd542fe5c', -}; +} as const; From 721c872b9ed870f190e3e59493ca2c4b66309982 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 5 Dec 2024 08:55:43 +0000 Subject: [PATCH 82/94] feat: create LSP8VotesInitAbstract --- .../extensions/LSP8VotesInitAbstract.sol | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol b/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol new file mode 100644 index 000000000..fd195064d --- /dev/null +++ b/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { + LSP8IdentifiableDigitalAssetInitAbstract +} from "../LSP8IdentifiableDigitalAssetInitAbstract.sol"; +import { + VotesUpgradeable +} from "@openzeppelin/contracts-upgradeable/governance/utils/VotesUpgradeable.sol"; + +/** + * @dev Extension of LSP8 to support voting and delegation as implemented by {Votes}, where each individual NFT counts + * as 1 vote unit. + * + * Tokens do not count as votes until they are delegated, because votes must be tracked which incurs an additional cost + * on every transfer. Token holders can either delegate to a trusted representative who will decide how to make use of + * the votes in governance decisions, or they can delegate to themselves to be their own representative. + */ +abstract contract LSP8VotesInitAbstract is + LSP8IdentifiableDigitalAssetInitAbstract, + VotesUpgradeable +{ + function _initialize( + string memory name_, + string memory symbol_, + address newOwner_, + uint256 tokenIdType_, + uint256 tokenIdFormat_, + string memory version_ + ) internal virtual onlyInitializing { + LSP8IdentifiableDigitalAssetInitAbstract._initialize( + name_, + symbol_, + newOwner_, + tokenIdType_, + tokenIdFormat_ + ); + __EIP712_init(name_, version_); + } + + /** + * @dev Adjusts votes when tokens are transferred. + * + * Emits a {IVotes-DelegateVotesChanged} event. + */ + function _afterTokenTransfer( + address from, + address to, + bytes32 tokenId, + bytes memory data + ) internal virtual override { + _transferVotingUnits(from, to, 1); + super._afterTokenTransfer(from, to, tokenId, data); + } + + /** + * @dev Returns the balance of `account`. + * + * WARNING: Overriding this function will likely result in incorrect vote tracking. + */ + function _getVotingUnits( + address account + ) internal view virtual override returns (uint256) { + return balanceOf(account); + } +} From 420d74f8e87d12a8fc9eefb554586a9cbe837636 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 5 Dec 2024 09:34:20 +0000 Subject: [PATCH 83/94] ci: fix benchmark path --- .github/workflows/benchmark.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 7ab47765e..2fe306db6 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -43,11 +43,10 @@ jobs: run: npm ci - name: 🏗️ Build contract artifacts - run: | - npm run build - npm run build:turbo + run: npm run build - name: 🧪 Run Benchmark tests + working-directory: ./packages/lsp-smart-contracts # Rename the file to be able to generate benchmark JSON report run: | npm run test:benchmark @@ -69,14 +68,16 @@ jobs: run: npm ci - name: 🏗️ Build contract artifacts - run: npx hardhat compile + run: npm run build - name: 🧪 Run Benchmark tests + working-directory: ./packages/lsp-smart-contracts run: | npm run test:benchmark mv gas_benchmark_result.json gas_benchmark_after.json - name: 📊 Generate Benchmark Report + working-directory: ./packages/lsp-smart-contracts run: npx hardhat gas-benchmark --compare gas_benchmark_after.json --against gas_benchmark_before.json - name: 💬 Add Gas Report as comment in PR @@ -84,4 +85,4 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} issue-number: ${{ github.event.pull_request.number }} - body-file: "./gas_benchmark.md" + body-file: "./packages/lsp-smart-contracts/gas_benchmark.md" From 169081bc9842068732f9d839b0302819cb07abb0 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 12 Dec 2024 08:33:42 +0000 Subject: [PATCH 84/94] refactor: add notfiier to delegate for lsp8votes --- .../contracts/extensions/LSP8Votes.sol | 45 ++++++++++++++++++ .../extensions/LSP8VotesConstants.sol | 8 ++++ .../extensions/LSP8VotesInitAbstract.sol | 46 ++++++++++++++++++- 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 packages/lsp8-contracts/contracts/extensions/LSP8VotesConstants.sol diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol index a0c88a05d..0722b5db0 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol @@ -6,6 +6,11 @@ import { LSP8IdentifiableDigitalAsset } from "../LSP8IdentifiableDigitalAsset.sol"; import {Votes} from "@openzeppelin/contracts/governance/utils/Votes.sol"; +import { + _TYPEID_LSP8_VOTESDELEGATOR, + _TYPEID_LSP8_VOTESDELEGATEE +} from "./LSP8VotesConstants.sol"; +import {LSP1Utils} from "@lukso/lsp-smart-contracts/contracts/LSP1UniversalReceiver/LSP1Utils.sol"; /** * @dev Extension of LSP8 to support voting and delegation as implemented by {Votes}, where each individual NFT counts @@ -41,4 +46,44 @@ abstract contract LSP8Votes is LSP8IdentifiableDigitalAsset, Votes { ) internal view virtual override returns (uint256) { return balanceOf(account); } + + /** + * @dev Override of the {Votes-_delegate} function to add LSP1 notifications. + * Notifies both the delegator and delegatee through LSP1. + */ + function _delegate(address delegator, address delegatee) internal virtual override { + address currentDelegate = delegates(delegator); + uint256 delegatorBalance = balanceOf(delegator); + + super._delegate(delegator, delegatee); + + // Notify the delegator if it's not address(0) + if (delegator != address(0)) { + bytes memory delegatorNotificationData = abi.encode( + msg.sender, + delegatee, + delegatorBalance + ); + LSP1Utils.notifyUniversalReceiver( + delegator, + _TYPEID_LSP8_VOTESDELEGATOR, + delegatorNotificationData + ); + } + + // Only notify the new delegatee if it's not address(0) and if there's actual voting power + if (delegatee != address(0) && delegatorBalance > 0) { + bytes memory delegateeNotificationData = abi.encode( + msg.sender, + delegator, + delegatorBalance + ); + + LSP1Utils.notifyUniversalReceiver( + delegatee, + _TYPEID_LSP8_VOTESDELEGATEE, + delegateeNotificationData + ); + } + } } diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8VotesConstants.sol b/packages/lsp8-contracts/contracts/extensions/LSP8VotesConstants.sol new file mode 100644 index 000000000..0c735fb06 --- /dev/null +++ b/packages/lsp8-contracts/contracts/extensions/LSP8VotesConstants.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +// keccak256('LSP8Tokens_VotesDelegatorNotification') +bytes32 constant _TYPEID_LSP8_VOTESDELEGATOR = 0x54a91786b7c126f5ca201cf70323711e2b609e1259aab5cea150cfde4b9a748c; + +// keccak256('LSP8Tokens_VotesDelegateeNotification') +bytes32 constant _TYPEID_LSP8_VOTESDELEGATEE = 0x4aab908d8f4bc502ab79ddf13d56eb08e6ef25ebab36358bc42e5527adb08b8b; diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol b/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol index fd195064d..1497da222 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol @@ -7,7 +7,11 @@ import { import { VotesUpgradeable } from "@openzeppelin/contracts-upgradeable/governance/utils/VotesUpgradeable.sol"; - +import { + _TYPEID_LSP8_VOTESDELEGATOR, + _TYPEID_LSP8_VOTESDELEGATEE +} from "./LSP8VotesConstants.sol"; +import {LSP1Utils} from "@lukso/lsp-smart-contracts/contracts/LSP1UniversalReceiver/LSP1Utils.sol"; /** * @dev Extension of LSP8 to support voting and delegation as implemented by {Votes}, where each individual NFT counts * as 1 vote unit. @@ -63,4 +67,44 @@ abstract contract LSP8VotesInitAbstract is ) internal view virtual override returns (uint256) { return balanceOf(account); } + + /** + * @dev Override of the {Votes-_delegate} function to add LSP1 notifications. + * Notifies both the delegator and delegatee through LSP1. + */ + function _delegate(address delegator, address delegatee) internal virtual override { + address currentDelegate = delegates(delegator); + uint256 delegatorBalance = balanceOf(delegator); + + super._delegate(delegator, delegatee); + + // Notify the delegator if it's not address(0) + if (delegator != address(0)) { + bytes memory delegatorNotificationData = abi.encode( + msg.sender, + delegatee, + delegatorBalance + ); + LSP1Utils.notifyUniversalReceiver( + delegator, + _TYPEID_LSP8_VOTESDELEGATOR, + delegatorNotificationData + ); + } + + // Only notify the new delegatee if it's not address(0) and if there's actual voting power + if (delegatee != address(0) && delegatorBalance > 0) { + bytes memory delegateeNotificationData = abi.encode( + msg.sender, + delegator, + delegatorBalance + ); + + LSP1Utils.notifyUniversalReceiver( + delegatee, + _TYPEID_LSP8_VOTESDELEGATEE, + delegateeNotificationData + ); + } + } } From 46edd7d9873b740a4936f78395aefc7de0260160 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 12 Dec 2024 09:02:24 +0000 Subject: [PATCH 85/94] test: add lsp8 delegatee tests --- packages/lsp8-contracts/constants.ts | 8 +++++ .../contracts/Mocks/UniversalReceiver.sol | 29 +++++++++++++++ .../lsp8-contracts/tests/LSP8Votes.test.ts | 36 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 packages/lsp8-contracts/contracts/Mocks/UniversalReceiver.sol diff --git a/packages/lsp8-contracts/constants.ts b/packages/lsp8-contracts/constants.ts index 8754dc916..89c129210 100644 --- a/packages/lsp8-contracts/constants.ts +++ b/packages/lsp8-contracts/constants.ts @@ -23,6 +23,14 @@ export const LSP8_TYPE_IDS = { // keccak256('LSP8Tokens_OperatorNotification') LSP8Tokens_OperatorNotification: '0x8a1c15a8799f71b547e08e2bcb2e85257e81b0a07eee2ce6712549eef1f00970', + + // keccak256('LSP8Tokens_VotesDelegateeNotification') + LSP8Tokens_VotesDelegateeNotification: + '0x4aab908d8f4bc502ab79ddf13d56eb08e6ef25ebab36358bc42e5527adb08b8b', + + // keccak256('LSP8Tokens_VotesDelegatorNotification') + LSP8Tokens_VotesDelegatorNotification: + '0x54a91786b7c126f5ca201cf70323711e2b609e1259aab5cea150cfde4b9a748c', } as const; /** diff --git a/packages/lsp8-contracts/contracts/Mocks/UniversalReceiver.sol b/packages/lsp8-contracts/contracts/Mocks/UniversalReceiver.sol new file mode 100644 index 000000000..603b2b156 --- /dev/null +++ b/packages/lsp8-contracts/contracts/Mocks/UniversalReceiver.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.17; + +import { + ILSP1UniversalReceiver +} from "@lukso/lsp1-contracts/contracts/ILSP1UniversalReceiver.sol"; +import { + _INTERFACEID_LSP1 +} from "@lukso/lsp1-contracts/contracts/LSP1Constants.sol"; + +contract MockUniversalReceiver is ILSP1UniversalReceiver { + event UniversalReceiverCalled( + address indexed from, + bytes32 indexed typeId, + bytes receivedData + ); + + function universalReceiver( + bytes32 typeId, + bytes calldata receivedData + ) external payable override returns (bytes memory) { + emit UniversalReceiverCalled(msg.sender, typeId, receivedData); + return ""; + } + + function supportsInterface(bytes4 interfaceId) public view returns (bool) { + return interfaceId == _INTERFACEID_LSP1; + } +} diff --git a/packages/lsp8-contracts/tests/LSP8Votes.test.ts b/packages/lsp8-contracts/tests/LSP8Votes.test.ts index a5474fd89..d6958f8cf 100644 --- a/packages/lsp8-contracts/tests/LSP8Votes.test.ts +++ b/packages/lsp8-contracts/tests/LSP8Votes.test.ts @@ -3,6 +3,7 @@ import { ethers } from 'hardhat'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers'; import { MyVotingNFT, MyVotingNFT__factory, MyGovernor, MyGovernor__factory } from '../types'; import { time, mine } from '@nomicfoundation/hardhat-network-helpers'; +import { LSP8_TYPE_IDS } from '../constants'; describe('Comprehensive Governor and NFT Tests', () => { let nft: MyVotingNFT; @@ -173,4 +174,39 @@ describe('Comprehensive Governor and NFT Tests', () => { expect(await nft.getPastTotalSupply(blockNumber2 - 1)).to.equal(initialSupply + BigInt(1)); }); }); + describe('Delegation Notifications', () => { + let mockUniversalReceiver; + + beforeEach(async () => { + const MockUniversalReceiver = await ethers.getContractFactory('MockUniversalReceiver'); + mockUniversalReceiver = await MockUniversalReceiver.deploy(); + }); + + it('should notify delegatee with correct data format', async () => { + const expectedDelegateeData = ethers.AbiCoder.defaultAbiCoder().encode( + ['address', 'address', 'uint256'], + [voter1.address, voter1.address, 1], + ); + + const expectedDelegatorData = ethers.AbiCoder.defaultAbiCoder().encode( + ['address', 'address', 'uint256'], + [voter1.address, voter1.address, 1], + ); + + await expect(nft.connect(voter1).delegate(await mockUniversalReceiver.getAddress())) + .to.emit(mockUniversalReceiver, 'UniversalReceiverCalled') + .withArgs( + await nft.getAddress(), + LSP8_TYPE_IDS.LSP8Tokens_VotesDelegateeNotification, + expectedDelegateeData, + ); + }); + + it('should not notify when delegating to address(0)', async () => { + await expect(nft.connect(voter1).delegate(ethers.ZeroAddress)).to.not.emit( + mockUniversalReceiver, + 'UniversalReceiverCalled', + ); + }); + }); }); From bcef71fdc5dc07feeada7a6e4554a4465e702d16 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 12 Dec 2024 09:04:18 +0000 Subject: [PATCH 86/94] chore: format lsp8votes --- .../lsp8-contracts/contracts/extensions/LSP8Votes.sol | 11 ++++++++--- .../contracts/extensions/LSP8VotesInitAbstract.sol | 11 ++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol index 0722b5db0..2beed22b5 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol @@ -10,7 +10,9 @@ import { _TYPEID_LSP8_VOTESDELEGATOR, _TYPEID_LSP8_VOTESDELEGATEE } from "./LSP8VotesConstants.sol"; -import {LSP1Utils} from "@lukso/lsp-smart-contracts/contracts/LSP1UniversalReceiver/LSP1Utils.sol"; +import { + LSP1Utils +} from "@lukso/lsp-smart-contracts/contracts/LSP1UniversalReceiver/LSP1Utils.sol"; /** * @dev Extension of LSP8 to support voting and delegation as implemented by {Votes}, where each individual NFT counts @@ -47,11 +49,14 @@ abstract contract LSP8Votes is LSP8IdentifiableDigitalAsset, Votes { return balanceOf(account); } - /** + /** * @dev Override of the {Votes-_delegate} function to add LSP1 notifications. * Notifies both the delegator and delegatee through LSP1. */ - function _delegate(address delegator, address delegatee) internal virtual override { + function _delegate( + address delegator, + address delegatee + ) internal virtual override { address currentDelegate = delegates(delegator); uint256 delegatorBalance = balanceOf(delegator); diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol b/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol index 1497da222..67715312b 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol @@ -11,7 +11,9 @@ import { _TYPEID_LSP8_VOTESDELEGATOR, _TYPEID_LSP8_VOTESDELEGATEE } from "./LSP8VotesConstants.sol"; -import {LSP1Utils} from "@lukso/lsp-smart-contracts/contracts/LSP1UniversalReceiver/LSP1Utils.sol"; +import { + LSP1Utils +} from "@lukso/lsp-smart-contracts/contracts/LSP1UniversalReceiver/LSP1Utils.sol"; /** * @dev Extension of LSP8 to support voting and delegation as implemented by {Votes}, where each individual NFT counts * as 1 vote unit. @@ -68,11 +70,14 @@ abstract contract LSP8VotesInitAbstract is return balanceOf(account); } - /** + /** * @dev Override of the {Votes-_delegate} function to add LSP1 notifications. * Notifies both the delegator and delegatee through LSP1. */ - function _delegate(address delegator, address delegatee) internal virtual override { + function _delegate( + address delegator, + address delegatee + ) internal virtual override { address currentDelegate = delegates(delegator); uint256 delegatorBalance = balanceOf(delegator); From 28f11b40c30206b49ad392a4bff1cc1f2a21bc42 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 12 Dec 2024 12:40:50 +0000 Subject: [PATCH 87/94] ci: fix lsp1 interfaceid tester with lsp8 delagators --- .../contracts/Mocks/LSP1TypeIDsTester.sol | 10 ++++++++++ packages/lsp8-contracts/constants.ts | 4 ++-- .../contracts/extensions/LSP8VotesConstants.sol | 4 ++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol b/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol index 17496497b..cc535bc33 100644 --- a/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol +++ b/packages/lsp-smart-contracts/contracts/Mocks/LSP1TypeIDsTester.sol @@ -21,6 +21,10 @@ import { _TYPEID_LSP8_TOKENSRECIPIENT, _TYPEID_LSP8_TOKENOPERATOR } from "@lukso/lsp8-contracts/contracts/LSP8Constants.sol"; +import { + _TYPEID_LSP8_VOTESDELEGATOR, + _TYPEID_LSP8_VOTESDELEGATEE +} from "@lukso/lsp8-contracts/contracts/extensions/LSP8VotesConstants.sol"; import { _TYPEID_LSP9_VALUE_RECEIVED, _TYPEID_LSP9_OwnershipTransferStarted, @@ -80,6 +84,12 @@ contract LSP1TypeIDsTester { _typeIds[ "LSP8Tokens_OperatorNotification" ] = _TYPEID_LSP8_TOKENOPERATOR; + _typeIds[ + "LSP8Tokens_VotesDelegatorNotification" + ] = _TYPEID_LSP8_VOTESDELEGATOR; + _typeIds[ + "LSP8Tokens_VotesDelegateeNotification" + ] = _TYPEID_LSP8_VOTESDELEGATEE; // ------------------ // ------ LSP9 ------ diff --git a/packages/lsp8-contracts/constants.ts b/packages/lsp8-contracts/constants.ts index 89c129210..9a1a22f8b 100644 --- a/packages/lsp8-contracts/constants.ts +++ b/packages/lsp8-contracts/constants.ts @@ -26,11 +26,11 @@ export const LSP8_TYPE_IDS = { // keccak256('LSP8Tokens_VotesDelegateeNotification') LSP8Tokens_VotesDelegateeNotification: - '0x4aab908d8f4bc502ab79ddf13d56eb08e6ef25ebab36358bc42e5527adb08b8b', + '0x19419598f788eae88574bbb83ec563ad0cb43cd7ddbbc88857b2efa2d8faa8eb', // keccak256('LSP8Tokens_VotesDelegatorNotification') LSP8Tokens_VotesDelegatorNotification: - '0x54a91786b7c126f5ca201cf70323711e2b609e1259aab5cea150cfde4b9a748c', + '0x2f6d3f668c2e57dbae4c255f2d9e0b69d47a8848d69a2251cce137529e34743e', } as const; /** diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8VotesConstants.sol b/packages/lsp8-contracts/contracts/extensions/LSP8VotesConstants.sol index 0c735fb06..8d4033ba7 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8VotesConstants.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8VotesConstants.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.4; // keccak256('LSP8Tokens_VotesDelegatorNotification') -bytes32 constant _TYPEID_LSP8_VOTESDELEGATOR = 0x54a91786b7c126f5ca201cf70323711e2b609e1259aab5cea150cfde4b9a748c; +bytes32 constant _TYPEID_LSP8_VOTESDELEGATOR = 0x2f6d3f668c2e57dbae4c255f2d9e0b69d47a8848d69a2251cce137529e34743e; // keccak256('LSP8Tokens_VotesDelegateeNotification') -bytes32 constant _TYPEID_LSP8_VOTESDELEGATEE = 0x4aab908d8f4bc502ab79ddf13d56eb08e6ef25ebab36358bc42e5527adb08b8b; +bytes32 constant _TYPEID_LSP8_VOTESDELEGATEE = 0x19419598f788eae88574bbb83ec563ad0cb43cd7ddbbc88857b2efa2d8faa8eb; From 8e1e93e3cb63956614d906bb08d6a91566afbaf9 Mon Sep 17 00:00:00 2001 From: Maxime Date: Thu, 12 Dec 2024 14:20:03 +0000 Subject: [PATCH 88/94] feat: add old interfaces ids as Solidity constants for lsp7 & lsp8 --- packages/lsp7-contracts/constants.ts | 2 +- packages/lsp7-contracts/contracts/LSP7Constants.sol | 4 ++++ packages/lsp8-contracts/constants.ts | 2 +- packages/lsp8-contracts/contracts/LSP8Constants.sol | 4 ++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/lsp7-contracts/constants.ts b/packages/lsp7-contracts/constants.ts index a8952a18f..0f5b78601 100644 --- a/packages/lsp7-contracts/constants.ts +++ b/packages/lsp7-contracts/constants.ts @@ -3,7 +3,7 @@ export const INTERFACE_ID_LSP7 = '0xc52d6008'; export const INTERFACE_ID_LSP7_PREVIOUS = { 'v0.14.0': '0xb3c4928f', 'v0.12.0': '0xdaa746b7', -} as const; +}; export const LSP7_TYPE_IDS = { // keccak256('LSP7Tokens_SenderNotification') diff --git a/packages/lsp7-contracts/contracts/LSP7Constants.sol b/packages/lsp7-contracts/contracts/LSP7Constants.sol index ab24c50fc..6bed1f234 100644 --- a/packages/lsp7-contracts/contracts/LSP7Constants.sol +++ b/packages/lsp7-contracts/contracts/LSP7Constants.sol @@ -4,6 +4,10 @@ pragma solidity ^0.8.4; // --- ERC165 interface ids bytes4 constant _INTERFACEID_LSP7 = 0xc52d6008; +bytes4 constant _INTERFACEID_LSP7_V0_12_0 = 0xdaa746b7; + +bytes4 constant _INTERFACEID_LSP7_V0_14_0 = 0xb3c4928f; + // --- Token Hooks // keccak256('LSP7Tokens_DelegatorNotification') diff --git a/packages/lsp8-contracts/constants.ts b/packages/lsp8-contracts/constants.ts index 9a1a22f8b..86818324e 100644 --- a/packages/lsp8-contracts/constants.ts +++ b/packages/lsp8-contracts/constants.ts @@ -3,7 +3,7 @@ export const INTERFACE_ID_LSP8 = '0x3a271706'; export const INTERFACE_ID_LSP8_PREVIOUS = { 'v0.14.0': '0xecad9f75', 'v0.12.0': '0x30dc5278', -} as const; +}; export const LSP8DataKeys = { LSP8TokenIdFormat: '0xf675e9361af1c1664c1868cfa3eb97672d6b1a513aa5b81dec34c9ee330e818d', diff --git a/packages/lsp8-contracts/contracts/LSP8Constants.sol b/packages/lsp8-contracts/contracts/LSP8Constants.sol index a2b327981..c2ba5890c 100644 --- a/packages/lsp8-contracts/contracts/LSP8Constants.sol +++ b/packages/lsp8-contracts/contracts/LSP8Constants.sol @@ -4,6 +4,10 @@ pragma solidity ^0.8.4; // --- ERC165 interface ids bytes4 constant _INTERFACEID_LSP8 = 0x3a271706; +bytes4 constant _INTERFACEID_LSP8_V0_12_0 = 0x30dc5278; + +bytes4 constant _INTERFACEID_LSP8_V0_14_0 = 0xecad9f75; + // --- ERC725Y Data Keys // keccak256('LSP8TokenIdFormat') From 6f746853a456d66e896be4b650ffa5d319caffb2 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Fri, 13 Dec 2024 09:39:08 +0000 Subject: [PATCH 89/94] chore: adjust Natspec comments for events + remove unused local variable --- .../contracts/LSP7DigitalAssetInitAbstract.sol | 1 - .../lsp8-contracts/contracts/extensions/LSP8Votes.sol | 11 ++++++----- .../contracts/extensions/LSP8VotesInitAbstract.sol | 10 ++++++---- packages/lsp8-contracts/tests/LSP8Votes.test.ts | 1 + 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol index 0217b92e6..f4c817705 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol @@ -11,7 +11,6 @@ import {ILSP7DigitalAsset} from "./ILSP7DigitalAsset.sol"; import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -// TODO: define if we inherit the upgradable version `ERC165CheckerUpgradeable` import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol index 2beed22b5..e02375833 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol @@ -26,7 +26,7 @@ abstract contract LSP8Votes is LSP8IdentifiableDigitalAsset, Votes { /** * @dev Adjusts votes when tokens are transferred. * - * Emits a {IVotes-DelegateVotesChanged} event. + * @custom:events {DelegateVotesChanged} event. */ function _afterTokenTransfer( address from, @@ -41,7 +41,7 @@ abstract contract LSP8Votes is LSP8IdentifiableDigitalAsset, Votes { /** * @dev Returns the balance of `account`. * - * WARNING: Overriding this function will likely result in incorrect vote tracking. + * @custom:warning Overriding this function will likely result in incorrect vote tracking. */ function _getVotingUnits( address account @@ -50,14 +50,15 @@ abstract contract LSP8Votes is LSP8IdentifiableDigitalAsset, Votes { } /** - * @dev Override of the {Votes-_delegate} function to add LSP1 notifications. - * Notifies both the delegator and delegatee through LSP1. + * @dev Override of the {_delegate} function that includes notification via LSP1. + * The delegator and delegatee are both notified via their `universalReceiver(...)` function if they contracts implementing the LSP1 interface. + * + * @custom:events {DelegateChanged} event. */ function _delegate( address delegator, address delegatee ) internal virtual override { - address currentDelegate = delegates(delegator); uint256 delegatorBalance = balanceOf(delegator); super._delegate(delegator, delegatee); diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol b/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol index 67715312b..ef74d9c73 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol @@ -14,6 +14,7 @@ import { import { LSP1Utils } from "@lukso/lsp-smart-contracts/contracts/LSP1UniversalReceiver/LSP1Utils.sol"; + /** * @dev Extension of LSP8 to support voting and delegation as implemented by {Votes}, where each individual NFT counts * as 1 vote unit. @@ -62,7 +63,7 @@ abstract contract LSP8VotesInitAbstract is /** * @dev Returns the balance of `account`. * - * WARNING: Overriding this function will likely result in incorrect vote tracking. + * @custom:warning Overriding this function will likely result in incorrect vote tracking. */ function _getVotingUnits( address account @@ -71,14 +72,15 @@ abstract contract LSP8VotesInitAbstract is } /** - * @dev Override of the {Votes-_delegate} function to add LSP1 notifications. - * Notifies both the delegator and delegatee through LSP1. + * @dev Override of the {_delegate} function that includes notification via LSP1. + * The delegator and delegatee are both notified via their `universalReceiver(...)` function if they contracts implementing the LSP1 interface. + * + * @custom:events {DelegateChanged} event. */ function _delegate( address delegator, address delegatee ) internal virtual override { - address currentDelegate = delegates(delegator); uint256 delegatorBalance = balanceOf(delegator); super._delegate(delegator, delegatee); diff --git a/packages/lsp8-contracts/tests/LSP8Votes.test.ts b/packages/lsp8-contracts/tests/LSP8Votes.test.ts index d6958f8cf..128806e11 100644 --- a/packages/lsp8-contracts/tests/LSP8Votes.test.ts +++ b/packages/lsp8-contracts/tests/LSP8Votes.test.ts @@ -174,6 +174,7 @@ describe('Comprehensive Governor and NFT Tests', () => { expect(await nft.getPastTotalSupply(blockNumber2 - 1)).to.equal(initialSupply + BigInt(1)); }); }); + describe('Delegation Notifications', () => { let mockUniversalReceiver; From 7c8ed05488cbf623624ad8a6db2adfee8a412337 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Thu, 12 Dec 2024 18:24:52 +0000 Subject: [PATCH 90/94] ci: upgrade checkout action to v4 --- .github/workflows/benchmark.yml | 4 +-- .github/workflows/build-lint-test.yml | 2 +- .github/workflows/coverage.yml | 2 +- .github/workflows/deploy-verify.yml | 2 +- .github/workflows/foundry-tests.yml | 2 +- .github/workflows/mythx-analysis.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/solc_version.yml | 2 +- .github/workflows/spellcheck.yaml | 48 +++++++++++++-------------- 9 files changed, 33 insertions(+), 33 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 2fe306db6..c148e18f0 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout base branch - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.base.sha }} fetch-depth: 0 @@ -53,7 +53,7 @@ jobs: mv gas_benchmark_result.json gas_benchmark_before.json - name: Checkout current branch - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Do not run `git clean -ffdx && git reset --hard HEAD` to prevent removing `gas_benchmark_before.json` with: clean: false diff --git a/.github/workflows/build-lint-test.yml b/.github/workflows/build-lint-test.yml index 2e5ef1338..6603abc4f 100644 --- a/.github/workflows/build-lint-test.yml +++ b/.github/workflows/build-lint-test.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - name: Use Node.js v20 diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 31c70e4eb..d3e6b3f9c 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest if: github.event.pull_request.merged == true steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js v20.x uses: actions/setup-node@v4 diff --git a/.github/workflows/deploy-verify.yml b/.github/workflows/deploy-verify.yml index 51e51d8cb..618e4474f 100644 --- a/.github/workflows/deploy-verify.yml +++ b/.github/workflows/deploy-verify.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js v20 uses: actions/setup-node@v4 diff --git a/.github/workflows/foundry-tests.yml b/.github/workflows/foundry-tests.yml index 0f450fc69..b595cc860 100644 --- a/.github/workflows/foundry-tests.yml +++ b/.github/workflows/foundry-tests.yml @@ -11,7 +11,7 @@ jobs: foundry-tests: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive diff --git a/.github/workflows/mythx-analysis.yml b/.github/workflows/mythx-analysis.yml index 8503487e4..ec5a59dfc 100644 --- a/.github/workflows/mythx-analysis.yml +++ b/.github/workflows/mythx-analysis.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup Node.js '20.x' uses: actions/setup-node@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 44d776d22..ebdd5e041 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,7 +31,7 @@ jobs: # The `if` statements ensure that a publication only occurs when # a new release is created: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 if: ${{ steps.release.outputs.releases_created }} - name: Use Node.js v20 diff --git a/.github/workflows/solc_version.yml b/.github/workflows/solc_version.yml index a1f28e3d8..afeb8ad67 100644 --- a/.github/workflows/solc_version.yml +++ b/.github/workflows/solc_version.yml @@ -51,7 +51,7 @@ jobs: "0.8.27", ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js '20.x' uses: actions/setup-node@v4 diff --git a/.github/workflows/spellcheck.yaml b/.github/workflows/spellcheck.yaml index c030aa7c3..58dfc544a 100644 --- a/.github/workflows/spellcheck.yaml +++ b/.github/workflows/spellcheck.yaml @@ -1,29 +1,29 @@ # This workflow checks for common grammar and spelling mistake in markdown files. - name: Spellcheck - on: [pull_request] +name: Spellcheck +on: [pull_request] - jobs: - build: - name: Check Grammar and Spelling errors - runs-on: ubuntu-latest - steps: - - name: Checkout 🛎️ - uses: actions/checkout@v4 - with: - fetch-depth: 0 +jobs: + build: + name: Check Grammar and Spelling errors + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v4 + with: + fetch-depth: 0 - - name: Install ⚙️ - run: npm ci + - name: Install ⚙️ + run: npm ci - - name: Check spelling errors in code snippets 🔍 - uses: codespell-project/actions-codespell@v2 - with: - path: packages/lsp-smart-contracts/docs - check_filenames: true - ignore_words_list: datas + - name: Check spelling errors in code snippets 🔍 + uses: codespell-project/actions-codespell@v2 + with: + path: packages/lsp-smart-contracts/docs + check_filenames: true + ignore_words_list: datas - - name: Output Spellcheck Results 📝 - uses: actions/upload-artifact@v3 - with: - name: Spellcheck Output - path: spellcheck-output.txt \ No newline at end of file + - name: Output Spellcheck Results 📝 + uses: actions/upload-artifact@v3 + with: + name: Spellcheck Output + path: spellcheck-output.txt From 2085039521d856362cb3be2a211253d51b28a450 Mon Sep 17 00:00:00 2001 From: Maxime Date: Wed, 18 Dec 2024 10:36:53 +0000 Subject: [PATCH 91/94] feat: add force to internal function on lsp8 --- .../Mocks/Tokens/LSP8TransferOwnerChange.sol | 1 + .../contracts/LSP8IdentifiableDigitalAsset.sol | 16 ++++++++++------ .../LSP8IdentifiableDigitalAssetInitAbstract.sol | 16 ++++++++++------ .../contracts/extensions/LSP8Enumerable.sol | 4 +++- .../extensions/LSP8EnumerableInitAbstract.sol | 3 ++- .../contracts/extensions/LSP8Votes.sol | 3 ++- .../extensions/LSP8VotesInitAbstract.sol | 3 ++- 7 files changed, 30 insertions(+), 16 deletions(-) diff --git a/packages/lsp-smart-contracts/contracts/Mocks/Tokens/LSP8TransferOwnerChange.sol b/packages/lsp-smart-contracts/contracts/Mocks/Tokens/LSP8TransferOwnerChange.sol index 2ca23554a..34b46674e 100644 --- a/packages/lsp-smart-contracts/contracts/Mocks/Tokens/LSP8TransferOwnerChange.sol +++ b/packages/lsp-smart-contracts/contracts/Mocks/Tokens/LSP8TransferOwnerChange.sol @@ -41,6 +41,7 @@ contract LSP8TransferOwnerChange is LSP8IdentifiableDigitalAsset, LSP8Burnable { address, address, bytes32 tokenId, + bool, bytes memory ) internal override { // if tokenID exist transfer token ownership to this contract diff --git a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol index 992fc982c..5a6275311 100644 --- a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol +++ b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAsset.sol @@ -711,7 +711,7 @@ abstract contract LSP8IdentifiableDigitalAsset is revert LSP8TokenIdAlreadyMinted(tokenId); } - _beforeTokenTransfer(address(0), to, tokenId, data); + _beforeTokenTransfer(address(0), to, tokenId, force, data); // Check that `tokenId` was not minted inside the `_beforeTokenTransfer` hook if (_exists(tokenId)) { @@ -726,7 +726,7 @@ abstract contract LSP8IdentifiableDigitalAsset is emit Transfer(msg.sender, address(0), to, tokenId, force, data); - _afterTokenTransfer(address(0), to, tokenId, data); + _afterTokenTransfer(address(0), to, tokenId, force, data); bytes memory lsp1Data = abi.encode( msg.sender, @@ -763,7 +763,7 @@ abstract contract LSP8IdentifiableDigitalAsset is function _burn(bytes32 tokenId, bytes memory data) internal virtual { address tokenOwner = tokenOwnerOf(tokenId); - _beforeTokenTransfer(tokenOwner, address(0), tokenId, data); + _beforeTokenTransfer(tokenOwner, address(0), tokenId, false, data); // Re-fetch and update `tokenOwner` in case `tokenId` // was transferred inside the `_beforeTokenTransfer` hook @@ -779,7 +779,7 @@ abstract contract LSP8IdentifiableDigitalAsset is emit Transfer(msg.sender, tokenOwner, address(0), tokenId, false, data); - _afterTokenTransfer(tokenOwner, address(0), tokenId, data); + _afterTokenTransfer(tokenOwner, address(0), tokenId, false, data); bytes memory lsp1Data = abi.encode( msg.sender, @@ -833,7 +833,7 @@ abstract contract LSP8IdentifiableDigitalAsset is revert LSP8CannotSendToAddressZero(); } - _beforeTokenTransfer(from, to, tokenId, data); + _beforeTokenTransfer(from, to, tokenId, force, data); // Check that `tokenId`'s owner was not changed inside the `_beforeTokenTransfer` hook address currentTokenOwner = tokenOwnerOf(tokenId); @@ -853,7 +853,7 @@ abstract contract LSP8IdentifiableDigitalAsset is emit Transfer(msg.sender, from, to, tokenId, force, data); - _afterTokenTransfer(from, to, tokenId, data); + _afterTokenTransfer(from, to, tokenId, force, data); bytes memory lsp1Data = abi.encode(msg.sender, from, to, tokenId, data); @@ -899,12 +899,14 @@ abstract contract LSP8IdentifiableDigitalAsset is * @param from The sender address * @param to The recipient address * @param tokenId The tokenId to transfer + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. * @param data The data sent alongside the transfer */ function _beforeTokenTransfer( address from, address to, bytes32 tokenId, + bool force, bytes memory data // solhint-disable-next-line no-empty-blocks ) internal virtual {} @@ -915,12 +917,14 @@ abstract contract LSP8IdentifiableDigitalAsset is * @param from The sender address * @param to The recipient address * @param tokenId The tokenId to transfer + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. * @param data The data sent alongside the transfer */ function _afterTokenTransfer( address from, address to, bytes32 tokenId, + bool force, bytes memory data // solhint-disable-next-line no-empty-blocks ) internal virtual {} diff --git a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol index bc277d9de..d5caac54d 100644 --- a/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/LSP8IdentifiableDigitalAssetInitAbstract.sol @@ -728,7 +728,7 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is revert LSP8TokenIdAlreadyMinted(tokenId); } - _beforeTokenTransfer(address(0), to, tokenId, data); + _beforeTokenTransfer(address(0), to, tokenId, force, data); // Check that `tokenId` was not minted inside the `_beforeTokenTransfer` hook if (_exists(tokenId)) { @@ -743,7 +743,7 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is emit Transfer(msg.sender, address(0), to, tokenId, force, data); - _afterTokenTransfer(address(0), to, tokenId, data); + _afterTokenTransfer(address(0), to, tokenId, force, data); bytes memory lsp1Data = abi.encode( msg.sender, @@ -780,7 +780,7 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is function _burn(bytes32 tokenId, bytes memory data) internal virtual { address tokenOwner = tokenOwnerOf(tokenId); - _beforeTokenTransfer(tokenOwner, address(0), tokenId, data); + _beforeTokenTransfer(tokenOwner, address(0), tokenId, false, data); // Re-fetch and update `tokenOwner` in case `tokenId` // was transferred inside the `_beforeTokenTransfer` hook @@ -796,7 +796,7 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is emit Transfer(msg.sender, tokenOwner, address(0), tokenId, false, data); - _afterTokenTransfer(tokenOwner, address(0), tokenId, data); + _afterTokenTransfer(tokenOwner, address(0), tokenId, false, data); bytes memory lsp1Data = abi.encode( msg.sender, @@ -850,7 +850,7 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is revert LSP8CannotSendToAddressZero(); } - _beforeTokenTransfer(from, to, tokenId, data); + _beforeTokenTransfer(from, to, tokenId, force, data); // Check that `tokenId`'s owner was not changed inside the `_beforeTokenTransfer` hook address currentTokenOwner = tokenOwnerOf(tokenId); @@ -870,7 +870,7 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is emit Transfer(msg.sender, from, to, tokenId, force, data); - _afterTokenTransfer(from, to, tokenId, data); + _afterTokenTransfer(from, to, tokenId, force, data); bytes memory lsp1Data = abi.encode(msg.sender, from, to, tokenId, data); @@ -916,12 +916,14 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is * @param from The sender address * @param to The recipient address * @param tokenId The tokenId to transfer + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. * @param data The data sent alongside the transfer */ function _beforeTokenTransfer( address from, address to, bytes32 tokenId, + bool force, bytes memory data // solhint-disable-next-line no-empty-blocks ) internal virtual {} @@ -932,12 +934,14 @@ abstract contract LSP8IdentifiableDigitalAssetInitAbstract is * @param from The sender address * @param to The recipient address * @param tokenId The tokenId to transfer + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. * @param data The data sent alongside the transfer */ function _afterTokenTransfer( address from, address to, bytes32 tokenId, + bool force, bytes memory data // solhint-disable-next-line no-empty-blocks ) internal virtual {} diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8Enumerable.sol b/packages/lsp8-contracts/contracts/extensions/LSP8Enumerable.sol index 92816a248..8313f45c3 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8Enumerable.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8Enumerable.sol @@ -35,12 +35,14 @@ abstract contract LSP8Enumerable is LSP8IdentifiableDigitalAsset { * @param from The address sending the `tokenId` (`address(0)` when `tokenId` is being minted). * @param to The address receiving the `tokenId` (`address(0)` when `tokenId` is being burnt). * @param tokenId The bytes32 identifier of the token being transferred. + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. * @param data The data sent alongside the the token transfer. */ function _beforeTokenTransfer( address from, address to, bytes32 tokenId, + bool force, bytes memory data ) internal virtual override { // `tokenId` being minted @@ -63,6 +65,6 @@ abstract contract LSP8Enumerable is LSP8IdentifiableDigitalAsset { delete _tokenIndex[tokenId]; } - super._beforeTokenTransfer(from, to, tokenId, data); + super._beforeTokenTransfer(from, to, tokenId, force, data); } } diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8EnumerableInitAbstract.sol b/packages/lsp8-contracts/contracts/extensions/LSP8EnumerableInitAbstract.sol index 762a4d4c9..72d849a3e 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8EnumerableInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8EnumerableInitAbstract.sol @@ -41,6 +41,7 @@ abstract contract LSP8EnumerableInitAbstract is address from, address to, bytes32 tokenId, + bool force, bytes memory data ) internal virtual override { if (from == address(0)) { @@ -58,6 +59,6 @@ abstract contract LSP8EnumerableInitAbstract is delete _indexToken[lastIndex]; delete _tokenIndex[tokenId]; } - super._beforeTokenTransfer(from, to, tokenId, data); + super._beforeTokenTransfer(from, to, tokenId, force, data); } } diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol index e02375833..811d67bd7 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8Votes.sol @@ -32,10 +32,11 @@ abstract contract LSP8Votes is LSP8IdentifiableDigitalAsset, Votes { address from, address to, bytes32 tokenId, + bool force, bytes memory data ) internal virtual override { _transferVotingUnits(from, to, 1); - super._afterTokenTransfer(from, to, tokenId, data); + super._afterTokenTransfer(from, to, tokenId, force, data); } /** diff --git a/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol b/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol index ef74d9c73..a4a8c1359 100644 --- a/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol +++ b/packages/lsp8-contracts/contracts/extensions/LSP8VotesInitAbstract.sol @@ -54,10 +54,11 @@ abstract contract LSP8VotesInitAbstract is address from, address to, bytes32 tokenId, + bool force, bytes memory data ) internal virtual override { _transferVotingUnits(from, to, 1); - super._afterTokenTransfer(from, to, tokenId, data); + super._afterTokenTransfer(from, to, tokenId, force, data); } /** From c2f79091a1919422f6d9e160c13e0accf321a747 Mon Sep 17 00:00:00 2001 From: Maxime Date: Wed, 18 Dec 2024 10:38:05 +0000 Subject: [PATCH 92/94] feat: add force to internal functions LSP7 --- .../contracts/LSP7DigitalAsset.sol | 18 +++++++++++------- .../contracts/LSP7DigitalAssetInitAbstract.sol | 18 +++++++++++------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol index 2f9d8c985..cbbb3857e 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAsset.sol @@ -600,7 +600,7 @@ abstract contract LSP7DigitalAsset is revert LSP7CannotSendWithAddressZero(); } - _beforeTokenTransfer(address(0), to, amount, data); + _beforeTokenTransfer(address(0), to, amount, force, data); // tokens being minted _existingTokens += amount; @@ -616,7 +616,7 @@ abstract contract LSP7DigitalAsset is data: data }); - _afterTokenTransfer(address(0), to, amount, data); + _afterTokenTransfer(address(0), to, amount, force, data); bytes memory lsp1Data = abi.encode( msg.sender, @@ -662,7 +662,7 @@ abstract contract LSP7DigitalAsset is revert LSP7CannotSendWithAddressZero(); } - _beforeTokenTransfer(from, address(0), amount, data); + _beforeTokenTransfer(from, address(0), amount, false, data); uint256 balance = _tokenOwnerBalances[from]; if (amount > balance) { @@ -682,7 +682,7 @@ abstract contract LSP7DigitalAsset is data: data }); - _afterTokenTransfer(from, address(0), amount, data); + _afterTokenTransfer(from, address(0), amount, false, data); bytes memory lsp1Data = abi.encode( msg.sender, @@ -773,11 +773,11 @@ abstract contract LSP7DigitalAsset is revert LSP7CannotSendWithAddressZero(); } - _beforeTokenTransfer(from, to, amount, data); + _beforeTokenTransfer(from, to, amount, force, data); _update(from, to, amount, force, data); - _afterTokenTransfer(from, to, amount, data); + _afterTokenTransfer(from, to, amount, force, data); bytes memory lsp1Data = abi.encode(msg.sender, from, to, amount, data); @@ -834,7 +834,7 @@ abstract contract LSP7DigitalAsset is data: data }); - _afterTokenTransfer(from, to, amount, data); + _afterTokenTransfer(from, to, amount, force, data); bytes memory lsp1Data = abi.encode(msg.sender, from, to, amount, data); @@ -849,12 +849,14 @@ abstract contract LSP7DigitalAsset is * @param from The sender address * @param to The recipient address * @param amount The amount of token to transfer + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. * @param data The data sent alongside the transfer */ function _beforeTokenTransfer( address from, address to, uint256 amount, + bool force, bytes memory data // solhint-disable-next-line no-empty-blocks ) internal virtual {} @@ -865,12 +867,14 @@ abstract contract LSP7DigitalAsset is * @param from The sender address * @param to The recipient address * @param amount The amount of token to transfer + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. * @param data The data sent alongside the transfer */ function _afterTokenTransfer( address from, address to, uint256 amount, + bool force, bytes memory data // solhint-disable-next-line no-empty-blocks ) internal virtual {} diff --git a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol index f4c817705..4d6329374 100644 --- a/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol +++ b/packages/lsp7-contracts/contracts/LSP7DigitalAssetInitAbstract.sol @@ -613,7 +613,7 @@ abstract contract LSP7DigitalAssetInitAbstract is revert LSP7CannotSendWithAddressZero(); } - _beforeTokenTransfer(address(0), to, amount, data); + _beforeTokenTransfer(address(0), to, amount, force, data); // tokens being minted _existingTokens += amount; @@ -629,7 +629,7 @@ abstract contract LSP7DigitalAssetInitAbstract is data: data }); - _afterTokenTransfer(address(0), to, amount, data); + _afterTokenTransfer(address(0), to, amount, force, data); bytes memory lsp1Data = abi.encode( msg.sender, @@ -675,7 +675,7 @@ abstract contract LSP7DigitalAssetInitAbstract is revert LSP7CannotSendWithAddressZero(); } - _beforeTokenTransfer(from, address(0), amount, data); + _beforeTokenTransfer(from, address(0), amount, false, data); uint256 balance = _tokenOwnerBalances[from]; if (amount > balance) { @@ -695,7 +695,7 @@ abstract contract LSP7DigitalAssetInitAbstract is data: data }); - _afterTokenTransfer(from, address(0), amount, data); + _afterTokenTransfer(from, address(0), amount, false, data); bytes memory lsp1Data = abi.encode( msg.sender, @@ -786,11 +786,11 @@ abstract contract LSP7DigitalAssetInitAbstract is revert LSP7CannotSendWithAddressZero(); } - _beforeTokenTransfer(from, to, amount, data); + _beforeTokenTransfer(from, to, amount, force, data); _update(from, to, amount, force, data); - _afterTokenTransfer(from, to, amount, data); + _afterTokenTransfer(from, to, amount, force, data); bytes memory lsp1Data = abi.encode(msg.sender, from, to, amount, data); @@ -847,7 +847,7 @@ abstract contract LSP7DigitalAssetInitAbstract is data: data }); - _afterTokenTransfer(from, to, amount, data); + _afterTokenTransfer(from, to, amount, force, data); bytes memory lsp1Data = abi.encode(msg.sender, from, to, amount, data); @@ -862,12 +862,14 @@ abstract contract LSP7DigitalAssetInitAbstract is * @param from The sender address * @param to The recipient address * @param amount The amount of token to transfer + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. * @param data The data sent alongside the transfer */ function _beforeTokenTransfer( address from, address to, uint256 amount, + bool force, bytes memory data // solhint-disable-next-line no-empty-blocks ) internal virtual {} @@ -878,12 +880,14 @@ abstract contract LSP7DigitalAssetInitAbstract is * @param from The sender address * @param to The recipient address * @param amount The amount of token to transfer + * @param force A boolean that describe if transfer to a `to` address that does not support LSP1 is allowed or not. * @param data The data sent alongside the transfer */ function _afterTokenTransfer( address from, address to, uint256 amount, + bool force, bytes memory data // solhint-disable-next-line no-empty-blocks ) internal virtual {} From 7cb6d45844b4753923f46c21b4d087cb2fe9af4c Mon Sep 17 00:00:00 2001 From: CJ42 Date: Thu, 9 Jan 2025 16:40:09 +0100 Subject: [PATCH 93/94] build: update dependencies to only consider packages to release --- .release-please-manifest.json | 3 +- package-lock.json | 316 +++++++++--------- package.json | 1 - packages/lsp-smart-contracts/package.json | 47 +-- packages/lsp0-contracts/CHANGELOG.md | 20 +- packages/lsp0-contracts/package.json | 14 +- packages/lsp1-contracts/CHANGELOG.md | 20 +- packages/lsp1-contracts/package.json | 4 +- packages/lsp10-contracts/CHANGELOG.md | 20 +- packages/lsp10-contracts/package.json | 2 +- packages/lsp11-contracts/package.json | 2 +- packages/lsp12-contracts/CHANGELOG.md | 20 +- packages/lsp12-contracts/package.json | 2 +- packages/lsp14-contracts/CHANGELOG.md | 20 +- packages/lsp14-contracts/package.json | 2 +- packages/lsp16-contracts/CHANGELOG.md | 20 +- packages/lsp16-contracts/package.json | 2 +- packages/lsp17-contracts/CHANGELOG.md | 20 +- packages/lsp17-contracts/package.json | 4 +- .../CHANGELOG.md | 20 +- .../package.json | 6 +- packages/lsp1delegate-contracts/CHANGELOG.md | 20 +- packages/lsp1delegate-contracts/package.json | 2 +- packages/lsp2-contracts/CHANGELOG.md | 20 +- packages/lsp2-contracts/package.json | 2 +- packages/lsp20-contracts/package.json | 2 +- packages/lsp23-contracts/CHANGELOG.md | 20 +- packages/lsp23-contracts/package.json | 6 +- packages/lsp25-contracts/package.json | 2 +- packages/lsp26-contracts/package.json | 4 +- packages/lsp3-contracts/CHANGELOG.md | 20 +- packages/lsp3-contracts/package.json | 2 +- packages/lsp4-contracts/CHANGELOG.md | 20 +- packages/lsp4-contracts/package.json | 6 +- packages/lsp5-contracts/CHANGELOG.md | 20 +- packages/lsp5-contracts/package.json | 2 +- packages/lsp6-contracts/CHANGELOG.md | 20 +- packages/lsp6-contracts/package.json | 4 +- packages/lsp7-contracts/CHANGELOG.md | 20 +- packages/lsp7-contracts/package.json | 12 +- packages/lsp8-contracts/CHANGELOG.md | 20 +- packages/lsp8-contracts/package.json | 12 +- packages/lsp9-contracts/CHANGELOG.md | 20 +- packages/lsp9-contracts/package.json | 4 +- .../universalprofile-contracts/package.json | 8 +- release-please-config.json | 6 +- template/README.md | 2 +- template/package.json | 2 +- 48 files changed, 451 insertions(+), 392 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 05a315756..fad9b0517 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -12,6 +12,7 @@ "packages/lsp8-contracts": "0.15.0", "packages/lsp9-contracts": "0.15.0", "packages/lsp10-contracts": "0.15.0", + "packages/lsp11-contracts": "0.1.0", "packages/lsp12-contracts": "0.15.0", "packages/lsp14-contracts": "0.15.0", "packages/lsp16-contracts": "0.15.0", @@ -20,6 +21,6 @@ "packages/lsp20-contracts": "0.15.0", "packages/lsp23-contracts": "0.15.0", "packages/lsp25-contracts": "0.15.0", - "packages/lsp26-contracts": "0.15.0", + "packages/lsp26-contracts": "0.1.0", "packages/universalprofile-contracts": "0.15.0" } diff --git a/package-lock.json b/package-lock.json index 32434b386..deecc59a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8995,105 +8995,6 @@ "typechain": "8.x" } }, - "node_modules/hardhat-packager/node_modules/@typechain/ethers-v5": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", - "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", - "dev": true, - "peer": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" - } - }, - "node_modules/hardhat-packager/node_modules/@typechain/hardhat": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", - "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", - "dev": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "^10.2.1", - "ethers": "^5.4.7", - "hardhat": "^2.9.9", - "typechain": "^8.1.1" - } - }, - "node_modules/hardhat-packager/node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hardhat-packager/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", "dev": true, @@ -18274,28 +18175,29 @@ "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@lukso/lsp0-contracts": "*", - "@lukso/lsp1-contracts": "*", - "@lukso/lsp10-contracts": "*", - "@lukso/lsp12-contracts": "*", - "@lukso/lsp14-contracts": "*", - "@lukso/lsp16-contracts": "*", - "@lukso/lsp17-contracts": "*", - "@lukso/lsp17contractextension-contracts": "*", - "@lukso/lsp1delegate-contracts": "*", - "@lukso/lsp2-contracts": "*", - "@lukso/lsp20-contracts": "*", - "@lukso/lsp23-contracts": "*", - "@lukso/lsp25-contracts": "*", - "@lukso/lsp26-contracts": "*", - "@lukso/lsp3-contracts": "*", - "@lukso/lsp4-contracts": "*", - "@lukso/lsp5-contracts": "*", - "@lukso/lsp6-contracts": "*", - "@lukso/lsp7-contracts": "*", - "@lukso/lsp8-contracts": "*", - "@lukso/lsp9-contracts": "*", - "@lukso/universalprofile-contracts": "*" + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp10-contracts": "~0.15.0", + "@lukso/lsp11-contracts": "~0.1.0", + "@lukso/lsp12-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp16-contracts": "~0.15.0", + "@lukso/lsp17-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.16.0", + "@lukso/lsp1delegate-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp23-contracts": "~0.15.0", + "@lukso/lsp25-contracts": "~0.15.0", + "@lukso/lsp26-contracts": "~0.1.0", + "@lukso/lsp3-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.16.0", + "@lukso/lsp5-contracts": "~0.15.0", + "@lukso/lsp6-contracts": "~0.15.0", + "@lukso/lsp7-contracts": "~0.16.0", + "@lukso/lsp8-contracts": "~0.16.0", + "@lukso/lsp9-contracts": "~0.15.0", + "@lukso/universalprofile-contracts": "~0.15.0" } }, "packages/lsp0-contracts": { @@ -18304,12 +18206,21 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "*", - "@lukso/lsp14-contracts": "*", - "@lukso/lsp17contractextension-contracts": "*", - "@lukso/lsp2-contracts": "*", - "@lukso/lsp20-contracts": "*", - "@openzeppelin/contracts": "^4.9.6" + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp0-contracts/node_modules/@lukso/lsp17contractextension-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", + "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp1-contracts": { @@ -18318,7 +18229,7 @@ "license": "Apache-2.0", "dependencies": { "@lukso/lsp2-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.6" + "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp10-contracts": { @@ -18326,8 +18237,18 @@ "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp2-contracts": "*" + "@erc725/smart-contracts": "^6.0.0", + "@lukso/lsp2-contracts": "~0.15.0" + } + }, + "packages/lsp10-contracts/node_modules/@erc725/smart-contracts": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@erc725/smart-contracts/-/smart-contracts-6.0.0.tgz", + "integrity": "sha512-6okutGGL9xbg/MSgAof2FU1UcSNE/z3p9TORlROVGaM3gi1A6FQQ7fDqtBYkPtvHureX8yS9gP7xPt3PRbP43Q==", + "dependencies": { + "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts-upgradeable": "^4.9.3", + "solidity-bytes-utils": "0.8.0" } }, "packages/lsp11-contracts": { @@ -18336,8 +18257,8 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp25-contracts": "*", - "@openzeppelin/contracts": "^4.9.3" + "@lukso/lsp25-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp12-contracts": { @@ -18374,18 +18295,27 @@ "dependencies": { "@account-abstraction/contracts": "^0.6.0", "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp14-contracts": "*", - "@lukso/lsp17contractextension-contracts": "*", - "@lukso/lsp20-contracts": "*", - "@openzeppelin/contracts": "^4.9.6" + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp17-contracts/node_modules/@lukso/lsp17contractextension-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", + "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp17contractextension-contracts": { "name": "@lukso/lsp17contractextension-contracts", - "version": "0.15.0", + "version": "0.16.0", "license": "Apache-2.0", "dependencies": { - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } }, "packages/lsp1delegate-contracts": { @@ -18394,13 +18324,57 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp1-contracts": "*", - "@lukso/lsp10-contracts": "*", - "@lukso/lsp5-contracts": "*", - "@lukso/lsp7-contracts": "*", - "@lukso/lsp8-contracts": "*", - "@lukso/lsp9-contracts": "*", - "@openzeppelin/contracts": "^4.9.6" + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp10-contracts": "~0.15.0", + "@lukso/lsp5-contracts": "~0.15.0", + "@lukso/lsp7-contracts": "~0.15.0", + "@lukso/lsp8-contracts": "~0.15.0", + "@lukso/lsp9-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp17contractextension-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", + "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp4-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp4-contracts/-/lsp4-contracts-0.15.0.tgz", + "integrity": "sha512-M85S5DN3hqHTIfTs7Cs1dqM4EE2ftEZfh0RcPV00+Fgo2IID8QQxKNFiGP1I59Upn6GsDar/RJpFyV1SCnAOGw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp2-contracts": "~0.15.0" + } + }, + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp7-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp7-contracts/-/lsp7-contracts-0.15.0.tgz", + "integrity": "sha512-9kQmwL49CA90vCF1dneG44DdtkNzmnWZ7JzLIopizLw8pnKxhvTAnnJFdsDUVZiDqH3l61RBY51IpEBj+u5yXA==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp1delegate-contracts/node_modules/@lukso/lsp8-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp8-contracts/-/lsp8-contracts-0.15.0.tgz", + "integrity": "sha512-7iWN55lSivJ8PUchY5ocrHjeQ/SeaL2zVrLBW+224AkFQn3no1hhZ8q9mqAbwxv0CEIt5L2x+2RclZq3yMa2uw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp2-contracts": { @@ -18408,7 +18382,8 @@ "version": "0.15.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "^7.0.0" + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp20-contracts": { @@ -18423,7 +18398,7 @@ "dependencies": { "@erc725/smart-contracts": "^7.0.0", "@lukso/universalprofile-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.6" + "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp25-contracts": { @@ -18436,7 +18411,7 @@ }, "packages/lsp26-contracts": { "name": "@lukso/lsp26-contracts", - "version": "0.15.0", + "version": "0.1.0", "license": "Apache-2.0", "dependencies": { "@lukso/lsp0-contracts": "~0.15.0", @@ -18454,11 +18429,11 @@ }, "packages/lsp4-contracts": { "name": "@lukso/lsp4-contracts", - "version": "0.15.0", + "version": "0.16.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts-v8": "npm:@erc725/smart-contracts@8.0.0", - "@lukso/lsp2-contracts": "*" + "@lukso/lsp2-contracts": "~0.15.0" } }, "packages/lsp5-contracts": { @@ -18482,19 +18457,28 @@ "@lukso/lsp2-contracts": "~0.15.0", "@lukso/lsp20-contracts": "~0.15.0", "@lukso/lsp25-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.6" + "@openzeppelin/contracts": "^4.9.3" + } + }, + "packages/lsp6-contracts/node_modules/@lukso/lsp17contractextension-contracts": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@lukso/lsp17contractextension-contracts/-/lsp17contractextension-contracts-0.15.0.tgz", + "integrity": "sha512-fwLrXi1jyiw6DlP6mt+NTweSxyPI3KaKk5UN9OwuT5KbaC7Upm50TFuA/IX+V4gY8/iVdr6uhy7nLg1+LQpSAw==", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3" } }, "packages/lsp7-contracts": { "name": "@lukso/lsp7-contracts", - "version": "0.15.0", + "version": "0.16.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^8.0.0", - "@lukso/lsp1-contracts": "*", - "@lukso/lsp17contractextension-contracts": "*", - "@lukso/lsp2-contracts": "*", - "@lukso/lsp4-contracts": "*", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.16.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.16.0", "@openzeppelin/contracts": "^4.9.6" } }, @@ -18509,14 +18493,14 @@ }, "packages/lsp8-contracts": { "name": "@lukso/lsp8-contracts", - "version": "0.15.0", + "version": "0.16.0", "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^8.0.0", - "@lukso/lsp1-contracts": "*", - "@lukso/lsp17contractextension-contracts": "*", - "@lukso/lsp2-contracts": "*", - "@lukso/lsp4-contracts": "*", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.16.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.16.0", "@openzeppelin/contracts": "^4.9.6" } }, @@ -18537,7 +18521,7 @@ "@erc725/smart-contracts": "^7.0.0", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp6-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.6" + "@openzeppelin/contracts": "^4.9.3" } }, "packages/universalprofile-contracts": { @@ -18546,10 +18530,10 @@ "license": "Apache-2.0", "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp0-contracts": "*", - "@lukso/lsp3-contracts": "*", - "@openzeppelin/contracts": "^4.9.6" + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp3-contracts": "~0.15.0", + "@openzeppelin/contracts": "^4.9.3" } } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 01182a5c6..442a65c95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,5 @@ { "name": "@lukso/lsp-smart-contracts-monorepo", - "version": "0.14.0", "description": "The reference smart contract implementation for the LUKSO LSP standards", "private": true, "packageManager": "^npm@10.1.0", diff --git a/packages/lsp-smart-contracts/package.json b/packages/lsp-smart-contracts/package.json index 5dead1d92..5a338878b 100644 --- a/packages/lsp-smart-contracts/package.json +++ b/packages/lsp-smart-contracts/package.json @@ -57,7 +57,7 @@ "build:js": "unbuild", "build:types": "npx wagmi generate", "build:docs": "hardhat dodoc && prettier -w ./docs && bash dodoc/postProcessingContracts.sh && dodoc/postProcessingLibraries.sh", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", @@ -68,27 +68,28 @@ "test:benchmark": "hardhat test --no-compile tests/Benchmark.test.ts" }, "dependencies": { - "@lukso/lsp0-contracts": "*", - "@lukso/lsp1-contracts": "*", - "@lukso/lsp10-contracts": "*", - "@lukso/lsp12-contracts": "*", - "@lukso/lsp14-contracts": "*", - "@lukso/lsp16-contracts": "*", - "@lukso/lsp17-contracts": "*", - "@lukso/lsp17contractextension-contracts": "*", - "@lukso/lsp1delegate-contracts": "*", - "@lukso/lsp2-contracts": "*", - "@lukso/lsp20-contracts": "*", - "@lukso/lsp23-contracts": "*", - "@lukso/lsp25-contracts": "*", - "@lukso/lsp26-contracts": "*", - "@lukso/lsp3-contracts": "*", - "@lukso/lsp4-contracts": "*", - "@lukso/lsp5-contracts": "*", - "@lukso/lsp6-contracts": "*", - "@lukso/lsp7-contracts": "*", - "@lukso/lsp8-contracts": "*", - "@lukso/lsp9-contracts": "*", - "@lukso/universalprofile-contracts": "*" + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp10-contracts": "~0.15.0", + "@lukso/lsp11-contracts": "~0.1.0", + "@lukso/lsp12-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp16-contracts": "~0.15.0", + "@lukso/lsp17-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.16.0", + "@lukso/lsp1delegate-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0", + "@lukso/lsp23-contracts": "~0.15.0", + "@lukso/lsp25-contracts": "~0.15.0", + "@lukso/lsp26-contracts": "~0.1.0", + "@lukso/lsp3-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.16.0", + "@lukso/lsp5-contracts": "~0.15.0", + "@lukso/lsp6-contracts": "~0.15.0", + "@lukso/lsp7-contracts": "~0.16.0", + "@lukso/lsp8-contracts": "~0.16.0", + "@lukso/lsp9-contracts": "~0.15.0", + "@lukso/universalprofile-contracts": "~0.15.0" } } diff --git a/packages/lsp0-contracts/CHANGELOG.md b/packages/lsp0-contracts/CHANGELOG.md index b9626851c..26614a89a 100644 --- a/packages/lsp0-contracts/CHANGELOG.md +++ b/packages/lsp0-contracts/CHANGELOG.md @@ -54,28 +54,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp0-contracts-v0.15.0-rc.0...lsp0-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp0-contracts-v0.15.0-rc.0...lsp0-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp0-contracts-v0.14.0...lsp0-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp0-contracts/package.json b/packages/lsp0-contracts/package.json index d15f4c3ff..f4b3fad27 100644 --- a/packages/lsp0-contracts/package.json +++ b/packages/lsp0-contracts/package.json @@ -40,7 +40,7 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", @@ -49,11 +49,11 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.6", - "@lukso/lsp1-contracts": "*", - "@lukso/lsp2-contracts": "*", - "@lukso/lsp14-contracts": "*", - "@lukso/lsp17contractextension-contracts": "*", - "@lukso/lsp20-contracts": "*" + "@openzeppelin/contracts": "^4.9.3", + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp14-contracts": "~0.15.0", + "@lukso/lsp17contractextension-contracts": "~0.15.0", + "@lukso/lsp20-contracts": "~0.15.0" } } diff --git a/packages/lsp1-contracts/CHANGELOG.md b/packages/lsp1-contracts/CHANGELOG.md index e6eba0740..6f55ab3cb 100644 --- a/packages/lsp1-contracts/CHANGELOG.md +++ b/packages/lsp1-contracts/CHANGELOG.md @@ -54,28 +54,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1-contracts-v0.15.0-rc.0...lsp1-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1-contracts-v0.15.0-rc.0...lsp1-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1-contracts-v0.14.0...lsp1-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp1-contracts/package.json b/packages/lsp1-contracts/package.json index 84162f3ea..c3d2cd179 100644 --- a/packages/lsp1-contracts/package.json +++ b/packages/lsp1-contracts/package.json @@ -37,14 +37,14 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", "package": "hardhat prepare-package" }, "dependencies": { - "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts": "^4.9.3", "@lukso/lsp2-contracts": "~0.15.0" } } diff --git a/packages/lsp10-contracts/CHANGELOG.md b/packages/lsp10-contracts/CHANGELOG.md index 5b95c92cf..a9970f5e7 100644 --- a/packages/lsp10-contracts/CHANGELOG.md +++ b/packages/lsp10-contracts/CHANGELOG.md @@ -44,28 +44,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp10-contracts-v0.15.0-rc.0...lsp10-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp10-contracts-v0.15.0-rc.0...lsp10-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp10-contracts-v0.14.0...lsp10-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp10-contracts/package.json b/packages/lsp10-contracts/package.json index 5a6f8250c..027a62580 100644 --- a/packages/lsp10-contracts/package.json +++ b/packages/lsp10-contracts/package.json @@ -36,7 +36,7 @@ "scripts": { "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'" diff --git a/packages/lsp11-contracts/package.json b/packages/lsp11-contracts/package.json index a39a8d9e3..d7ed7be73 100644 --- a/packages/lsp11-contracts/package.json +++ b/packages/lsp11-contracts/package.json @@ -38,7 +38,7 @@ "build:foundry": "forge build", "build:types": "npx wagmi generate", "build:js": "unbuild", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", diff --git a/packages/lsp12-contracts/CHANGELOG.md b/packages/lsp12-contracts/CHANGELOG.md index a5a53a68b..cf60f5670 100644 --- a/packages/lsp12-contracts/CHANGELOG.md +++ b/packages/lsp12-contracts/CHANGELOG.md @@ -44,28 +44,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp12-contracts-v0.15.0-rc.0...lsp12-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp12-contracts-v0.15.0-rc.0...lsp12-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp12-contracts-v0.14.0...lsp12-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp12-contracts/package.json b/packages/lsp12-contracts/package.json index 8a03aaa16..89ee91603 100644 --- a/packages/lsp12-contracts/package.json +++ b/packages/lsp12-contracts/package.json @@ -36,7 +36,7 @@ "scripts": { "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'" diff --git a/packages/lsp14-contracts/CHANGELOG.md b/packages/lsp14-contracts/CHANGELOG.md index de727acb7..a79b2db59 100644 --- a/packages/lsp14-contracts/CHANGELOG.md +++ b/packages/lsp14-contracts/CHANGELOG.md @@ -49,28 +49,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp14-contracts-v0.15.0-rc.0...lsp14-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp14-contracts-v0.15.0-rc.0...lsp14-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp14-contracts-v0.14.0...lsp14-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp14-contracts/package.json b/packages/lsp14-contracts/package.json index 3e0461d5a..d26b02f8f 100644 --- a/packages/lsp14-contracts/package.json +++ b/packages/lsp14-contracts/package.json @@ -37,7 +37,7 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", diff --git a/packages/lsp16-contracts/CHANGELOG.md b/packages/lsp16-contracts/CHANGELOG.md index 44318253e..00438c231 100644 --- a/packages/lsp16-contracts/CHANGELOG.md +++ b/packages/lsp16-contracts/CHANGELOG.md @@ -49,28 +49,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp16-contracts-v0.15.0-rc.0...lsp16-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp16-contracts-v0.15.0-rc.0...lsp16-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp16-contracts-v0.14.0...lsp16-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp16-contracts/package.json b/packages/lsp16-contracts/package.json index cefbe1dba..4fbae103d 100644 --- a/packages/lsp16-contracts/package.json +++ b/packages/lsp16-contracts/package.json @@ -36,7 +36,7 @@ "build": "hardhat compile --show-stack-traces", "build:foundry": "forge build", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", diff --git a/packages/lsp17-contracts/CHANGELOG.md b/packages/lsp17-contracts/CHANGELOG.md index 82c8288b8..831432d65 100644 --- a/packages/lsp17-contracts/CHANGELOG.md +++ b/packages/lsp17-contracts/CHANGELOG.md @@ -49,28 +49,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17-contracts-v0.15.0-rc.0...lsp17-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17-contracts-v0.15.0-rc.0...lsp17-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17-contracts-v0.14.0...lsp17-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp17-contracts/package.json b/packages/lsp17-contracts/package.json index 9a09a821d..e60e5ea85 100644 --- a/packages/lsp17-contracts/package.json +++ b/packages/lsp17-contracts/package.json @@ -37,7 +37,7 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", @@ -45,7 +45,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts": "^4.9.3", "@account-abstraction/contracts": "^0.6.0", "@lukso/lsp6-contracts": "~0.15.0", "@lukso/lsp14-contracts": "~0.15.0", diff --git a/packages/lsp17contractextension-contracts/CHANGELOG.md b/packages/lsp17contractextension-contracts/CHANGELOG.md index a5a11fa5c..eb89ab7b7 100644 --- a/packages/lsp17contractextension-contracts/CHANGELOG.md +++ b/packages/lsp17contractextension-contracts/CHANGELOG.md @@ -49,28 +49,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17contractextension-contracts-v0.15.0-rc.0...lsp17contractextension-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17contractextension-contracts-v0.15.0-rc.0...lsp17contractextension-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp17contractextension-contracts-v0.14.0...lsp17contractextension-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp17contractextension-contracts/package.json b/packages/lsp17contractextension-contracts/package.json index b974fe525..09d285a3d 100644 --- a/packages/lsp17contractextension-contracts/package.json +++ b/packages/lsp17contractextension-contracts/package.json @@ -1,6 +1,6 @@ { "name": "@lukso/lsp17contractextension-contracts", - "version": "0.15.0", + "version": "0.16.0", "description": "Package for the LSP17 Contract Extension standard", "license": "Apache-2.0", "author": "", @@ -37,13 +37,13 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", "package": "hardhat prepare-package" }, "dependencies": { - "@openzeppelin/contracts": "^4.9.3" + "@openzeppelin/contracts": "^4.9.6" } } diff --git a/packages/lsp1delegate-contracts/CHANGELOG.md b/packages/lsp1delegate-contracts/CHANGELOG.md index cd1c73d44..914d6a3f9 100644 --- a/packages/lsp1delegate-contracts/CHANGELOG.md +++ b/packages/lsp1delegate-contracts/CHANGELOG.md @@ -54,28 +54,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1delegate-contracts-v0.15.0-rc.0...lsp1delegate-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1delegate-contracts-v0.15.0-rc.0...lsp1delegate-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp1delegate-contracts-v0.14.0...lsp1delegate-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp1delegate-contracts/package.json b/packages/lsp1delegate-contracts/package.json index 322138285..49141e60e 100644 --- a/packages/lsp1delegate-contracts/package.json +++ b/packages/lsp1delegate-contracts/package.json @@ -39,7 +39,7 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", diff --git a/packages/lsp2-contracts/CHANGELOG.md b/packages/lsp2-contracts/CHANGELOG.md index 9a99aaf3c..69fff3bfd 100644 --- a/packages/lsp2-contracts/CHANGELOG.md +++ b/packages/lsp2-contracts/CHANGELOG.md @@ -44,28 +44,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp2-contracts-v0.15.0-rc.0...lsp2-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp2-contracts-v0.15.0-rc.0...lsp2-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp2-contracts-v0.14.0...lsp2-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp2-contracts/package.json b/packages/lsp2-contracts/package.json index 5e28aaff5..5b772f1cb 100644 --- a/packages/lsp2-contracts/package.json +++ b/packages/lsp2-contracts/package.json @@ -37,7 +37,7 @@ "build": "hardhat compile --show-stack-traces", "build:foundry": "forge build", "build:js": "unbuild", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", diff --git a/packages/lsp20-contracts/package.json b/packages/lsp20-contracts/package.json index eef5d0f61..6c9273aea 100644 --- a/packages/lsp20-contracts/package.json +++ b/packages/lsp20-contracts/package.json @@ -37,7 +37,7 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", diff --git a/packages/lsp23-contracts/CHANGELOG.md b/packages/lsp23-contracts/CHANGELOG.md index ad7ad08cf..819081b8f 100644 --- a/packages/lsp23-contracts/CHANGELOG.md +++ b/packages/lsp23-contracts/CHANGELOG.md @@ -54,28 +54,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp23-contracts-v0.15.0-rc.0...lsp23-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp23-contracts-v0.15.0-rc.0...lsp23-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp23-contracts-v0.14.0...lsp23-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp23-contracts/package.json b/packages/lsp23-contracts/package.json index 2ad00fabb..598946249 100644 --- a/packages/lsp23-contracts/package.json +++ b/packages/lsp23-contracts/package.json @@ -38,7 +38,7 @@ "scripts": { "build": "hardhat compile --show-stack-traces", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", @@ -46,7 +46,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@lukso/universalprofile-contracts": "~0.15.0", - "@openzeppelin/contracts": "^4.9.6" + "@openzeppelin/contracts": "^4.9.3", + "@lukso/universalprofile-contracts": "~0.15.0" } } diff --git a/packages/lsp25-contracts/package.json b/packages/lsp25-contracts/package.json index 3430c3388..85ecb0733 100644 --- a/packages/lsp25-contracts/package.json +++ b/packages/lsp25-contracts/package.json @@ -38,7 +38,7 @@ "build:js": "unbuild", "build:types": "npx wagmi generate", "package": "hardhat prepare-package", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", diff --git a/packages/lsp26-contracts/package.json b/packages/lsp26-contracts/package.json index 32e78413c..a8a9b52d6 100644 --- a/packages/lsp26-contracts/package.json +++ b/packages/lsp26-contracts/package.json @@ -1,6 +1,6 @@ { "name": "@lukso/lsp26-contracts", - "version": "0.15.0", + "version": "0.1.0", "description": "Package for the LSP26 Follower System standard", "license": "Apache-2.0", "author": "", @@ -39,7 +39,7 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", diff --git a/packages/lsp3-contracts/CHANGELOG.md b/packages/lsp3-contracts/CHANGELOG.md index 658c48d09..e65230084 100644 --- a/packages/lsp3-contracts/CHANGELOG.md +++ b/packages/lsp3-contracts/CHANGELOG.md @@ -44,28 +44,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp3-contracts-v0.15.0-rc.0...lsp3-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp3-contracts-v0.15.0-rc.0...lsp3-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp3-contracts-v0.14.0...lsp3-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp3-contracts/package.json b/packages/lsp3-contracts/package.json index 99afad43e..865292394 100644 --- a/packages/lsp3-contracts/package.json +++ b/packages/lsp3-contracts/package.json @@ -36,7 +36,7 @@ "scripts": { "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'" }, diff --git a/packages/lsp4-contracts/CHANGELOG.md b/packages/lsp4-contracts/CHANGELOG.md index 249344a19..a3509455b 100644 --- a/packages/lsp4-contracts/CHANGELOG.md +++ b/packages/lsp4-contracts/CHANGELOG.md @@ -54,28 +54,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp4-contracts-v0.15.0-rc.0...lsp4-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp4-contracts-v0.15.0-rc.0...lsp4-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp4-contracts-v0.14.0...lsp4-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp4-contracts/package.json b/packages/lsp4-contracts/package.json index 105ad4a8d..bc3ee7a43 100644 --- a/packages/lsp4-contracts/package.json +++ b/packages/lsp4-contracts/package.json @@ -1,6 +1,6 @@ { "name": "@lukso/lsp4-contracts", - "version": "0.15.0", + "version": "0.16.0", "description": "Package for the LSP4 Digital Asset Metadata standard", "license": "Apache-2.0", "author": "", @@ -39,7 +39,7 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", @@ -49,6 +49,6 @@ }, "dependencies": { "@erc725/smart-contracts-v8": "npm:@erc725/smart-contracts@8.0.0", - "@lukso/lsp2-contracts": "*" + "@lukso/lsp2-contracts": "~0.15.0" } } diff --git a/packages/lsp5-contracts/CHANGELOG.md b/packages/lsp5-contracts/CHANGELOG.md index 36f2bb649..11f219409 100644 --- a/packages/lsp5-contracts/CHANGELOG.md +++ b/packages/lsp5-contracts/CHANGELOG.md @@ -49,28 +49,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp5-contracts-v0.15.0-rc.0...lsp5-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp5-contracts-v0.15.0-rc.0...lsp5-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp5-contracts-v0.14.0...lsp5-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp5-contracts/package.json b/packages/lsp5-contracts/package.json index efa7da8a5..0c01dedc5 100644 --- a/packages/lsp5-contracts/package.json +++ b/packages/lsp5-contracts/package.json @@ -36,7 +36,7 @@ "scripts": { "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", diff --git a/packages/lsp6-contracts/CHANGELOG.md b/packages/lsp6-contracts/CHANGELOG.md index 5078a2ade..53f45654b 100644 --- a/packages/lsp6-contracts/CHANGELOG.md +++ b/packages/lsp6-contracts/CHANGELOG.md @@ -54,28 +54,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp6-contracts-v0.15.0-rc.0...lsp6-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp6-contracts-v0.15.0-rc.0...lsp6-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp6-contracts-v0.14.0...lsp6-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp6-contracts/package.json b/packages/lsp6-contracts/package.json index 7a3c96865..679b948c7 100644 --- a/packages/lsp6-contracts/package.json +++ b/packages/lsp6-contracts/package.json @@ -40,7 +40,7 @@ "build:foundry": "forge build", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", @@ -49,7 +49,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts": "^4.9.3", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp2-contracts": "~0.15.0", "@lukso/lsp14-contracts": "~0.15.0", diff --git a/packages/lsp7-contracts/CHANGELOG.md b/packages/lsp7-contracts/CHANGELOG.md index 1b099e1ae..038dabeb6 100644 --- a/packages/lsp7-contracts/CHANGELOG.md +++ b/packages/lsp7-contracts/CHANGELOG.md @@ -59,28 +59,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp7-contracts-v0.15.0-rc.0...lsp7-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp7-contracts-v0.15.0-rc.0...lsp7-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp7-contracts-v0.15.0-rc.0...lsp7-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp7-contracts/package.json b/packages/lsp7-contracts/package.json index 11290fa5f..ff5319526 100644 --- a/packages/lsp7-contracts/package.json +++ b/packages/lsp7-contracts/package.json @@ -1,6 +1,6 @@ { "name": "@lukso/lsp7-contracts", - "version": "0.15.0", + "version": "0.16.0", "description": "Package for the LSP7 Digital Asset standard", "license": "Apache-2.0", "author": "", @@ -40,7 +40,7 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", @@ -49,9 +49,9 @@ "dependencies": { "@erc725/smart-contracts": "^8.0.0", "@openzeppelin/contracts": "^4.9.6", - "@lukso/lsp1-contracts": "*", - "@lukso/lsp2-contracts": "*", - "@lukso/lsp4-contracts": "*", - "@lukso/lsp17contractextension-contracts": "*" + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.16.0", + "@lukso/lsp17contractextension-contracts": "~0.16.0" } } diff --git a/packages/lsp8-contracts/CHANGELOG.md b/packages/lsp8-contracts/CHANGELOG.md index 7b3c288d5..aa78e855f 100644 --- a/packages/lsp8-contracts/CHANGELOG.md +++ b/packages/lsp8-contracts/CHANGELOG.md @@ -59,28 +59,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp8-contracts-v0.15.0-rc.0...lsp8-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp8-contracts-v0.15.0-rc.0...lsp8-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp8-contracts-v0.15.0-rc.0...lsp8-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp8-contracts/package.json b/packages/lsp8-contracts/package.json index 1a5b12406..956853443 100644 --- a/packages/lsp8-contracts/package.json +++ b/packages/lsp8-contracts/package.json @@ -1,6 +1,6 @@ { "name": "@lukso/lsp8-contracts", - "version": "0.15.0", + "version": "0.16.0", "description": "Package for the LSP8 Identifiable Digital Asset standard", "license": "Apache-2.0", "author": "", @@ -40,7 +40,7 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", @@ -49,9 +49,9 @@ "dependencies": { "@erc725/smart-contracts": "^8.0.0", "@openzeppelin/contracts": "^4.9.6", - "@lukso/lsp1-contracts": "*", - "@lukso/lsp2-contracts": "*", - "@lukso/lsp4-contracts": "*", - "@lukso/lsp17contractextension-contracts": "*" + "@lukso/lsp1-contracts": "~0.15.0", + "@lukso/lsp2-contracts": "~0.15.0", + "@lukso/lsp4-contracts": "~0.16.0", + "@lukso/lsp17contractextension-contracts": "~0.16.0" } } diff --git a/packages/lsp9-contracts/CHANGELOG.md b/packages/lsp9-contracts/CHANGELOG.md index ed8a70e14..1f0e29909 100644 --- a/packages/lsp9-contracts/CHANGELOG.md +++ b/packages/lsp9-contracts/CHANGELOG.md @@ -54,28 +54,32 @@ ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp9-contracts-v0.15.0-rc.0...lsp9-contracts-v0.15.0-rc.0) (2024-03-07) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp9-contracts-v0.15.0-rc.0...lsp9-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## [0.15.0-rc.0](https://github.com/lukso-network/lsp-smart-contracts/compare/lsp9-contracts-v0.14.0...lsp9-contracts-v0.15.0-rc.0) (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) ## 0.15.0-rc.0 (2024-03-06) + ### Miscellaneous Chores -- release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) -- release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) +* release 0.12.0 ([fbbec61](https://github.com/lukso-network/lsp-smart-contracts/commit/fbbec6199c6351721acedb35110fc1cc7bbb65ad)) +* release 0.13.0 ([#817](https://github.com/lukso-network/lsp-smart-contracts/issues/817)) ([1bd2f5f](https://github.com/lukso-network/lsp-smart-contracts/commit/1bd2f5f699ecdbef857527cdac50df50dc051002)) diff --git a/packages/lsp9-contracts/package.json b/packages/lsp9-contracts/package.json index 9e30750a7..a30335750 100644 --- a/packages/lsp9-contracts/package.json +++ b/packages/lsp9-contracts/package.json @@ -39,7 +39,7 @@ "build": "hardhat compile --show-stack-traces", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", @@ -47,7 +47,7 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.6", + "@openzeppelin/contracts": "^4.9.3", "@lukso/lsp1-contracts": "~0.15.0", "@lukso/lsp6-contracts": "~0.15.0" } diff --git a/packages/universalprofile-contracts/package.json b/packages/universalprofile-contracts/package.json index 655bd476b..759174034 100644 --- a/packages/universalprofile-contracts/package.json +++ b/packages/universalprofile-contracts/package.json @@ -37,7 +37,7 @@ "scripts": { "build": "hardhat compile --show-stack-traces", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", @@ -45,8 +45,8 @@ }, "dependencies": { "@erc725/smart-contracts": "^7.0.0", - "@openzeppelin/contracts": "^4.9.6", - "@lukso/lsp0-contracts": "*", - "@lukso/lsp3-contracts": "*" + "@openzeppelin/contracts": "^4.9.3", + "@lukso/lsp0-contracts": "~0.15.0", + "@lukso/lsp3-contracts": "~0.15.0" } } diff --git a/release-please-config.json b/release-please-config.json index 466a15980..bc1989253 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -213,7 +213,8 @@ "bump-minor-pre-major": true, "bump-patch-for-minor-pre-major": false, "draft": false, - "prerelease-type": "rc" + "prerelease-type": "rc", + "release-as": "0.1.0" }, "packages/lsp25-contracts": { "component": "lsp25-contracts", @@ -233,7 +234,8 @@ "bump-minor-pre-major": true, "bump-patch-for-minor-pre-major": false, "draft": false, - "prerelease-type": "rc" + "prerelease-type": "rc", + "release-as": "0.1.0" }, "packages/universalprofile-contracts": { "component": "universalprofile-contracts", diff --git a/template/README.md b/template/README.md index 44c90d86b..c7d2ad340 100644 --- a/template/README.md +++ b/template/README.md @@ -25,7 +25,7 @@ cp -r template packages/lsp-name If this LSP uses external dependencies like `@openzeppelin/contracts`, put them under `dependencies` with the version number. ```json -"@openzeppelin/contracts": "^4.9.3" +"@openzeppelin/contracts": "^4.9.6" ``` If this LSP uses other LSP as dependencies, put each LSP dependency as shown below. This will use the current code in the package: diff --git a/template/package.json b/template/package.json index 6c6368add..41beb771f 100644 --- a/template/package.json +++ b/template/package.json @@ -40,7 +40,7 @@ "build:foundry": "forge build", "build:js": "unbuild", "build:types": "npx wagmi generate", - "clean": "hardhat clean && rm -Rf dist/", + "clean": "hardhat clean && rm -Rf dist/ cache/ node_modules/ .turbo/", "format": "prettier --write .", "lint": "eslint . --ext .ts,.js", "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'", From 8d869a7fdb165cb80297642fc4cc8c106d6e25c3 Mon Sep 17 00:00:00 2001 From: CJ42 Date: Fri, 10 Jan 2025 11:56:44 +0100 Subject: [PATCH 94/94] refactor: change import for LSP11 in lsp-smart-contracts to use latest version of LSP11 --- .prettierignore | 3 +- foundry.toml | 10 +- package-lock.json | 1 - packages/lsp-smart-contracts/constants.ts | 3 +- .../ILSP11BasicSocialRecovery.sol | 179 --- .../LSP11BasicSocialRecovery.sol | 25 - .../LSP11BasicSocialRecoveryCore.sol | 340 ----- .../LSP11BasicSocialRecoveryInit.sol | 30 - .../LSP11BasicSocialRecoveryInitAbstract.sol | 29 - .../LSP11Constants.sol | 6 - .../LSP11BasicSocialRecovery/LSP11Errors.sol | 63 - .../ILSP11SocialRecovery.sol | 4 + .../LSP11SocialRecovery/LSP11Constants.sol | 4 + .../LSP11SocialRecovery/LSP11Errors.sol | 4 + .../LSP11SocialRecovery.sol | 4 + .../LSP4DigitalAssetMetadata/LSP4Utils.sol | 2 +- .../contracts/Mocks/ERC165Interfaces.sol | 27 +- .../LSP11BasicSocialRecovery.behaviour.ts | 1135 ----------------- .../LSP11BasicSocialRecovery.test.ts | 71 -- .../LSP11BasicSocialRecoveryInit.test.ts | 111 -- .../tests/Mocks/ERC165Interfaces.test.ts | 2 +- .../LSP11BasicSocialRecovery.t.sol | 75 -- .../LSP11BasicSocialRecovery/LSP11Mock.sol | 41 - .../contracts/LSP11SocialRecovery.sol | 22 +- ....sol => LSP11AccountFunctionalities.t.sol} | 0 packages/lsp11-contracts/package.json | 3 +- .../lsp4-contracts/contracts/LSP4Utils.sol | 2 +- publish.mjs | 12 +- 28 files changed, 66 insertions(+), 2142 deletions(-) delete mode 100644 packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol delete mode 100644 packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.sol delete mode 100644 packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryCore.sol delete mode 100644 packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInit.sol delete mode 100644 packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInitAbstract.sol delete mode 100644 packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11Constants.sol delete mode 100644 packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11Errors.sol create mode 100644 packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/ILSP11SocialRecovery.sol create mode 100644 packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11Constants.sol create mode 100644 packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11Errors.sol create mode 100644 packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11SocialRecovery.sol delete mode 100644 packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.behaviour.ts delete mode 100644 packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.test.ts delete mode 100644 packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInit.test.ts delete mode 100644 packages/lsp-smart-contracts/tests/foundry/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.t.sol delete mode 100644 packages/lsp-smart-contracts/tests/foundry/LSP11BasicSocialRecovery/LSP11Mock.sol rename packages/lsp11-contracts/foundry/{LSP11UniversalRecovery.t.sol => LSP11AccountFunctionalities.t.sol} (100%) diff --git a/.prettierignore b/.prettierignore index cc34a39c8..b394cac03 100644 --- a/.prettierignore +++ b/.prettierignore @@ -12,4 +12,5 @@ /package /module packages/*/types/ -packages/*/artifacts/ \ No newline at end of file +packages/*/artifacts/ +packages/*/CHANGELOG.md diff --git a/foundry.toml b/foundry.toml index 2873a92a8..cb15bda7d 100644 --- a/foundry.toml +++ b/foundry.toml @@ -21,16 +21,16 @@ src = 'packages/lsp2-contracts/contracts' test = 'packages/lsp2-contracts/foundry' out = 'packages/lsp2-contracts/contracts/foundry_artifacts' -[profile.lsp11] -src = 'packages/lsp11-contracts/contracts' -test = 'packages/lsp11-contracts/foundry' -out = 'packages/lsp11-contracts/contracts/foundry_artifacts' - [profile.lsp6] src = 'packages/lsp6-contracts/contracts' test = 'packages/lsp6-contracts/foundry' out = 'packages/lsp6-contracts/contracts/foundry_artifacts' +[profile.lsp11] +src = 'packages/lsp11-contracts/contracts' +test = 'packages/lsp11-contracts/foundry' +out = 'packages/lsp11-contracts/contracts/foundry_artifacts' + [profile.lsp16] src = 'packages/lsp16-contracts/contracts' test = 'packages/lsp16-contracts/foundry' diff --git a/package-lock.json b/package-lock.json index deecc59a0..f3d486f23 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18256,7 +18256,6 @@ "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@erc725/smart-contracts": "^7.0.0", "@lukso/lsp25-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.6" } diff --git a/packages/lsp-smart-contracts/constants.ts b/packages/lsp-smart-contracts/constants.ts index d78844d9e..488d57a39 100644 --- a/packages/lsp-smart-contracts/constants.ts +++ b/packages/lsp-smart-contracts/constants.ts @@ -43,6 +43,7 @@ import { INTERFACE_ID_LSP6 } from '@lukso/lsp6-contracts'; import { INTERFACE_ID_LSP7 } from '@lukso/lsp7-contracts'; import { INTERFACE_ID_LSP8 } from '@lukso/lsp8-contracts'; import { INTERFACE_ID_LSP9 } from '@lukso/lsp9-contracts'; +import { INTERFACE_ID_LSP11 } from '@lukso/lsp11-contracts'; import { INTERFACE_ID_LSP14 } from '@lukso/lsp14-contracts'; import { INTERFACE_ID_LSP17Extendable, @@ -111,12 +112,12 @@ export const INTERFACE_IDS = { LSP7DigitalAsset: INTERFACE_ID_LSP7, LSP8IdentifiableDigitalAsset: INTERFACE_ID_LSP8, LSP9Vault: INTERFACE_ID_LSP9, + LSP11SocialRecovery: INTERFACE_ID_LSP11, LSP14Ownable2Step: INTERFACE_ID_LSP14, LSP17Extendable: INTERFACE_ID_LSP17Extendable, LSP17Extension: INTERFACE_ID_LSP17Extension, LSP20CallVerification: INTERFACE_ID_LSP20CallVerification, LSP20CallVerifier: INTERFACE_ID_LSP20CallVerifier, - LSP11BasicSocialRecovery: '0x049a28f1', LSP25ExecuteRelayCall: INTERFACE_ID_LSP25, LSP26FollowerSystem: INTERFACE_ID_LSP26, } as const; diff --git a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol deleted file mode 100644 index 4259c2b72..000000000 --- a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol +++ /dev/null @@ -1,179 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.0; - -/** - * @title Interface of the LSP11 - Basic Social Recovery standard, a contract to recover access control into an account. - * @dev Sets permission for a controller address after a recovery process to interact with an ERC725 - * contract via the LSP6KeyManager - */ -interface ILSP11BasicSocialRecovery { - /** - * @notice Emitted when setting a new guardian for the target - * @param newGuardian The address of the added guardian - */ - event GuardianAdded(address indexed newGuardian); - - /** - * @notice Emitted when removing an existing guardian for the target - * @param removedGuardian The address of the guardian removed - */ - event GuardianRemoved(address indexed removedGuardian); - - /** - * @notice Emitted when changing the guardian threshold - * @param guardianThreshold The minimum number of selection by guardians needed by a controller to start - * a recovery process - */ - event GuardiansThresholdChanged(uint256 indexed guardianThreshold); - - /** - * @notice Emitted when changing the secret hash - * @param secretHash The secret hash used to finish the recovery process - */ - event SecretHashChanged(bytes32 indexed secretHash); - - /** - * @notice Emitted when a guardian select a new potential controller address for the target - * @param recoveryCounter The current recovery process counter - * @param guardian The address of the guardian - * @param addressSelected The address selected by the guardian - */ - event SelectedNewController( - uint256 indexed recoveryCounter, - address indexed guardian, - address indexed addressSelected - ); - - /** - * @notice Emitted when the recovery process is finished by the controller who - * reached the guardian threshold and submitted the string that produce the secretHash - * @param recoveryCounter The current recovery process - * @param newController The address of the new controller controlling the target by the KeyManager - * @param guardians The array of addresses containing the guardians of the target - */ - event RecoveryProcessSuccessful( - uint256 indexed recoveryCounter, - address indexed newController, - bytes32 indexed newSecretHash, - address[] guardians - ); - - /** - * @dev The address of an ERC725 contract where we want to recover - * and set permissions for a controller address - */ - function target() external view returns (address); - - /** - * @dev Returns the current recovery counter - * When a recovery process is successfully finished the recovery counter is incremented - */ - function getRecoveryCounter() external view returns (uint256); - - /** - * @dev Returns the addresses of all guardians - * The guardians will select an address to be added as a controller - * key for the linked `target` if he reaches the guardian threshold and - * provide the correct string that produce the secretHash - */ - function getGuardians() external view returns (address[] memory); - - /** - * @dev Returns TRUE if the address provided is a guardian, FALSE otherwise - * @param _address The address to query - */ - function isGuardian(address _address) external view returns (bool); - - /** - * @dev Returns the recovery secret hash - */ - function getRecoverySecretHash() external view returns (bytes32); - - /** - * @dev Returns the guardian threshold - * The guardian threshold represents the minimum number of selection by guardians required - * for an address to start a recovery process - */ - function getGuardiansThreshold() external view returns (uint256); - - /** - * @dev Returns the address of a controller that a `guardian` selected for in order to recover the target - * @param guardian the address of a guardian to query his selection - * @return the address that `guardian` selected - */ - function getGuardianChoice( - address guardian - ) external view returns (address); - - /** - * @dev Adds a guardian of the target - * @dev Can be called only by the owner - * @param newGuardian The address to add as a guardian - */ - function addGuardian(address newGuardian) external; - - /** - * @dev Removes a guardian of the target - * @dev Can be called only by the owner - * @param currentGuardian The address of the existing guardian to remove - * - * Requirements: - * - * - The guardians count should be higher or equal to the guardian threshold - */ - function removeGuardian(address currentGuardian) external; - - /** - * @dev Sets the hash of the secret string to be provided in `recoverOwnership(..)` function - * @dev Can be called only by the owner - * @param newRecoverSecretHash The hash of the secret string - * - * Requirements: - * - * - `secretHash` cannot be bytes32(0) - */ - function setRecoverySecretHash(bytes32 newRecoverSecretHash) external; - - /** - * @dev Sets the minimum number of selection by the guardians required so that an - * address can recover ownership - * - * @dev Can be called only by the owner - * @param guardiansThreshold The threshold to set - * - * Requirements: - * - `guardiansThreshold` cannot be more than the guardians count. - */ - function setGuardiansThreshold(uint256 guardiansThreshold) external; - - /** - * @dev select an address to be a potential controller address if he reaches - * the guardian threshold and provide the correct secret string - * - * Requirements: - * - only guardians can select an address - * - * @param addressSelected The address selected by the guardian - */ - function selectNewController(address addressSelected) external; - - /** - * @dev Recovers the ownership permissions of an address in the linked target - * and increment the recover counter - * - * Requirements - * - the address of the recoverer must have a selection equal or higher than the threshold - * defined in `getGuardiansThreshold(...)` - * - * - must have provided the right `plainSecret` that produces the secret Hash - * - * @param recoverer The address of the recoverer - * @param plainSecret The secret word that produce the secret Hash - * @param newHash The new secret Hash to be used in the next recovery process - */ - function recoverOwnership( - address recoverer, - string memory plainSecret, - bytes32 newHash - ) external; -} diff --git a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.sol b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.sol deleted file mode 100644 index fa3df8e6a..000000000 --- a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.0; - -// modules -import { - OwnableUnset -} from "@erc725/smart-contracts/contracts/custom/OwnableUnset.sol"; -import {LSP11BasicSocialRecoveryCore} from "./LSP11BasicSocialRecoveryCore.sol"; - -/** - * @title Implementation of LSP11 - Basic Social Recovery standard - * @dev Sets permission for a controller address after a recovery process to interact with an ERC725 - * contract via the LSP6KeyManager - */ -contract LSP11BasicSocialRecovery is LSP11BasicSocialRecoveryCore { - /** - * @notice Sets the target and the owner addresses - * @param _owner The owner of the LSP11 contract - * @param target_ The address of the ER725 contract to recover - */ - constructor(address _owner, address target_) { - OwnableUnset._setOwner(_owner); - _target = target_; - } -} diff --git a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryCore.sol b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryCore.sol deleted file mode 100644 index 0dd64c689..000000000 --- a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryCore.sol +++ /dev/null @@ -1,340 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.4; - -// interfaces -import {ILSP11BasicSocialRecovery} from "./ILSP11BasicSocialRecovery.sol"; - -// libraries -import {LSP6Utils} from "@lukso/lsp6-contracts/contracts/LSP6Utils.sol"; - -// modules -import {ERC725} from "@erc725/smart-contracts/contracts/ERC725.sol"; -import { - OwnableUnset -} from "@erc725/smart-contracts/contracts/custom/OwnableUnset.sol"; -import {ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; -import { - EnumerableSet -} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; - -// constants -import { - ALL_REGULAR_PERMISSIONS -} from "@lukso/lsp6-contracts/contracts/LSP6Constants.sol"; -import {_INTERFACEID_LSP11} from "./LSP11Constants.sol"; -import { - CallerIsNotGuardian, - GuardianAlreadyExist, - GuardianDoNotExist, - GuardiansNumberCannotGoBelowThreshold, - ThresholdCannotBeHigherThanGuardiansNumber, - SecretHashCannotBeZero, - AddressZeroNotAllowed, - ThresholdNotReachedForRecoverer, - WrongPlainSecret -} from "./LSP11Errors.sol"; - -/** - * @title Core Implementation of LSP11-BasicSocialRecovery standard - * @dev Sets permission for a controller address after a recovery process to interact with an ERC725 - * contract via the LSP6KeyManager - */ -abstract contract LSP11BasicSocialRecoveryCore is - OwnableUnset, - ERC165, - ILSP11BasicSocialRecovery -{ - using EnumerableSet for EnumerableSet.AddressSet; - - address internal _target; - - // The guardians threshold - uint256 internal _guardiansThreshold; - - // The number of successful recovery processes - uint256 internal _recoveryCounter; - - // The secret hash to be set by the owner - bytes32 internal _recoverySecretHash; - - // Stores the address selected by a guardian - // in the current `_recoveryCounter` - mapping(uint256 => mapping(address => address)) internal _guardiansChoice; - - // List of guardians addresses - EnumerableSet.AddressSet internal _guardians; - - /** - * @dev Throws if called by any account other than the guardians - */ - modifier onlyGuardians() virtual { - if (!_guardians.contains(msg.sender)) - revert CallerIsNotGuardian(msg.sender); - _; - } - - /** - * @inheritdoc ERC165 - */ - function supportsInterface( - bytes4 _interfaceId - ) public view virtual override returns (bool) { - return - _interfaceId == _INTERFACEID_LSP11 || - super.supportsInterface(_interfaceId); - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function target() public view virtual override returns (address) { - return _target; - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function getRecoveryCounter() - public - view - virtual - override - returns (uint256) - { - return _recoveryCounter; - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function getGuardians() - public - view - virtual - override - returns (address[] memory) - { - return _guardians.values(); - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function isGuardian( - address _address - ) public view virtual override returns (bool) { - return _guardians.contains(_address); - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function getGuardiansThreshold() - public - view - virtual - override - returns (uint256) - { - return _guardiansThreshold; - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function getRecoverySecretHash() - public - view - virtual - override - returns (bytes32) - { - return _recoverySecretHash; - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function getGuardianChoice( - address guardian - ) public view virtual override returns (address) { - return _guardiansChoice[_recoveryCounter][guardian]; - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function addGuardian( - address newGuardian - ) public virtual override onlyOwner { - if (_guardians.contains(newGuardian)) - revert GuardianAlreadyExist(newGuardian); - - _guardians.add(newGuardian); - emit GuardianAdded(newGuardian); - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function removeGuardian( - address existingGuardian - ) public virtual override onlyOwner { - if (!_guardians.contains(existingGuardian)) - revert GuardianDoNotExist(existingGuardian); - if (_guardians.length() == _guardiansThreshold) - revert GuardiansNumberCannotGoBelowThreshold(_guardiansThreshold); - - _guardians.remove(existingGuardian); - emit GuardianRemoved(existingGuardian); - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function setGuardiansThreshold( - uint256 newThreshold - ) public virtual override onlyOwner { - if (newThreshold > _guardians.length()) - revert ThresholdCannotBeHigherThanGuardiansNumber( - newThreshold, - _guardians.length() - ); - - _guardiansThreshold = newThreshold; - emit GuardiansThresholdChanged(newThreshold); - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - * @dev Throws if hash provided is bytes32(0) - */ - function setRecoverySecretHash( - bytes32 newRecoverSecretHash - ) public virtual override onlyOwner { - if (newRecoverSecretHash == bytes32(0)) revert SecretHashCannotBeZero(); - - _recoverySecretHash = newRecoverSecretHash; - emit SecretHashChanged(newRecoverSecretHash); - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function selectNewController( - address addressSelected - ) public virtual override onlyGuardians { - uint256 currentRecoveryCounter = _recoveryCounter; - - _guardiansChoice[currentRecoveryCounter][msg.sender] = addressSelected; - emit SelectedNewController( - currentRecoveryCounter, - msg.sender, - addressSelected - ); - } - - /** - * @inheritdoc ILSP11BasicSocialRecovery - */ - function recoverOwnership( - address recoverer, - string memory plainSecret, - bytes32 newSecretHash - ) public virtual override { - // caching storage variables - uint256 currentRecoveryCounter = _recoveryCounter; - address[] memory guardians = _guardians.values(); - address target_ = _target; - - _validateRequirements( - recoverer, - currentRecoveryCounter, - plainSecret, - newSecretHash, - guardians - ); - - _recoveryCounter++; - _recoverySecretHash = newSecretHash; - emit SecretHashChanged(newSecretHash); - - address keyManager = ERC725(target_).owner(); - - // Setting permissions for `recoverer` - (bytes32[] memory keys, bytes[] memory values) = LSP6Utils - .generateNewPermissionsKeys( - ERC725(target_), - recoverer, - ALL_REGULAR_PERMISSIONS - ); - - LSP6Utils.setDataViaKeyManager(keyManager, keys, values); - - emit RecoveryProcessSuccessful( - currentRecoveryCounter, - recoverer, - newSecretHash, - guardians - ); - - _cleanStorage(currentRecoveryCounter, guardians.length, guardians); - } - - /** - * @dev The number of guardians should be reasonable, as the validation method - * is using a loop to check the selection of each guardian - * - * Throws if: - * - The address trying to recover didn't reach the guardiansThreshold - * - The new hash being set is bytes32(0) - * - The secret word provided is incorrect - */ - function _validateRequirements( - address recoverer, - uint256 currentRecoveryCounter, - string memory plainSecret, - bytes32 newHash, - address[] memory guardians - ) internal view virtual { - if (recoverer == address(0)) revert AddressZeroNotAllowed(); - uint256 callerSelections; - - unchecked { - for (uint256 i; i < guardians.length; i++) { - if ( - _guardiansChoice[currentRecoveryCounter][guardians[i]] == - recoverer - ) callerSelections++; - } - } - - uint256 guardiansThreshold = _guardiansThreshold; - - if (callerSelections < guardiansThreshold) - revert ThresholdNotReachedForRecoverer( - recoverer, - callerSelections, - guardiansThreshold - ); - if (newHash == bytes32(0)) revert SecretHashCannotBeZero(); - if (keccak256(abi.encodePacked(plainSecret)) != _recoverySecretHash) - revert WrongPlainSecret(); - } - - /** - * @dev Remove the guardians choice after a successful recovery process - * To avoid keeping unnecessary state - */ - function _cleanStorage( - uint256 recoveryCounter, - uint256 guardiansLength, - address[] memory guardians - ) internal virtual { - unchecked { - for (uint256 i; i < guardiansLength; i++) { - delete _guardiansChoice[recoveryCounter][guardians[i]]; - } - } - } -} diff --git a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInit.sol b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInit.sol deleted file mode 100644 index 873a507fc..000000000 --- a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInit.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.0; - -// modules -import { - LSP11BasicSocialRecoveryInitAbstract -} from "./LSP11BasicSocialRecoveryInitAbstract.sol"; - -/** - * @title Deployable Proxy Implementation of LSP11 - Basic Social Recovery standard - * @dev Sets permission for a controller address after a recovery process to interact with an ERC725 - * contract via the LSP6KeyManager - */ -contract LSP11BasicSocialRecoveryInit is LSP11BasicSocialRecoveryInitAbstract { - constructor() { - _disableInitializers(); - } - - /** - * @notice Sets the target and the owner addresses - * @param _owner The owner of the LSP11 contract - * @param target_ The address of the ER725 contract to recover - */ - function initialize( - address target_, - address _owner - ) public virtual initializer { - LSP11BasicSocialRecoveryInitAbstract._initialize(target_, _owner); - } -} diff --git a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInitAbstract.sol b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInitAbstract.sol deleted file mode 100644 index 9d3d45709..000000000 --- a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInitAbstract.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.0; - -// modules -import { - Initializable -} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; -import { - OwnableUnset -} from "@erc725/smart-contracts/contracts/custom/OwnableUnset.sol"; -import {LSP11BasicSocialRecoveryCore} from "./LSP11BasicSocialRecoveryCore.sol"; - -/** - * @title Inheritable Proxy Implementation of LSP11 - Basic Social Recovery standard - * @dev Sets permission for a controller address after a recovery process to interact with an ERC725 - * contract via the LSP6KeyManager - */ -contract LSP11BasicSocialRecoveryInitAbstract is - Initializable, - LSP11BasicSocialRecoveryCore -{ - function _initialize( - address _owner, - address target_ - ) internal virtual onlyInitializing { - OwnableUnset._setOwner(_owner); - _target = target_; - } -} diff --git a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11Constants.sol b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11Constants.sol deleted file mode 100644 index 66ceb1657..000000000 --- a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11Constants.sol +++ /dev/null @@ -1,6 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.0; - -// --- ERC165 interface ids - -bytes4 constant _INTERFACEID_LSP11 = 0x049a28f1; diff --git a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11Errors.sol b/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11Errors.sol deleted file mode 100644 index 6c6951c2b..000000000 --- a/packages/lsp-smart-contracts/contracts/LSP11BasicSocialRecovery/LSP11Errors.sol +++ /dev/null @@ -1,63 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.0; - -// --- Errors - -/** - * @dev reverts when the caller is not a guardian - */ -error CallerIsNotGuardian(address caller); - -/** - * @dev reverts when adding an already existing guardian - */ -error GuardianAlreadyExist(address addressToAdd); - -/** - * @dev reverts when removing a non-existing guardian - */ -error GuardianDoNotExist(address addressToRemove); - -/** - * @dev reverts when removing a guardian and the threshold - * is equal to the number of guardians - */ -error GuardiansNumberCannotGoBelowThreshold(uint256 guardianThreshold); - -/** - * @dev reverts when setting the guardians threshold to a number - * higher than the guardians number - */ -error ThresholdCannotBeHigherThanGuardiansNumber( - uint256 thresholdGiven, - uint256 guardianNumber -); - -/** - * @dev reverts when the secret hash provided is equal to bytes32(0) - */ -error SecretHashCannotBeZero(); - -/** - * @dev reverts when `recoverOwnership(..)` is called with a recoverer that didn't reach - * the guardians threshold - * @param recoverer The address of the recoverer - * @param selections The number of selections that the recoverer have - * @param guardiansThreshold The minimum number of selection needed - */ -error ThresholdNotReachedForRecoverer( - address recoverer, - uint256 selections, - uint256 guardiansThreshold -); - -/** - * @dev reverts when the plain secret produce a different hash than the - * secret hash originally set - */ -error WrongPlainSecret(); - -/** - * @dev reverts when the address zero calls `recoverOwnership(..)` function - */ -error AddressZeroNotAllowed(); diff --git a/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/ILSP11SocialRecovery.sol b/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/ILSP11SocialRecovery.sol new file mode 100644 index 000000000..b3f64090e --- /dev/null +++ b/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/ILSP11SocialRecovery.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.9; + +import "@lukso/lsp11-contracts/contracts/ILSP11SocialRecovery.sol"; diff --git a/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11Constants.sol b/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11Constants.sol new file mode 100644 index 000000000..37b8ab43f --- /dev/null +++ b/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11Constants.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.9; + +import "@lukso/lsp11-contracts/contracts/LSP11Constants.sol"; diff --git a/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11Errors.sol b/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11Errors.sol new file mode 100644 index 000000000..220656d94 --- /dev/null +++ b/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11Errors.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.9; + +import "@lukso/lsp11-contracts/contracts/LSP11Errors.sol"; diff --git a/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11SocialRecovery.sol b/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11SocialRecovery.sol new file mode 100644 index 000000000..1e89b30a9 --- /dev/null +++ b/packages/lsp-smart-contracts/contracts/LSP11SocialRecovery/LSP11SocialRecovery.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.9; + +import "@lukso/lsp11-contracts/contracts/LSP11SocialRecovery.sol"; diff --git a/packages/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Utils.sol b/packages/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Utils.sol index dad7017b9..72fabe536 100644 --- a/packages/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Utils.sol +++ b/packages/lsp-smart-contracts/contracts/LSP4DigitalAssetMetadata/LSP4Utils.sol @@ -1,4 +1,4 @@ // SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.24; +pragma solidity ^0.8.4; import "@lukso/lsp4-contracts/contracts/LSP4Utils.sol"; diff --git a/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol b/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol index 89e9f3aa1..eef928ec3 100644 --- a/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol +++ b/packages/lsp-smart-contracts/contracts/Mocks/ERC165Interfaces.sol @@ -53,8 +53,8 @@ import { ILSP9Vault as ILSP9 } from "@lukso/lsp9-contracts/contracts/ILSP9Vault.sol"; import { - ILSP11BasicSocialRecovery as ILSP11 -} from "../LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol"; + ILSP11SocialRecovery as ILSP11 +} from "../LSP11SocialRecovery/ILSP11SocialRecovery.sol"; import { ILSP14Ownable2Step as ILSP14 } from "@lukso/lsp14-contracts/contracts/ILSP14Ownable2Step.sol"; @@ -88,9 +88,7 @@ import { import { _INTERFACEID_LSP9 } from "@lukso/lsp9-contracts/contracts/LSP9Constants.sol"; -import { - _INTERFACEID_LSP11 -} from "../LSP11BasicSocialRecovery/LSP11Constants.sol"; +import {_INTERFACEID_LSP11} from "../LSP11SocialRecovery/LSP11Constants.sol"; import { _INTERFACEID_LSP14 } from "@lukso/lsp14-contracts/contracts/LSP14Constants.sol"; @@ -161,7 +159,9 @@ contract CalculateLSPInterfaces { } function calculateInterfaceLSP6KeyManager() public pure returns (bytes4) { - bytes4 interfaceId = type(ILSP6).interfaceId ^ + // prettier-ignore + bytes4 interfaceId = + type(ILSP6).interfaceId ^ type(IERC1271).interfaceId ^ calculateInterfaceLSP20CallVerifier() ^ calculateInterfaceLSP25ExecuteRelayCall(); @@ -175,7 +175,9 @@ contract CalculateLSPInterfaces { } function calculateInterfaceLSP7() public pure returns (bytes4) { - bytes4 interfaceId = type(ILSP7).interfaceId ^ + // prettier-ignore + bytes4 interfaceId = + type(ILSP7).interfaceId ^ type(IERC725Y).interfaceId ^ calculateInterfaceLSP17Extendable(); @@ -188,7 +190,9 @@ contract CalculateLSPInterfaces { } function calculateInterfaceLSP8() public pure returns (bytes4) { - bytes4 interfaceId = type(ILSP8).interfaceId ^ + // prettier-ignore + bytes4 interfaceId = + type(ILSP8).interfaceId ^ type(IERC725Y).interfaceId ^ calculateInterfaceLSP17Extendable(); @@ -219,11 +223,14 @@ contract CalculateLSPInterfaces { } function calculateInterfaceLSP11() public pure returns (bytes4) { - bytes4 interfaceId = type(ILSP11).interfaceId; + // prettier-ignore + bytes4 interfaceId = + type(ILSP11).interfaceId ^ + type(ILSP25).interfaceId; require( interfaceId == _INTERFACEID_LSP11, - "_LSP11_INTERFACE_ID does not match XOR of the functions" + "hardcoded _LSP11_INTERFACE_ID does not match XOR of the functions" ); return interfaceId; diff --git a/packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.behaviour.ts b/packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.behaviour.ts deleted file mode 100644 index a5c3b3edb..000000000 --- a/packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.behaviour.ts +++ /dev/null @@ -1,1135 +0,0 @@ -import { ethers } from 'hardhat'; -import { expect } from 'chai'; -import { SignerWithAddress } from '@nomicfoundation/hardhat-ethers/signers'; - -import { LSP11BasicSocialRecovery, LSP6KeyManager, UniversalProfile } from '../../types'; - -import { ERC725YDataKeys, INTERFACE_IDS } from '../../constants'; -import { ALL_PERMISSIONS } from '@lukso/lsp6-contracts'; - -import { callPayload } from '../utils/fixtures'; -import { ContractTransactionResponse } from 'ethers'; - -export type LSP11TestAccounts = { - owner: SignerWithAddress; - addressASelected: SignerWithAddress; - addressBSelected: SignerWithAddress; - any: SignerWithAddress; - random: SignerWithAddress; - - guardian1: SignerWithAddress; - guardian2: SignerWithAddress; - guardian3: SignerWithAddress; - guardian4: SignerWithAddress; -}; - -export const getNamedAccounts = async (): Promise => { - const [ - owner, - addressASelected, - addressBSelected, - any, - random, - guardian1, - guardian2, - guardian3, - guardian4, - ] = await ethers.getSigners(); - - return { - owner, - addressASelected, - addressBSelected, - any, - random, - guardian1, - guardian2, - guardian3, - guardian4, - }; -}; - -export type LSP11DeployParams = { - owner: UniversalProfile; - target: UniversalProfile; -}; - -export type LSP11TestContext = { - accounts: LSP11TestAccounts; - lsp11BasicSocialRecovery: LSP11BasicSocialRecovery; - deployParams: LSP11DeployParams; - universalProfile: UniversalProfile; - lsp6KeyManager: LSP6KeyManager; -}; - -export const shouldBehaveLikeLSP11 = (buildContext: () => Promise) => { - let context: LSP11TestContext; - - describe('When using the contract as password recovery', () => { - before(async () => { - context = await buildContext(); - }); - - describe('when testing owner functionalities', () => { - it('Should revert when non-owner calls `setRecoverySecretHash(..)`', async () => { - const txParams = { - hash: ethers.solidityPackedKeccak256(['string'], ['LUKSO']), - }; - - await expect( - context.lsp11BasicSocialRecovery - .connect(context.accounts.any) - .setRecoverySecretHash(txParams.hash), - ).to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'OwnableCallerNotTheOwner', - ); - }); - - it('Should revert when owner calls `setRecoverySecretHash(..)` with bytes32(0) as secret', async () => { - const txParams = { - hash: '0x0000000000000000000000000000000000000000000000000000000000000000', - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'setRecoverySecretHash', - [txParams.hash], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ).to.be.revertedWithCustomError(context.lsp11BasicSocialRecovery, 'SecretHashCannotBeZero'); - }); - - it('Should pass when owner calls `setRecoverySecretHash(..)`', async () => { - const txParams = { - hash: ethers.solidityPackedKeccak256(['string'], ['LUKSO']), - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'setRecoverySecretHash', - [txParams.hash], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.emit(context.lsp11BasicSocialRecovery, 'SecretHashChanged') - .withArgs(txParams.hash); - }); - }); - - describe('when testing recovery', () => { - describe('when providing the wrong plainSecret', () => { - it('should revert', async () => { - const txParams = { - secret: 'NotLUKSO', - newHash: ethers.solidityPackedKeccak256(['string'], ['UniversalProfiles']), - }; - - await expect( - context.lsp11BasicSocialRecovery - .connect(context.accounts.addressASelected) - .recoverOwnership( - context.accounts.addressASelected.address, - txParams.secret, - txParams.newHash, - ), - ).to.be.revertedWithCustomError(context.lsp11BasicSocialRecovery, 'WrongPlainSecret'); - }); - }); - - describe('when providing bytes32(0) as newSecretHash', () => { - it('should revert', async () => { - const txParams = { - secret: 'LUKSO', - newHash: '0x0000000000000000000000000000000000000000000000000000000000000000', - }; - - await expect( - context.lsp11BasicSocialRecovery - .connect(context.accounts.addressASelected) - .recoverOwnership( - context.accounts.addressASelected.address, - txParams.secret, - txParams.newHash, - ), - ).to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'SecretHashCannotBeZero', - ); - }); - }); - - describe('when providing the correct plainSecret and a valid newHash', () => { - let recoveryTx; - let txParams; - let recoveryCounterBeforeRecovery; - - before(async () => { - txParams = { - secret: 'LUKSO', - newHash: ethers.solidityPackedKeccak256(['string'], ['UniversalProfiles']), - }; - - recoveryCounterBeforeRecovery = - await context.lsp11BasicSocialRecovery.getRecoveryCounter(); - - recoveryTx = await context.lsp11BasicSocialRecovery - .connect(context.accounts.addressASelected) - .recoverOwnership( - context.accounts.addressASelected.address, - txParams.secret, - txParams.newHash, - ); - }); - - it('should increment the recovery counter', async () => { - const recoveryCounterAfterRecovery = - await context.lsp11BasicSocialRecovery.getRecoveryCounter(); - - expect(recoveryCounterAfterRecovery).to.equal( - ethers.toNumber(recoveryCounterBeforeRecovery) + 1, - ); - }); - - it('should emit RecoveryProcessSuccessful event', async () => { - const guardians = await context.lsp11BasicSocialRecovery.getGuardians(); - - expect(recoveryTx) - .to.emit(context.lsp11BasicSocialRecovery, 'RecoveryProcessSuccessful') - .withArgs( - recoveryCounterBeforeRecovery, - context.accounts.addressASelected.address, - txParams.secret, - guardians, - ); - }); - - it('should have set the correct AddressPermissions Keys on target', async () => { - const txParams = { - permissionArrayKey: ERC725YDataKeys.LSP6['AddressPermissions[]'].length, - permissionInArrayKey: - ERC725YDataKeys.LSP6['AddressPermissions[]'].index + - '00000000000000000000000000000003', - permissionMap: - ERC725YDataKeys.LSP6['AddressPermissions:Permissions'] + - context.accounts.addressASelected.address.substr(2), - }; - const [permissionArrayLength, controllerAddress, controllerPermissions] = - await context.universalProfile.getDataBatch([ - txParams.permissionArrayKey, - txParams.permissionInArrayKey, - txParams.permissionMap, - ]); - - expect(permissionArrayLength).to.equal(ethers.zeroPadValue(ethers.toBeHex(4), 16)); - expect(ethers.getAddress(controllerAddress)).to.equal( - context.accounts.addressASelected.address, - ); - expect(controllerPermissions).to.equal(ALL_PERMISSIONS); - }); - }); - }); - - describe('when testing execution on target after recovery', () => { - describe('when setting data on the target', () => { - it('should pass', async () => { - const txParams = { - key: ethers.solidityPackedKeccak256(['string'], ['MyKey']), - value: ethers.hexlify(ethers.toUtf8Bytes('I have access')), - }; - - const payload = context.universalProfile.interface.encodeFunctionData('setData', [ - txParams.key, - txParams.value, - ]); - - await context.lsp6KeyManager.connect(context.accounts.addressASelected).execute(payload); - - const value = await context.universalProfile.getData(txParams.key); - - expect(value).to.equal(txParams.value); - }); - }); - }); - }); - - describe('When using the contract as social recovery', () => { - before(async () => { - context = await buildContext(); - }); - - describe('when testing owner functionalities', () => { - it('Should revert when non-owner calls addGuardian function', async () => { - const txParams = { - guardianAddress: context.accounts.guardian1.address, - }; - await expect( - context.lsp11BasicSocialRecovery - .connect(context.accounts.any) - .addGuardian(txParams.guardianAddress), - ).to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'OwnableCallerNotTheOwner', - ); - }); - - it('Should pass and emit GuardianAdded event when owner calls addGuardian function', async () => { - const txParams = { - guardianAddress: context.accounts.guardian1.address, - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'addGuardian', - [txParams.guardianAddress], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.emit(context.lsp11BasicSocialRecovery, 'GuardianAdded') - .withArgs(txParams.guardianAddress); - - const isGuardian = await context.lsp11BasicSocialRecovery.isGuardian( - txParams.guardianAddress, - ); - - expect(isGuardian).to.be.true; - }); - - it('Should revert when non-owner calls removeGuardian function', async () => { - const txParams = { - guardianAddress: context.accounts.guardian1.address, - }; - await expect( - context.lsp11BasicSocialRecovery - .connect(context.accounts.any) - .removeGuardian(txParams.guardianAddress), - ).to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'OwnableCallerNotTheOwner', - ); - }); - - it('Should pass and emit GuardianRemoved event when owner calls removeGuardian function', async () => { - const txParams = { - guardianAddress: context.accounts.guardian1.address, - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'removeGuardian', - [txParams.guardianAddress], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.emit(context.lsp11BasicSocialRecovery, 'GuardianRemoved') - .withArgs(txParams.guardianAddress); - - const isGuardian = await context.lsp11BasicSocialRecovery.isGuardian( - txParams.guardianAddress, - ); - - expect(isGuardian).to.be.false; - }); - - it('Should revert when non-owner calls `setGuardiansThreshold(..)`', async () => { - const txParams = { - newThreshold: 1, - }; - - await expect( - context.lsp11BasicSocialRecovery - .connect(context.accounts.any) - .setGuardiansThreshold(txParams.newThreshold), - ).to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'OwnableCallerNotTheOwner', - ); - }); - - it('Should pass and emit GuardiansThresholdChanged event when owner `setGuardiansThreshold(..)`', async () => { - const txParams = { - newThreshold: 0, - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'setGuardiansThreshold', - [txParams.newThreshold], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.emit(context.lsp11BasicSocialRecovery, 'GuardiansThresholdChanged') - .withArgs(txParams.newThreshold); - - const guardiansThreshold = ethers.toNumber( - await context.lsp11BasicSocialRecovery.getGuardiansThreshold(), - ); - expect(guardiansThreshold).to.equal(txParams.newThreshold); - }); - - it('Should revert when non-owner calls `setRecoverySecretHash(..)`', async () => { - const txParams = { - hash: ethers.solidityPackedKeccak256(['string'], ['LUKSO']), - }; - - await expect( - context.lsp11BasicSocialRecovery - .connect(context.accounts.any) - .setRecoverySecretHash(txParams.hash), - ).to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'OwnableCallerNotTheOwner', - ); - }); - - it('Should pass and emit SecretHashChanged event when owner calls `setRecoverySecretHash(..)`', async () => { - const txParams = { - hash: ethers.solidityPackedKeccak256(['string'], ['LUKSO']), - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'setRecoverySecretHash', - [txParams.hash], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.emit(context.lsp11BasicSocialRecovery, 'SecretHashChanged') - .withArgs(txParams.hash); - }); - }); - - describe('when testing function logic', () => { - describe('when owner calls addGuardian(..) with an existing Guardian address', () => { - let txParams; - let payload; - before('Adding the guardian first', async () => { - // Add the guardian - txParams = { - guardianAddress: context.accounts.guardian1.address, - }; - - payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData('addGuardian', [ - txParams.guardianAddress, - ]); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.emit(context.lsp11BasicSocialRecovery, 'GuardianAdded') - .withArgs(txParams.guardianAddress); - }); - - it('Should revert with GuardianAlreadyExist error ', async () => { - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.be.revertedWithCustomError(context.lsp11BasicSocialRecovery, 'GuardianAlreadyExist') - .withArgs(txParams.guardianAddress); - - const isGuardian = await context.lsp11BasicSocialRecovery.isGuardian( - txParams.guardianAddress, - ); - expect(isGuardian).to.be.true; - }); - }); - - describe('when owner calls removeGuardian(..) with a non-existing Guardian address', () => { - it('Should revert with GuardianDoNotExist error', async () => { - const txParams = { - guardianAddress: context.accounts.random.address, - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'removeGuardian', - [txParams.guardianAddress], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.be.revertedWithCustomError(context.lsp11BasicSocialRecovery, 'GuardianDoNotExist') - .withArgs(txParams.guardianAddress); - }); - }); - - describe('when owner calls setGuardiansThreshold(..) with a threshold higher than the guardians count', () => { - it('should revert with ThresholdCannotBeHigherThanGuardiansNumber error', async () => { - const guardians = await context.lsp11BasicSocialRecovery.getGuardians(); - - expect(guardians.length).to.equal(1); - - const txParams = { - newThreshold: 2, - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'setGuardiansThreshold', - [txParams.newThreshold], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'ThresholdCannotBeHigherThanGuardiansNumber', - ) - .withArgs(txParams.newThreshold, guardians.length); - }); - }); - - describe('when owner calls setGuardiansThreshold(..) with a threshold lower than the guardians count', () => { - it('should pass', async () => { - const guardians = await context.lsp11BasicSocialRecovery.getGuardians(); - - expect(guardians.length).to.equal(1); - - const txParams = { - newThreshold: 0, - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'setGuardiansThreshold', - [txParams.newThreshold], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.emit(context.lsp11BasicSocialRecovery, 'GuardiansThresholdChanged') - .withArgs(txParams.newThreshold); - - const guardiansThreshold = await context.lsp11BasicSocialRecovery.getGuardiansThreshold(); - expect(guardiansThreshold).to.equal(txParams.newThreshold); - }); - }); - - describe('when owner calls setGuardiansThreshold(..) with a threshold equal to the guardians count', () => { - it('should pass', async () => { - const guardians = await context.lsp11BasicSocialRecovery.getGuardians(); - - expect(guardians.length).to.equal(1); - - const txParams = { - newThreshold: 1, - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'setGuardiansThreshold', - [txParams.newThreshold], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.emit(context.lsp11BasicSocialRecovery, 'GuardiansThresholdChanged') - .withArgs(txParams.newThreshold); - - const guardiansThreshold = await context.lsp11BasicSocialRecovery.getGuardiansThreshold(); - expect(guardiansThreshold).to.equal(txParams.newThreshold); - }); - }); - - describe('when owner calls removeGuardian(..) when the threshold is equal to the guardians count', () => { - let guardians; - let guardiansThreshold; - before('Check that the guardians number is equal to the guardians threshold', async () => { - guardians = await context.lsp11BasicSocialRecovery.getGuardians(); - guardiansThreshold = await context.lsp11BasicSocialRecovery.getGuardiansThreshold(); - - expect(guardians.length).to.equal(guardiansThreshold); - }); - - it('Should revert with GuardiansNumberCannotGoBelowThreshold error', async () => { - const txParams = { - guardianAddress: context.accounts.guardian1.address, - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'removeGuardian', - [txParams.guardianAddress], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ) - .to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'GuardiansNumberCannotGoBelowThreshold', - ) - .withArgs(guardiansThreshold); - }); - }); - - describe('when owner calls setRecoverySecretHash(..) with bytes32(0) as secret', () => { - it('should revert with SecretHashCannotBeZero error', async () => { - const txParams = { - hash: '0x0000000000000000000000000000000000000000000000000000000000000000', - }; - - const payload = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'setRecoverySecretHash', - [txParams.hash], - ); - - await expect( - context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload, - ), - ), - ).to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'SecretHashCannotBeZero', - ); - }); - }); - }); - - describe('when testing guardians functionalities', () => { - before('Checking guardians and add few more', async () => { - // Checking that guardian1 address is set - const isAddress1Guardian = await context.lsp11BasicSocialRecovery.isGuardian( - context.accounts.guardian1.address, - ); - - expect(isAddress1Guardian).to.be.true; - - // Adding more guardians - - const payload1 = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'addGuardian', - [context.accounts.guardian2.address], - ); - - const payload2 = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'addGuardian', - [context.accounts.guardian3.address], - ); - - const payload3 = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'addGuardian', - [context.accounts.guardian4.address], - ); - - await context.lsp6KeyManager - .connect(context.accounts.owner) - .executeBatch( - [0, 0, 0], - [ - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload1, - ), - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload2, - ), - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload3, - ), - ], - ); - - const isAddress2Guardian = await context.lsp11BasicSocialRecovery.isGuardian( - context.accounts.guardian2.address, - ); - - const isAddress3Guardian = await context.lsp11BasicSocialRecovery.isGuardian( - context.accounts.guardian3.address, - ); - - const isAddress4Guardian = await context.lsp11BasicSocialRecovery.isGuardian( - context.accounts.guardian4.address, - ); - - expect(isAddress2Guardian).to.be.true; - expect(isAddress3Guardian).to.be.true; - expect(isAddress4Guardian).to.be.true; - }); - - describe('when non-guardian calls selectNewController(..) function', () => { - it('should revert with CallerIsNotGuardian error', async () => { - const txParams = { - addressToSelect: context.accounts.addressASelected.address, - }; - - const caller = context.accounts.random; - - const isGuardian = await context.lsp11BasicSocialRecovery.isGuardian(caller.address); - - expect(isGuardian).to.be.false; - - await expect( - context.lsp11BasicSocialRecovery - .connect(caller) - .selectNewController(txParams.addressToSelect), - ) - .to.be.revertedWithCustomError(context.lsp11BasicSocialRecovery, 'CallerIsNotGuardian') - .withArgs(caller.address); - }); - }); - - describe('when a guardian calls selectNewController(..) function', () => { - it('should pass and emit SelectedNewController event', async () => { - const txParams = { - addressToSelect: context.accounts.addressASelected.address, - }; - - const caller = context.accounts.guardian1; - - const isGuardian = await context.lsp11BasicSocialRecovery.isGuardian(caller.address); - - expect(isGuardian).to.be.true; - - const currentRecoveryCounter = - await context.lsp11BasicSocialRecovery.getRecoveryCounter(); - - await expect( - context.lsp11BasicSocialRecovery - .connect(caller) - .selectNewController(txParams.addressToSelect), - ) - .to.emit(context.lsp11BasicSocialRecovery, 'SelectedNewController') - .withArgs(currentRecoveryCounter, caller.address, txParams.addressToSelect); - }); - }); - }); - - describe('when finalizing recovery', () => { - let plainSecret; - let recoverySecretHash; - let beforeRecoveryCounter; - let guardiansThreshold; - let addressBselection; - - before('Distribution selection of the guardians and setting recovery params', async () => { - // Checks that recoveryCounter equal 0 before recovery - beforeRecoveryCounter = await context.lsp11BasicSocialRecovery.getRecoveryCounter(); - - expect(beforeRecoveryCounter).to.equal(0); - - // Changing the threshold to 3 out of 4 guardians - const payload1 = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'setGuardiansThreshold', - [3], - ); - - await context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload1, - ), - ); - - guardiansThreshold = await context.lsp11BasicSocialRecovery.getGuardiansThreshold(); - expect(guardiansThreshold).to.equal(3); - - // Changing the secretHash to "LUKSO" - plainSecret = 'LUKSO'; - recoverySecretHash = ethers.solidityPackedKeccak256(['string'], [plainSecret]); - - const payload2 = context.lsp11BasicSocialRecovery.interface.encodeFunctionData( - 'setRecoverySecretHash', - [recoverySecretHash], - ); - - await context.lsp6KeyManager - .connect(context.accounts.owner) - .execute( - callPayload( - context.universalProfile, - await context.lsp11BasicSocialRecovery.getAddress(), - payload2, - ), - ); - - // Guardian 1 selects address A - await context.lsp11BasicSocialRecovery - .connect(context.accounts.guardian1) - .selectNewController(context.accounts.addressASelected.address); - - const guardian1Choice = await context.lsp11BasicSocialRecovery.getGuardianChoice( - context.accounts.guardian1.address, - ); - - expect(guardian1Choice).to.equal(context.accounts.addressASelected.address); - - // Guardian 2 selects address A - await context.lsp11BasicSocialRecovery - .connect(context.accounts.guardian2) - .selectNewController(context.accounts.addressASelected.address); - - const guardian2Choice = await context.lsp11BasicSocialRecovery.getGuardianChoice( - context.accounts.guardian2.address, - ); - - expect(guardian2Choice).to.equal(context.accounts.addressASelected.address); - - // Guardian 3 selects address A - await context.lsp11BasicSocialRecovery - .connect(context.accounts.guardian3) - .selectNewController(context.accounts.addressASelected.address); - - const guardian3Choice = await context.lsp11BasicSocialRecovery.getGuardianChoice( - context.accounts.guardian3.address, - ); - - expect(guardian3Choice).to.equal(context.accounts.addressASelected.address); - - // Guardian 4 selects address B - await context.lsp11BasicSocialRecovery - .connect(context.accounts.guardian4) - .selectNewController(context.accounts.addressBSelected.address); - - const guardian4Choice = await context.lsp11BasicSocialRecovery.getGuardianChoice( - context.accounts.guardian4.address, - ); - - addressBselection = 1; - - expect(guardian4Choice).to.equal(context.accounts.addressBSelected.address); - }); - - describe("When address B calls recoverOwnership(..) when it didn't reached the guardians threshold", () => { - it('should revert with ThresholdNotReachedForRecoverer error', async () => { - const txParams = { - secret: plainSecret, - newHash: ethers.solidityPackedKeccak256(['string'], ['NotLUKSO']), - }; - - await expect( - context.lsp11BasicSocialRecovery - .connect(context.accounts.addressBSelected) - .recoverOwnership( - context.accounts.addressBSelected.address, - txParams.secret, - txParams.newHash, - ), - ) - .to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'ThresholdNotReachedForRecoverer', - ) - .withArgs( - context.accounts.addressBSelected.address, - addressBselection, - guardiansThreshold, - ); - }); - }); - - describe('When address A calls recoverOwnership(..) with bytes32(0) as new secretHash', () => { - it('should revert with SecretHashCannotBeZero error', async () => { - const txParams = { - secret: plainSecret, - newHash: '0x0000000000000000000000000000000000000000000000000000000000000000', - }; - - await expect( - context.lsp11BasicSocialRecovery - .connect(context.accounts.addressASelected) - .recoverOwnership( - context.accounts.addressASelected.address, - txParams.secret, - txParams.newHash, - ), - ).to.be.revertedWithCustomError( - context.lsp11BasicSocialRecovery, - 'SecretHashCannotBeZero', - ); - }); - }); - - describe('When address A calls recoverOwnership(..) with the incorrect plainSecret', () => { - it('should revert with WrongPlainSecret error', async () => { - const txParams = { - secret: 'NotTheValidPlainSecret', - newHash: ethers.solidityPackedKeccak256(['string'], ['NotLUKSO']), - }; - - await expect( - context.lsp11BasicSocialRecovery - .connect(context.accounts.addressASelected) - .recoverOwnership( - context.accounts.addressASelected.address, - txParams.secret, - txParams.newHash, - ), - ).to.be.revertedWithCustomError(context.lsp11BasicSocialRecovery, 'WrongPlainSecret'); - }); - }); - - describe('When address A calls recoverOwnership(..) with the correct plainSecret', () => { - let ownershipRecoveryTx; - let newPlainSecret; - let newSecretHash; - before('Creating the tx of recovering', async () => { - newPlainSecret = 'UniversalProfiles'; - newSecretHash = ethers.solidityPackedKeccak256(['string'], [newPlainSecret]); - - const txParams = { - secret: plainSecret, - newHash: newSecretHash, - }; - - ownershipRecoveryTx = await context.lsp11BasicSocialRecovery - .connect(context.accounts.addressASelected) - .recoverOwnership( - context.accounts.addressASelected.address, - txParams.secret, - txParams.newHash, - ); - }); - - it('should pass and emit RecoveryProcessSuccessful event', async () => { - expect(ownershipRecoveryTx) - .to.emit(context.lsp11BasicSocialRecovery, 'RecoveryProcessSuccessful') - .withArgs( - beforeRecoveryCounter, - context.accounts.addressASelected, - newSecretHash, - await context.lsp11BasicSocialRecovery.getGuardians(), - ); - }); - - it('should increment the recovery counter', async () => { - const afterRecoveryCounter = await context.lsp11BasicSocialRecovery.getRecoveryCounter(); - - expect(afterRecoveryCounter).to.equal(ethers.toNumber(beforeRecoveryCounter) + 1); - }); - - it('should update the recoverySecretHash ', async () => { - expect(ownershipRecoveryTx) - .to.emit(context.lsp11BasicSocialRecovery, 'SecretHashChanged') - .withArgs(newSecretHash); - }); - - it('should add the AddressPermissions Key for address A in the target ', async () => { - const txParams = { - permissionArrayKey: ERC725YDataKeys.LSP6['AddressPermissions[]'].length, - permissionInArrayKey: - ERC725YDataKeys.LSP6['AddressPermissions[]'].index + - '00000000000000000000000000000003', - permissionMap: - ERC725YDataKeys.LSP6['AddressPermissions:Permissions'] + - context.accounts.addressASelected.address.substr(2), - }; - const [permissionArrayLength, controllerAddress, controllerPermissions] = - await context.universalProfile.getDataBatch([ - txParams.permissionArrayKey, - txParams.permissionInArrayKey, - txParams.permissionMap, - ]); - - expect(permissionArrayLength).to.equal(ethers.zeroPadValue(ethers.toBeHex(4), 16)); - expect(ethers.getAddress(controllerAddress)).to.equal( - context.accounts.addressASelected.address, - ); - expect(controllerPermissions).to.equal(ALL_PERMISSIONS); - }); - }); - }); - - describe('when testing execution on target after recovery', () => { - describe('when setting data on the target', () => { - it('should pass', async () => { - const txParams = { - key: ethers.solidityPackedKeccak256(['string'], ['MyKey']), - value: ethers.hexlify(ethers.toUtf8Bytes('I have access')), - }; - - const payload = context.universalProfile.interface.encodeFunctionData('setData', [ - txParams.key, - txParams.value, - ]); - - await context.lsp6KeyManager.connect(context.accounts.addressASelected).execute(payload); - - const value = await context.universalProfile.getData(txParams.key); - - expect(value).to.equal(txParams.value); - }); - }); - }); - - describe('when checking guardians choice', () => { - it('should be reset', async () => { - const guardian1Choice = await context.lsp11BasicSocialRecovery.getGuardianChoice( - context.accounts.guardian1.address, - ); - - expect(guardian1Choice).to.equal(ethers.ZeroAddress); - - const guardian2Choice = await context.lsp11BasicSocialRecovery.getGuardianChoice( - context.accounts.guardian2.address, - ); - - expect(guardian2Choice).to.equal(ethers.ZeroAddress); - }); - }); - }); -}; - -export type LSP11InitializeTestContext = { - lsp11BasicSocialRecovery: LSP11BasicSocialRecovery; - deployParams: LSP11DeployParams; - initializeTransaction: ContractTransactionResponse; -}; - -export const shouldInitializeLikeLSP11 = ( - buildContext: () => Promise, -) => { - let context: LSP11InitializeTestContext; - - before(async () => { - context = await buildContext(); - }); - - describe('when the contract was initialized', () => { - it('Should have registered the ERC165 interface', async () => { - expect(await context.lsp11BasicSocialRecovery.supportsInterface(INTERFACE_IDS.ERC165)).to.be - .true; - }); - - it('Should have registered the LSP11 interface', async () => { - expect( - await context.lsp11BasicSocialRecovery.supportsInterface( - INTERFACE_IDS.LSP11BasicSocialRecovery, - ), - ).to.be.true; - }); - - it('Should have set the owner', async () => { - const owner = await context.lsp11BasicSocialRecovery.owner(); - expect(owner).to.equal(await context.deployParams.owner.getAddress()); - }); - - it('Should have set the linked target', async () => { - const target = await context.lsp11BasicSocialRecovery['target()'](); - expect(target).to.equal(await context.deployParams.target.getAddress()); - }); - }); -}; diff --git a/packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.test.ts b/packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.test.ts deleted file mode 100644 index 728d6ede4..000000000 --- a/packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.test.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { LSP11BasicSocialRecovery__factory, LSP6KeyManager, UniversalProfile } from '../../types'; - -import { - getNamedAccounts, - shouldInitializeLikeLSP11, - LSP11TestContext, - shouldBehaveLikeLSP11, -} from './LSP11BasicSocialRecovery.behaviour'; - -import { - setupProfileWithKeyManagerWithURD, - grantLSP11PermissionViaKeyManager, -} from '../utils/fixtures'; - -describe('LSP11BasicSocialRecovery with constructor', () => { - let context: LSP11TestContext; - - const buildTestContext = async (): Promise => { - const accounts = await getNamedAccounts(); - - const [UP, KM] = await setupProfileWithKeyManagerWithURD(accounts.owner); - - const universalProfile = UP as UniversalProfile; - const lsp6KeyManager = KM as LSP6KeyManager; - - const deployParams = { - owner: universalProfile, - target: universalProfile, - }; - - const lsp11BasicSocialRecovery = await new LSP11BasicSocialRecovery__factory( - accounts.any, - ).deploy(await deployParams.owner.getAddress(), await deployParams.target.getAddress()); - - await grantLSP11PermissionViaKeyManager( - accounts.owner, - universalProfile, - lsp6KeyManager, - await lsp11BasicSocialRecovery.getAddress(), - ); - - return { - accounts, - lsp11BasicSocialRecovery, - deployParams, - universalProfile, - lsp6KeyManager, - }; - }; - - before(async () => { - context = await buildTestContext(); - }); - - describe('When deploying the contract', () => { - describe('When initializing the contract', () => { - shouldInitializeLikeLSP11(async () => { - const { lsp11BasicSocialRecovery, deployParams } = context; - return { - lsp11BasicSocialRecovery, - deployParams, - initializeTransaction: context.lsp11BasicSocialRecovery.deploymentTransaction(), - }; - }); - }); - }); - - describe('When testing deployed contract', () => { - shouldBehaveLikeLSP11(buildTestContext); - }); -}); diff --git a/packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInit.test.ts b/packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInit.test.ts deleted file mode 100644 index 686f84632..000000000 --- a/packages/lsp-smart-contracts/tests/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInit.test.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { expect } from 'chai'; - -import { - LSP6KeyManager, - UniversalProfile, - LSP11BasicSocialRecoveryInit__factory, - LSP11BasicSocialRecovery, -} from '../../types'; - -import { - getNamedAccounts, - shouldInitializeLikeLSP11, - LSP11TestContext, - shouldBehaveLikeLSP11, -} from './LSP11BasicSocialRecovery.behaviour'; - -import { - setupProfileWithKeyManagerWithURD, - deployProxy, - grantLSP11PermissionViaKeyManager, -} from '../utils/fixtures'; - -describe('LSP11BasicSocialRecoveryInit with proxy', () => { - const buildTestContext = async (): Promise => { - const accounts = await getNamedAccounts(); - - const [UP, KM] = await setupProfileWithKeyManagerWithURD(accounts.owner); - - const universalProfile = UP as UniversalProfile; - const lsp6KeyManager = KM as LSP6KeyManager; - - const deployParams = { - owner: universalProfile, - target: universalProfile, - }; - - const lsp11BasicSocialRecoveryInit = await new LSP11BasicSocialRecoveryInit__factory( - accounts.owner, - ).deploy(); - - const lsp11BasicSocialRecoveryProxy = await deployProxy( - await lsp11BasicSocialRecoveryInit.getAddress(), - accounts.owner, - ); - - const lsp11BasicSocialRecovery = lsp11BasicSocialRecoveryInit.attach( - lsp11BasicSocialRecoveryProxy, - ) as unknown as LSP11BasicSocialRecovery; - - await grantLSP11PermissionViaKeyManager( - accounts.owner, - universalProfile, - lsp6KeyManager, - await lsp11BasicSocialRecovery.getAddress(), - ); - - return { - accounts, - lsp11BasicSocialRecovery, - deployParams, - universalProfile, - lsp6KeyManager, - }; - }; - - const initializeProxy = async (context: LSP11TestContext) => { - return context.lsp11BasicSocialRecovery['initialize(address,address)']( - await context.deployParams.owner.getAddress(), - await context.deployParams.target.getAddress(), - ); - }; - - describe('When deploying the contract as proxy', () => { - let context: LSP11TestContext; - - before(async () => { - context = await buildTestContext(); - }); - - describe('When initializing the proxy contract', () => { - shouldInitializeLikeLSP11(async () => { - const { lsp11BasicSocialRecovery, deployParams } = context; - const initializeTransaction = await initializeProxy(context); - - return { - lsp11BasicSocialRecovery, - deployParams, - initializeTransaction, - }; - }); - }); - - describe('When calling initialize more than once', () => { - it('should revert', async () => { - await expect(initializeProxy(context)).to.be.revertedWith( - 'Initializable: contract is already initialized', - ); - }); - }); - }); - - describe('When testing deployed contract', () => { - shouldBehaveLikeLSP11(() => - buildTestContext().then(async (context) => { - await initializeProxy(context); - - return context; - }), - ); - }); -}); diff --git a/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts b/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts index 4f0d05c02..0442780ec 100644 --- a/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts +++ b/packages/lsp-smart-contracts/tests/Mocks/ERC165Interfaces.test.ts @@ -66,7 +66,7 @@ describe('Calculate LSP interfaces', () => { it('LSP11', async () => { const result = await contract.calculateInterfaceLSP11(); - expect(result).to.equal(INTERFACE_IDS.LSP11BasicSocialRecovery); + expect(result).to.equal(INTERFACE_IDS.LSP11SocialRecovery); }); it('LSP14', async () => { diff --git a/packages/lsp-smart-contracts/tests/foundry/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.t.sol b/packages/lsp-smart-contracts/tests/foundry/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.t.sol deleted file mode 100644 index 1e37dea63..000000000 --- a/packages/lsp-smart-contracts/tests/foundry/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.t.sol +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.13; - -import "forge-std/Test.sol"; - -import "./LSP11Mock.sol"; -import "../../../contracts/LSP11BasicSocialRecovery/LSP11Errors.sol"; - -contract LSP11BasicSocialRecoveryTests is Test { - LSP11Mock public lsp11; - address internal _lsp11OwnerAddress = vm.addr(1); - address internal _targetAddress = vm.addr(2); - - function setUp() public { - lsp11 = new LSP11Mock(_lsp11OwnerAddress, _targetAddress); - } - - // when secret is not set, should revert with any plainSecret value - function testValidateRequirementsShouldRevertWithRandomSecret( - string memory plainSecret - ) public { - address recoverer = vm.addr(3); - uint256 currentRecoveryCounter = 1; - bytes32 newHash = keccak256(abi.encodePacked("newHash")); - address[] memory guardians = new address[](0); - vm.expectRevert(WrongPlainSecret.selector); - lsp11.validateRequirements( - recoverer, - currentRecoveryCounter, - plainSecret, - newHash, - guardians - ); - } - - function testShouldNotRevertWithCorrectSecret( - string memory plainSecret - ) public { - address recoverer = vm.addr(3); - uint256 currentRecoveryCounter = 1; - bytes32 newHash = keccak256(abi.encodePacked("newHash")); - address[] memory guardians = new address[](0); - vm.prank(_lsp11OwnerAddress); - lsp11.setRecoverySecretHash(keccak256(abi.encodePacked(plainSecret))); - lsp11.validateRequirements( - recoverer, - currentRecoveryCounter, - plainSecret, - newHash, - guardians - ); - } - - // mocking setGuardiansThreshold(...) to be able to test the revert (ThresholdCannotBeHigherThanGuardiansNumber) - function testSetCannotGuardiansThresholdSuperiorToGuardiansLength( - uint64 guardianLength, - uint64 offset - ) public { - if (offset == 0) return; - vm.startPrank(_lsp11OwnerAddress); - uint256 guardianLength256 = guardianLength; - uint256 offset256 = offset; - uint256 newThreshold = guardianLength256 + offset256; - - vm.expectRevert( - abi.encodeWithSelector( - ThresholdCannotBeHigherThanGuardiansNumber.selector, - newThreshold, - guardianLength - ) - ); - lsp11.setGuardiansThresholdMock(newThreshold, guardianLength); - vm.stopPrank(); - } -} diff --git a/packages/lsp-smart-contracts/tests/foundry/LSP11BasicSocialRecovery/LSP11Mock.sol b/packages/lsp-smart-contracts/tests/foundry/LSP11BasicSocialRecovery/LSP11Mock.sol deleted file mode 100644 index 02414f79f..000000000 --- a/packages/lsp-smart-contracts/tests/foundry/LSP11BasicSocialRecovery/LSP11Mock.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity ^0.8.13; - -import "../../../contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.sol"; -import "../../../contracts/LSP11BasicSocialRecovery/LSP11Errors.sol"; - -contract LSP11Mock is LSP11BasicSocialRecovery { - constructor( - address _owner, - address target_ - ) LSP11BasicSocialRecovery(_owner, target_) {} - - function validateRequirements( - address recoverer, - uint256 currentRecoveryCounter, - string memory plainSecret, - bytes32 newHash, - address[] memory guardians - ) public view { - _validateRequirements( - recoverer, - currentRecoveryCounter, - plainSecret, - newHash, - guardians - ); - } - - function setGuardiansThresholdMock( - uint256 newThreshold, - uint256 guardianLength - ) public onlyOwner { - if (newThreshold > guardianLength) - revert ThresholdCannotBeHigherThanGuardiansNumber( - newThreshold, - guardianLength - ); - - _guardiansThreshold = newThreshold; - } -} diff --git a/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol b/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol index a1381a256..f79c63f8c 100644 --- a/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol +++ b/packages/lsp11-contracts/contracts/LSP11SocialRecovery.sol @@ -901,14 +901,20 @@ contract LSP11SocialRecovery is // if there is no guardians, disallow recovering if (guardiansThresholdOfAccount == 0) revert AccountNotSetupYet(); - // retrieve number of votes caller have - uint256 votesOfGuardianVotedAddress_ = _votesOfguardianVotedAddress[ - account - ][recoveryCounter][votedAddress]; - - // if the threshold is 0, and the caller does not have votes will rely on the hash - if (votesOfGuardianVotedAddress_ < guardiansThresholdOfAccount) - revert CallerVotesHaveNotReachedThreshold(account, votedAddress); + // use block scope to discard local variable after check and prevent stack too deep + { + // retrieve number of votes caller have + uint256 votesOfGuardianVotedAddress_ = _votesOfguardianVotedAddress[ + account + ][recoveryCounter][votedAddress]; + + // if the threshold is 0, and the caller does not have votes will rely on the hash + if (votesOfGuardianVotedAddress_ < guardiansThresholdOfAccount) + revert CallerVotesHaveNotReachedThreshold( + account, + votedAddress + ); + } // if there is a secret require a commitment first if (currentSecretHash != bytes32(0)) { diff --git a/packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol b/packages/lsp11-contracts/foundry/LSP11AccountFunctionalities.t.sol similarity index 100% rename from packages/lsp11-contracts/foundry/LSP11UniversalRecovery.t.sol rename to packages/lsp11-contracts/foundry/LSP11AccountFunctionalities.t.sol diff --git a/packages/lsp11-contracts/package.json b/packages/lsp11-contracts/package.json index d7ed7be73..74bcecd0d 100644 --- a/packages/lsp11-contracts/package.json +++ b/packages/lsp11-contracts/package.json @@ -47,8 +47,7 @@ "package": "hardhat prepare-package" }, "dependencies": { - "@erc725/smart-contracts": "^7.0.0", - "@lukso/lsp25-contracts": "~0.15.0-rc.4", + "@lukso/lsp25-contracts": "~0.15.0", "@openzeppelin/contracts": "^4.9.3" } } diff --git a/packages/lsp4-contracts/contracts/LSP4Utils.sol b/packages/lsp4-contracts/contracts/LSP4Utils.sol index 3541abb6b..76b59251f 100644 --- a/packages/lsp4-contracts/contracts/LSP4Utils.sol +++ b/packages/lsp4-contracts/contracts/LSP4Utils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.24; +pragma solidity ^0.8.4; import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; import { diff --git a/publish.mjs b/publish.mjs index c61d78b0c..0479210e7 100644 --- a/publish.mjs +++ b/publish.mjs @@ -1,8 +1,8 @@ #!/usr/bin/env node -import { readFile } from "fs/promises"; -import { $ } from "zx"; +import { readFile } from 'fs/promises'; +import { $ } from 'zx'; -const outputs = JSON.parse(await readFile(process.argv[2], "utf-8")); +const outputs = JSON.parse(await readFile(process.argv[2], 'utf-8')); for (const key in outputs) { const value = outputs[key]; const match = key.match(/^(.*\/.*)--release_created$/); @@ -10,13 +10,13 @@ for (const key in outputs) { // Skip if no release was created for this LSP package if (!match || !value) continue; - let tag = "latest"; + let tag = 'latest'; const version = outputs[`${match[1]}--version`]; // Do not publish as latest on npm if we are doing a release candidate - if (version != null && version.includes("-rc")) { - tag = "rc"; + if (version != null && version.includes('-rc')) { + tag = 'rc'; } const workspace = match[1];